From d933cf31e070bc86529849d37d219801496bd9fd Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Fri, 23 Oct 2026 06:15:53 +0000 Subject: [PATCH] Build Windows ARM64 on windows-11-arm Build libsodium 1.0.22 for all targets --- .github/workflows/build.yml | 32 ++++++++--------- build-libsodium.sh | 68 +++++++++++++++++++++++++++++++++++++ build-windows-aarch64.sh | 34 ------------------- zig-requirements.txt | 22 ------------ 4 files changed, 83 insertions(+), 73 deletions(-) create mode 100755 build-libsodium.sh delete mode 100755 build-windows-aarch64.sh delete mode 100644 zig-requirements.txt diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c93344f..1e84a5c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -58,6 +58,13 @@ jobs: - name: Put NDK toolchain on PATH run: echo "$ANDROID_HOME/ndk/21.3.6528147/toolchains/llvm/prebuilt/linux-x86_64/bin" >> $GITHUB_PATH + - name: Build libsodium + env: + CC: ${{ matrix.cc }} + run: | + dir=$(./build-libsodium.sh ${{ matrix.target }}) + echo "SODIUM_LIB_DIR=$dir" >> $GITHUB_ENV + - name: Build env: CC: ${{ matrix.cc }} @@ -114,11 +121,10 @@ jobs: subdir: windows-x86_64 target: x86_64-pc-windows-msvc libfile: etebase_jni.dll - - runner: ubuntu-24.04 + - runner: windows-11-arm subdir: windows-aarch64 - target: aarch64-pc-windows-gnullvm + target: aarch64-pc-windows-msvc libfile: etebase_jni.dll - zig: true steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 @@ -129,23 +135,15 @@ jobs: rustflags: "" cache: ${{ !startsWith(github.ref, 'refs/tags/') }} - - name: Build - if: ${{ !matrix.zig }} + - name: Build libsodium shell: bash - run: cargo build --locked --target ${{ matrix.target }} --release --no-default-features --features jvm - - - name: Install cargo-zigbuild - if: matrix.zig run: | - python3 -m venv "$RUNNER_TEMP/zig" - "$RUNNER_TEMP/zig/bin/pip" install --require-hashes -r zig-requirements.txt - echo "$RUNNER_TEMP/zig/bin" >> $GITHUB_PATH + dir=$(./build-libsodium.sh ${{ matrix.target }}) + echo "SODIUM_LIB_DIR=$dir" >> $GITHUB_ENV - - name: Build (zig) - if: matrix.zig - env: - ZIG: python3 -m ziglang - run: ./build-windows-aarch64.sh + - name: Build + shell: bash + run: cargo build --locked --target ${{ matrix.target }} --release --no-default-features --features jvm - name: Upload native lib uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 diff --git a/build-libsodium.sh b/build-libsodium.sh new file mode 100755 index 0000000..8a50f48 --- /dev/null +++ b/build-libsodium.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash + +set -euo pipefail + +VERSION=1.0.22 +URL=https://github.com/jedisct1/libsodium/releases/download/$VERSION-RELEASE +TARBALL_SHA256=adbdd8f16149e81ac6078a03aca6fc03b592b89ef7b5ed83841c086191be3349 +MSVC_SHA256=3e03a726fac4bc09cb61d8f29d658ef7a5eca0811de59082130414f7ca2e4279 + +target=$1 +exec 3>&1 1>&2 +cd "$(dirname "$0")" +out="$(pwd)/target/$target/libsodium" +work=$(mktemp -d) +trap 'rm -rf "$work"' EXIT +rm -rf "$out" +mkdir -p "$out" + +verify() { + if command -v shasum >/dev/null; then + actual=$(shasum -a 256 "$2") + else + actual=$(sha256sum "$2") + fi + actual=${actual%% *} + if [ "$actual" != "$1" ]; then + echo "$2: expected sha256 $1, got $actual" >&2 + exit 1 + fi +} + +case $target in + *-pc-windows-msvc) + case $target in + x86_64-*) arch=x64 ;; + aarch64-*) arch=ARM64 ;; + *) echo "unsupported target $target" >&2; exit 1 ;; + esac + curl -fsSL --retry 5 --retry-all-errors -o "$work/libsodium.zip" "$URL/libsodium-$VERSION-msvc.zip" + verify $MSVC_SHA256 "$work/libsodium.zip" + lib="libsodium/$arch/Release/v143/static/libsodium.lib" + (cd "$work" && "$(cygpath "$SYSTEMROOT")/System32/tar.exe" -xf libsodium.zip "$lib") + cp "$work/$lib" "$out/" + out=$(cygpath -m "$out") + ;; + *) + curl -fsSL --retry 5 --retry-all-errors -o "$work/libsodium.tar.gz" "$URL/libsodium-$VERSION.tar.gz" + verify $TARBALL_SHA256 "$work/libsodium.tar.gz" + tar -xzf "$work/libsodium.tar.gz" -C "$work" + case $target in + *-apple-darwin) + arch=${target%%-*} + export CC="clang -arch ${arch/aarch64/arm64} -mmacosx-version-min=$(rustc --print deployment-target --target "$target" | cut -d= -f2)" + ;; + esac + cd "$work/libsodium-$VERSION" + ./configure --host="$target" --prefix="$work/install" --disable-shared --with-pic --disable-dependency-tracking + jobs=$(getconf _NPROCESSORS_ONLN) + make -j"$jobs" + if [ "$target" = "$(rustc -vV | sed -n 's/^host: //p')" ]; then + make -j"$jobs" check + fi + make install + cp "$work/install/lib/libsodium.a" "$out/" + ;; +esac + +echo "$out" >&3 diff --git a/build-windows-aarch64.sh b/build-windows-aarch64.sh deleted file mode 100755 index 2b48cf2..0000000 --- a/build-windows-aarch64.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -LIBSODIUM_VERSION=1.0.22 -LIBSODIUM_URL=https://github.com/jedisct1/libsodium/releases/download/$LIBSODIUM_VERSION-RELEASE/libsodium-$LIBSODIUM_VERSION.tar.gz -LIBSODIUM_SHA256=adbdd8f16149e81ac6078a03aca6fc03b592b89ef7b5ed83841c086191be3349 - -TARGET=aarch64-pc-windows-gnullvm -ZIG_TARGET=aarch64-windows-gnu - -cd "$(dirname "$0")" -root=$(pwd) -zig=(${ZIG:-zig}) -work=$(mktemp -d) -trap 'rm -rf "$work"' EXIT - -curl -fsSL --retry 5 --retry-all-errors -o "$work/libsodium.tar.gz" "$LIBSODIUM_URL" -echo "$LIBSODIUM_SHA256 $work/libsodium.tar.gz" | sha256sum -c -tar -xzf "$work/libsodium.tar.gz" -C "$work" - -sodium="$root/target/$TARGET/libsodium" -rm -rf "$sodium" -( - cd "$work/libsodium-$LIBSODIUM_VERSION" - "${zig[@]}" build -Dtarget=$ZIG_TARGET -Doptimize=ReleaseFast -Dshared=false -Dtest=false --prefix "$sodium" -) -cp "$sodium/lib/libsodium-static.lib" "$sodium/lib/libsodium.a" - -SODIUM_LIB_DIR="$sodium/lib" cargo zigbuild --locked --target $TARGET --release --no-default-features --features jvm - -lib="target/$TARGET/release/etebase_jni.dll" -file "$lib" | grep -q "PE32+ executable (DLL).*Aarch64" || { file "$lib" >&2; echo "expected an ARM64 DLL" >&2; exit 1; } -echo "$root/$lib" diff --git a/zig-requirements.txt b/zig-requirements.txt deleted file mode 100644 index 60f58b1..0000000 --- a/zig-requirements.txt +++ /dev/null @@ -1,22 +0,0 @@ -cargo-zigbuild==0.24.0 \ - --hash=sha256:0c69bacf1db29919d080a9a0db5a4b574e5ef7ff0808e8257d9905d11f347a76 \ - --hash=sha256:1a2b3b904af7181ac6ac3a96eb11c0c25f3e1a903f76f0b9c796e7b9a8af11f7 \ - --hash=sha256:2f672c4ec64a80b6ad43f3c6630d1ba1ce3df250eda69382ac73e4d95720739d \ - --hash=sha256:484412e39e4c6039474535ce97ee75a22bab22d58233056f8ec8a8f9034bb957 \ - --hash=sha256:59b64614fdac7a85337560f85a90dd5fb6278c9a7c3522c875c738e2d507cd10 \ - --hash=sha256:6942e4320f7b05d8fb29e0a8ce5670bcbb3d254275100b85b5b7c86552f9a744 \ - --hash=sha256:b576e8b95ff199eedee0e57afcdbaff7579744916261483280d350b9a35711fd \ - --hash=sha256:e6d4cbeac06a566b54400f5336e383980630f9380636414ae0951c96dd3b95c7 -ziglang==0.16.0 \ - --hash=sha256:089a16a4eb5a2f45151993342f8fabad24ff1a0723dc146642895c29208a3939 \ - --hash=sha256:0fd671c599f6961638cc302cf1f9461486696385311d4c0276171dcf7d2b67f5 \ - --hash=sha256:18e14f6b25678d7b7c65708c82501ee6090fe39ed5c783477d56267af1fa5629 \ - --hash=sha256:7249779f0f916cfd2d1a9d54eb7600f3901384dc8dcbe1eea226bd32a8237fb5 \ - --hash=sha256:8b83661247430aa335b3cbc29569084900412dde5633b02c80a6d2ff734de3d2 \ - --hash=sha256:9fcda73f62b851dd72a54b710ad40a209896db14cfb13649e62191243556342b \ - --hash=sha256:b61e5413c49508d9d62e5dcea543e3af491594154d74a00ff52f84ed508260cc \ - --hash=sha256:d4bd8197344fffe276e1d6446e4ef7bc38637d821b4685fe96a936503d4b0619 \ - --hash=sha256:df0e6599e41d087c912b0d3d7cedef6c9cb1f0032465c8fc820e9986772d11e4 \ - --hash=sha256:e27d409812b11e0fb89ed0200cf2e55b6464d43f9461553104e4a4f9a94a1fd5 \ - --hash=sha256:e44a5271f7b72f7980017bb615823ed52e765f96b6482d93a2fd338cd53101bf \ - --hash=sha256:f978c12b5337cf418034964de00023b7ec5ec484383dc97c6a6585f4a9105840