Skip to content

Commit

Permalink
add local build support for modules
Browse files Browse the repository at this point in the history
  • Loading branch information
urob committed Apr 21, 2024
1 parent 5488081 commit a957437
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 4 deletions.
7 changes: 5 additions & 2 deletions scripts/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ If the zmk-config repo contains a `combos.dtsi` file, the script will also
automatically update the `MAX_COMBOS_PER_KEY` and `MAX_KEYS_PER_COMBO` settings
for all boards, depending on the combos specified in `combos.dtsi`.

If the `west.yml` contains any modules other than `ZMK`, the script will look for them in
`HOST_MODULES_DIR` and automatically enable them for the build.

## Build steps

### 1. Clone the ZMK repository
Expand Down Expand Up @@ -43,10 +46,10 @@ The build script can be used to install either a "docker" or a "local"
toolchain. If unsure, I recommend using the docker toolchain. Depending on your
installation choice, do **one** of the following:

1. Install Docker or Podman (recommended) and, if using Podman, configure the
1. Install `yq` and `Docker` or `Podman` (recommended). If using Podman, configure the
docker registry. On Debian or Ubuntu, you can do both by running:
```bash
sudo apt-get install podman
sudo apt-get install podman yq
echo 'unqualified-search-registries = ["docker.io"]' > $XDG_CONFIG_HOME/containers/registries.conf
```
2. Install a local
Expand Down
28 changes: 26 additions & 2 deletions scripts/zmk_build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ while [[ $# -gt 0 ]]; do
MULTITHREAD="true"
;;

--no-multithread)
MULTITHREAD="false"
;;

-c | --clear-cache)
CLEAR_CACHE="true"
;;
Expand All @@ -27,6 +31,13 @@ while [[ $# -gt 0 ]]; do
shift
;;

# comma or space separated list of modules (use quotes if space separated)
# if ommitted, will compile list of modules in west.yml
--modules)
MODULES="$2"
shift
;;

-v | --version)
ZEPHYR_VERSION="$2"
shift
Expand Down Expand Up @@ -79,24 +90,36 @@ done
# Set defaults
[[ -z $ZEPHYR_VERSION ]] && ZEPHYR_VERSION="3.5"
[[ -z $RUNWITH_DOCKER ]] && RUNWITH_DOCKER="true"
[[ -z $MULTITHREAD ]] && MULTITHREAD="true"

[[ -z $OUTPUT_DIR ]] && OUTPUT_DIR="$WINHOME/Downloads"
[[ -z $LOG_DIR ]] && LOG_DIR="/tmp"

[[ -z $HOST_ZMK_DIR ]] && HOST_ZMK_DIR="$HOME/zmk"
[[ -z $HOST_MODULES_DIR ]] && HOST_MODULES_DIR="$HOME/zmk-modules"
[[ -z $HOST_CONFIG_DIR ]] && HOST_CONFIG_DIR="$HOME/zmk-config"

[[ -z $DOCKER_ZMK_DIR ]] && DOCKER_ZMK_DIR="/workspace/zmk"
[[ -z $DOCKER_MODULES_DIR ]] && DOCKER_MODULES_DIR="/workspace/zmk-modules"
[[ -z $DOCKER_CONFIG_DIR ]] && DOCKER_CONFIG_DIR="/workspace/zmk-config"

# [[ -z $BOARDS ]] && BOARDS="$(grep '^[[:space:]]*\-[[:space:]]*board:' $HOST_CONFIG_DIR/build.yaml | sed 's/^.*: *//')"
[[ -z $BOARDS ]] && BOARDS="$(yq -r '.include[].board' $HOST_CONFIG_DIR/build.yaml)"
[[ -z $MODULES ]] && MODULES="$(yq -r '.manifest.projects[].name |
select(. != "zmk")' $HOST_CONFIG_DIR/config/west.yml)"

[[ -z $CLEAR_CACHE ]] && CLEAR_CACHE="false"

DOCKER_IMG="zmkfirmware/zmk-dev-arm:$ZEPHYR_VERSION"
DOCKER_BIN="$SUDO podman"

echo "Configured modules: $(MODULES"
MODULES=$(
echo $MODULES |
sed -z 's/[, \n]/;/g' | # use ; as separator
sed -r "s|([^;]*);|${DOCKER_MODULES_DIR}/\1;|g" | # insert modules root path
sed 's/;$/\n/' # remove final ;
)
# +-------------------------+
# | AUTOMATE CONFIG OPTIONS |
# +-------------------------+
Expand Down Expand Up @@ -135,6 +158,7 @@ if [[ $RUNWITH_DOCKER = true ]]; then
DOCKER_CMD="$DOCKER_BIN run --rm \
--mount type=bind,source=$HOST_ZMK_DIR,target=$DOCKER_ZMK_DIR \
--mount type=bind,source=$HOST_CONFIG_DIR,target=$DOCKER_CONFIG_DIR,readonly \
--mount type=bind,source=$HOST_MODULES_DIR,target=$DOCKER_MODULES_DIR,readonly \
--mount type=volume,source=zmk-root-user-$ZEPHYR_VERSION,target=/root \
--mount type=volume,source=zmk-zephyr-$ZEPHYR_VERSION,target=$DOCKER_ZMK_DIR/zephyr \
--mount type=volume,source=zmk-zephyr-modules-$ZEPHYR_VERSION,target=$DOCKER_ZMK_DIR/modules \
Expand Down Expand Up @@ -173,7 +197,7 @@ compile_board() {
[[ $MULTITHREAD = "true" ]] || echo -en "\n$(tput setaf 2)Building $1... $(tput sgr0)"
[[ $MULTITHREAD = "true" ]] && echo -e "$(tput setaf 2)Building $1... $(tput sgr0)"
$DOCKER_PREFIX west build -d "build/$BUILD_DIR" -b $1 $WEST_OPTS \
-- -DZMK_CONFIG="$CONFIG_DIR" -Wno-dev >"$LOGFILE" 2>&1
-- -DZMK_CONFIG="$CONFIG_DIR" -DZMK_EXTRA_MODULES="$MODULES" -Wno-dev >"$LOGFILE" 2>&1
if [[ $? -eq 0 ]]; then
[[ $MULTITHREAD = "true" ]] || echo "$(tput setaf 2)done$(tput sgr0)"
echo "Build log saved to \"$LOGFILE\"."
Expand Down

0 comments on commit a957437

Please sign in to comment.