diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index a20fa3f9..727c4e92 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -106,11 +106,20 @@ jobs: architecture: ${{ matrix.node_arch }} cache: "pnpm" - - name: Install Mac-OS Dependencies - if: contains(matrix.os, 'macos') + - name: Install Mac-OS x86_64 Dependencies + if: ${{ contains(matrix.os, 'macos') && matrix.ARCH == 'x86_64' }} run: | brew install libsodium gnutls + - name: Install Mac-OS arm64 Dependencies + if: ${{ contains(matrix.os, 'macos') && matrix.ARCH == 'arm64' }} + run: | + brew uninstall libsodium --force --ignore-dependencies + source ./script/macos-arm-deps.sh + echo "PATH=$PATH" >> $GITHUB_ENV + echo "PKG_CONFIG_PATH=$PKG_CONFIG_PATH" >> $GITHUB_ENV + echo "npm_config_target_arch=$npm_config_target_arch" >> $GITHUB_ENV + - name: Install Dependencies and Build if: ${{ !matrix.docker }} run: pnpm install diff --git a/script/macos-arm-deps.sh b/script/macos-arm-deps.sh new file mode 100755 index 00000000..a62758e5 --- /dev/null +++ b/script/macos-arm-deps.sh @@ -0,0 +1,47 @@ +#!/bin/sh +set -e + +#! Install arm-brew on x86 MacOS Arm +#! Based on https://github.com/Homebrew/discussions/discussions/2843#discussioncomment-2243610 + +bottle_tag="arm64_big_sur" # Macos 11 is big sure +dependencies="libsodium" + +mkdir -p ~/arm-target/bin +mkdir -p ~/arm-target/brew-cache +export PATH="$HOME/arm-target/bin:$PATH" + +# Download Homebrew under ~/arm-target +PREV_PWD="$PWD" +cd ~/arm-target +mkdir -p arm-homebrew +curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C arm-homebrew +cd "$PREV_PWD" + +# Add arm-brew binary +ln -sf ~/arm-target/arm-homebrew/bin/brew ~/arm-target/bin/arm-brew + +# Homebrew env variables +export HOMEBREW_CACHE=~/arm-target/brew-cache +export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 + +# Install the given dependencies for the given bottle_tag +arm-brew fetch --deps --bottle-tag=$bottle_tag $dependencies | + grep -E "(Downloaded to:|Already downloaded:)" | + grep -E ".tar.gz" | + grep -v pkg-config | + awk '{ print $3 }' | + xargs -n 1 arm-brew install --force-bottle || true + +# Install host version of pkg-config so we can call it in the build system +arm-brew install pkg-config || true + +# Add the installed binaries/libraries to the path +export PATH="$HOME/arm-target/bin/:$PATH" +export PATH="$HOME/arm-target/lib/:$PATH" + +# libsodium +SODIUM_PATH=$(~/arm-target/bin/pkg-config libsodium --libs-only-L | sed -e 's/-L//g') # print only -L and replace "-L" itself +export PATH="$SODIUM_PATH:$PATH" +export PKG_CONFIG_PATH="$SODIUM_PATH:$PKG_CONFIG_PATH" +export npm_config_target_arch=arm64