A unix-like environment with the following base packages installed:
@ -17,24 +32,20 @@ A unix-like environment with the following base packages installed:
@@ -17,24 +32,20 @@ A unix-like environment with the following base packages installed:
- `dfu-util`
- Various build essentials, e.g. gcc, automake, autoconf
### Debian/Ubuntu
<OsTabs>
<TabItemvalue="debian">
On Debian and Ubuntu, we'll use apt to install our base dependencies:
#### Apt Update
First, if you haven't updated recently, or if this is a new install from WSL,
First, if you haven't updated recently, or if this is a new install,
you should update to get the latest package information:
```bash
```sh
sudo apt update
```
#### Install Dependencies
With the latest package information, you can now install the base dependencies:
Ubuntu 18.04 LTS release packages a version of CMake that is too old. Please upgrade to Ubuntu 20.04 LTS
or download and install CMake version 3.13.1 or newer manually.
:::
</TabItem>
<TabItemvalue="raspberryos">
On Raspberry OS, we'll use apt to install our base dependencies:
First, if you haven't updated recently, or if this is a new install,
you should update to get the latest package information:
```sh
sudo apt update
```
With the latest package information, you can now install the base dependencies:
### Fedora
```sh
sudo apt install -y \
git \
wget \
autoconf \
automake \
build-essential \
ccache \
device-tree-compiler \
dfu-util \
g++ \
gcc \
libtool \
make \
ninja-build \
cmake \
python3-dev \
python3-pip \
python3-setuptools \
xz-utils
```
TODO
</TabItem>
<TabItemvalue="fedora">
### macOS
On Fedora, we'll use `dnf` to install our base dependencies:
TODO
#### DNF Update
### WSL
First, if you haven't updated recently, or if this is a new install,
you should update to get the latest package information:
Windows Subsystem for Linux can use various Linux distributions. Find a WSL installation on the [Windows Store](https://aka.ms/wslstore).
```sh
sudo dnf update
```
After installing your preferred flavor, follow the directions above on [Debian/Ubuntu](#debianubuntu) or [Fedora](#fedora).
#### Install Dependencies
With the latest package information, you can now install the base dependencies:
```sh
sudo dnf install -y \
git \
wget \
autoconf \
automake \
ccache \
dtc \
dfu-util \
g++ \
gcc \
libtool \
make \
ninja-build \
cmake \
python3-devel \
python3-pip \
python3-setuptools \
xz
```
</TabItem>
<TabItemvalue="win">
:::note
On WSL2 don't put the project files into `/mnt/c/` as file I/O speeds are extremely slow. Instead, run everything in the Linux system and use `cp` to move files over to `/mnt/c/` as needed.
Use `cmd.exe` with these instructions rather than PowerShell.
:::
Chocolatey is recommended and used for the following instructions. You can manually install each of these applications and add them to your `PATH` if you don't want to use Chocolatey.
Homebrew is required to install the system dependencies. If you haven't done so, visit [Homebrew](https://brew.sh/) for instructions. Once installed, use it to install the base dependencies:
`west` is the [Zephyr™ meta-tool](https://docs.zephyrproject.org/latest/guides/west/index.html) used to configure and build Zephyr™ applications. It can be installed by using the `pip` python package manager:
`west` is the [Zephyr™ meta-tool](https://docs.zephyrproject.org/latest/guides/west/index.html) used to configure and build Zephyr™ applications.
West can be installed by using the `pip` python package manager.
```bash
pip3 install --user west
```sh
pip3 install --user -U west
```
:::tip pip user packages
If you haven't done so yet, you may need to add the Python Pip user package directory to your `PATH`, e.g.:
If you don't already have it configured, you may need to update your
`PATH` to include the pip install path. See [User Installs](https://pip.pypa.io/en/stable/user_guide/#user-installs) and [Stack Overflow](https://stackoverflow.com/questions/38112756/how-do-i-access-packages-installed-by-pip-user) for more details.
:::
### Zephyr™ ARM SDK
### Toolchain Installation
The toolchain provides the compiler, linker, etc necessary to build for the target
platform.
<OsTabs>
<TabItemvalue="debian">
#### Zephyr™ ARM SDK
To build firmwares for the ARM architecture (all supported MCUs/keyboards at this point), you'll need to install the Zephyr™ ARM SDK to your system:
The installation will prompt with several questions about installation location, and creating a default `~/.zephyrrc` for you with various variables. The defaults shouldn normally work as expected.
</TabItem>
<TabItemvalue="raspberryos">
Because Raspberry OS (Raspbian) runs on the same architecture (but different ABI) as the keyboard MCUs,
the operating system's installed [cross compilers](https://docs.zephyrproject.org/latest/getting_started/toolchain_other_x_compilers.html) can be used to target the different ABI.
First, the cross compiler should be installed:
```sh
sudo apt install gcc-arm-none-eabi
```
Next, we'll configure Zephyr™ with some extra environment variables needed to find the cross compiler by adding the following to `~/.zephyrrc`:
```sh
export ZEPHYR_TOOLCHAIN_VARIANT=cross-compile
export CROSS_COMPILE=/usr/bin/arm-none-eabi-
```
</TabItem>
<TabItemvalue="fedora">
#### Zephyr™ ARM SDK
To build firmwares for the ARM architecture (all supported MCUs/keyboards at this point), you'll need to install the Zephyr™ ARM SDK to your system:
The installation will prompt with several questions about installation location, and creating a default `~/.zephyrrc` for you with various variables. The defaults shouldn normally work as expected.
</TabItem>
<TabItemvalue="win">
#### GNU ARM Embedded
Since the Zephyr™ SDK is not available for Windows, we recommending following the steps to install the [GNU ARM Embedded](https://docs.zephyrproject.org/latest/getting_started/toolchain_3rd_party_x_compilers.html#gnu-arm-embedded).
</TabItem>
<TabItemvalue="mac">
#### Zephyr™ ARM SDK
To build firmwares for the ARM architecture (all supported MCUs/keyboards at this point), you'll need to install the Zephyr™ ARM SDK to your system:
The installation will prompt with several questions about installation location, and creating a default `~/.zephyrrc` for you with various variables. The defaults shouldn normally work as expected.
</TabItem>
</OsTabs>
### Source Code
Next, you'll need to clone the ZMK source repository if you haven't already:
@ -123,13 +296,13 @@ Zephyr™ application is in the `app/` source directory:
@@ -123,13 +296,13 @@ Zephyr™ application is in the `app/` source directory:
#### Step into the repository
```bash
```sh
cd zmk
```
#### Initialize West
```bash
```sh
west init -l app/
```
@ -141,19 +314,19 @@ section again for links to how to do this
@@ -141,19 +314,19 @@ section again for links to how to do this
@ -166,32 +339,92 @@ We suggest two main [options](https://docs.zephyrproject.org/latest/guides/env_v
@@ -166,32 +339,92 @@ We suggest two main [options](https://docs.zephyrproject.org/latest/guides/env_v
To load the Zephyr environment properly for just one transient shell, run the following from your ZMK checkout directory:
<OsTabs>
<TabItemvalue="debian">
```
source zephyr/zephyr-env.sh
```
</TabItem>
<TabItemvalue="raspberryos">
```
source zephyr/zephyr-env.sh
```
</TabItem>
<TabItemvalue="fedora">
```
source zephyr/zephyr-env.sh
```
</TabItem>
<TabItemvalue="mac">
```
source zephyr/zephyr-env.sh
```
</TabItem>
<TabItemvalue="win">
```
source zephyr/zephyr-env.cmd
```
</TabItem>
</OsTabs>
#### All Shells
To load the environment variables for your shell every time,
append the existing `~/.zephyrrc` file to your shell's RC file and then start a new shell.
##### Bash
<Tabs
groupId="shell"
defaultValue="bash"
values={[
{label: 'bash', value: 'bash'},
{label: 'zsh', value: 'zsh'},
{label: 'cmd.exe', value: 'cmd'},
]
}>
<TabItemvalue="bash">
```
cat ~/.zephyrrc >> ~/.bashrc
```
##### ZSH
</TabItem>
<TabItemvalue="zsh">
```
cat ~/.zephyrrc >> ~/.zshrc
```
</TabItem>
<TabItemvalue="cmd">
`cmd.exe` instructions coming soon!
</TabItem>
</Tabs>
## Build
From here on, building and flashing ZMK should all be done from the `app/` subdirectory of the ZMK checkout:
```bash
```sh
cd app
```
@ -210,7 +443,7 @@ Given the following:
@@ -210,7 +443,7 @@ Given the following:
You can build ZMK with the following:
```bash
```sh
west build -b proton_c -- -DSHIELD=kyria -DKEYMAP=default
```
@ -225,7 +458,7 @@ Given the following:
@@ -225,7 +458,7 @@ Given the following: