diff --git a/.github/workflows/pr-code-checks.yml b/.github/workflows/pr-code-checks.yml index f156028..ba7d272 100644 --- a/.github/workflows/pr-code-checks.yml +++ b/.github/workflows/pr-code-checks.yml @@ -9,12 +9,14 @@ jobs: contents: read steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 name: checkout code - uses: oven-sh/setup-bun@v2 name: setup bun - name: install quilt run: brew install quilt + - name: install zig + run: brew install zig - uses: nttld/setup-ndk@v1.6.0 id: setup-ndk with: diff --git a/.github/workflows/publish-npm.yml b/.github/workflows/publish-npm.yml index f9a6846..ba8ce46 100644 --- a/.github/workflows/publish-npm.yml +++ b/.github/workflows/publish-npm.yml @@ -20,7 +20,7 @@ jobs: with: app-id: ${{ secrets.GHA_CICD_APPID }} private-key: ${{ secrets.GHA_CICD_PKEY }} - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 name: checkout code with: token: ${{ steps.app-token.outputs.token }} @@ -36,6 +36,8 @@ jobs: run: npm i -g npm@^11.14 - name: install quilt run: brew install quilt + - name: install zig + run: brew install zig - uses: nttld/setup-ndk@v1.6.0 id: setup-ndk with: diff --git a/package.json b/package.json index f6967f2..7b3cc0f 100644 --- a/package.json +++ b/package.json @@ -21,15 +21,22 @@ ], "scripts": { "clean": "rm -rf prebuilds build", - "build": "bun run build:ios-arm64 && bun run build:android && bun run mobile:copy-prebuilds", + "build": "bun run build:ios-arm64 && bun run build:android && bun run build:linux-arm64 && bun run build:linux-x64 && bun run build:darwin-arm64 && bun run mobile:copy-prebuilds", "build:ios-arm64": "bare-make generate --platform ios --arch arm64 --build build/ios-arm64 --define CMAKE_POLICY_VERSION_MINIMUM=3.5 && sh patch-wasm3.sh && bare-make build --build build/ios-arm64 && bare-make install --build build/ios-arm64", "build:ios-arm64-simulator": "bare-make generate --platform ios --arch arm64 --simulator --build build/ios-arm64-simulator --define CMAKE_POLICY_VERSION_MINIMUM=3.5 && sh patch-wasm3.sh && bare-make build --build build/ios-arm64-simulator && bare-make install --build build/ios-arm64-simulator", "build:android": "bun run build:android-arm64", "build:android-arm64": "bare-make generate --define CMAKE_POLICY_VERSION_MINIMUM=3.5 --platform android --arch arm64 --build build/android-arm64 && sh patch-wasm3.sh && bare-make build --build build/android-arm64 && bare-make install --build build/android-arm64", + "build:linux-arm64": "ZIG_TARGET=aarch64-linux-gnu sh -c 'bare-make generate --define CMAKE_POLICY_VERSION_MINIMUM=3.5 --define clang=$(pwd)/scripts/zig-cc --define clang++=$(pwd)/scripts/zig-c++ --platform linux --arch arm64 --build build/linux-arm64 && sh patch-wasm3.sh && bare-make build --build build/linux-arm64 && bare-make install --build build/linux-arm64'", + "build:linux-x64": "ZIG_TARGET=x86_64-linux-gnu sh -c 'bare-make generate --define CMAKE_POLICY_VERSION_MINIMUM=3.5 --define clang=$(pwd)/scripts/zig-cc --define clang++=$(pwd)/scripts/zig-c++ --platform linux --arch x64 --build build/linux-x64 && sh patch-wasm3.sh && bare-make build --build build/linux-x64 && bare-make install --build build/linux-x64'", + "build:darwin-arm64": "ZIG_TARGET=aarch64-macos sh -c 'bare-make generate --define CMAKE_POLICY_VERSION_MINIMUM=3.5 --define clang=$(pwd)/scripts/zig-cc --define clang++=$(pwd)/scripts/zig-c++ --platform darwin --arch arm64 --build build/darwin-arm64 && sh patch-wasm3.sh && bare-make build --build build/darwin-arm64 && bare-make install --build build/darwin-arm64'", "mobile:copy-prebuilds": "cp -r prebuilds/android-arm64 prebuilds/android-arm || echo 'android-arm prebuilds already present' && cp -r prebuilds/android-arm64 prebuilds/android-ia32 || echo 'android-ia32 prebuilds already present' && cp -r prebuilds/android-arm64 prebuilds/android-x64 || echo 'android-x64 prebuilds already present' && cp -r prebuilds/ios-arm64 prebuilds/ios-arm64-simulator || echo 'ios-arm64-simulator prebuilds already present' && cp -r prebuilds/ios-arm64 prebuilds/ios-x64-simulator || echo 'ios-x64-simulator prebuilds already present'", - "dev:build": "bun run dev:build:ios-arm64 && bun run dev:build:android-arm64 && bun run mobile:copy-prebuilds", + "dev:build": "bun run dev:build:ios-arm64 && bun run dev:build:android && bun run dev:build:linux-arm64 && bun run dev:build:linux-x64 && bun run dev:build:darwin-arm64 && bun run mobile:copy-prebuilds", "dev:build:ios-arm64": "bare-make generate --platform ios --arch arm64 --build build/ios-arm64 --define CMAKE_POLICY_VERSION_MINIMUM=3.5 --define CMAKE_C_FLAGS=-DBW3_DBG_ENABLED=1 && sh patch-wasm3.sh && bare-make build --build build/ios-arm64 && bare-make install --build build/ios-arm64", + "dev:build:android": "bun run dev:build:android-arm64", "dev:build:android-arm64": "bare-make generate --define CMAKE_POLICY_VERSION_MINIMUM=3.5 --define CMAKE_C_FLAGS=-DBW3_DBG_ENABLED=1 --platform android --arch arm64 --build build/android-arm64 && sh patch-wasm3.sh && bare-make build --build build/android-arm64 && bare-make install --build build/android-arm64", + "dev:build:linux-arm64": "ZIG_TARGET=aarch64-linux-gnu sh -c 'bare-make generate --define CMAKE_POLICY_VERSION_MINIMUM=3.5 --define CMAKE_C_FLAGS=-DBW3_DBG_ENABLED=1 --define clang=$(pwd)/scripts/zig-cc --define clang++=$(pwd)/scripts/zig-c++ --platform linux --arch arm64 --build build/linux-arm64 && sh patch-wasm3.sh && bare-make build --build build/linux-arm64 && bare-make install --build build/linux-arm64'", + "dev:build:linux-x64": "ZIG_TARGET=x86_64-linux-gnu sh -c 'bare-make generate --define CMAKE_POLICY_VERSION_MINIMUM=3.5 --define CMAKE_C_FLAGS=-DBW3_DBG_ENABLED=1 --define clang=$(pwd)/scripts/zig-cc --define clang++=$(pwd)/scripts/zig-c++ --platform linux --arch x64 --build build/linux-x64 && sh patch-wasm3.sh && bare-make build --build build/linux-x64 && bare-make install --build build/linux-x64'", + "dev:build:darwin-arm64": "ZIG_TARGET=aarch64-macos sh -c 'bare-make generate --define CMAKE_POLICY_VERSION_MINIMUM=3.5 --define CMAKE_C_FLAGS=-DBW3_DBG_ENABLED=1 --define clang=$(pwd)/scripts/zig-cc --define clang++=$(pwd)/scripts/zig-c++ --platform darwin --arch arm64 --build build/darwin-arm64 && sh patch-wasm3.sh && bare-make build --build build/darwin-arm64 && bare-make install --build build/darwin-arm64'", "dev:link": "bun node_modules/react-native-bare-kit/ios/link.mjs" }, "devDependencies": { diff --git a/patch-wasm3.sh b/patch-wasm3.sh index 7bba205..e4961ca 100644 --- a/patch-wasm3.sh +++ b/patch-wasm3.sh @@ -7,7 +7,8 @@ set -e BASE="$(cd "$(dirname "$0")" && pwd)" -for build_dir in "build/ios-arm64" "build/ios-arm64-simulator" "build/android-arm64"; do +for build_dir in build/*/; do + build_dir="${build_dir%/}" src="$BASE/$build_dir/_deps/github+wasm3+wasm3-src/source" if [ ! -d "$src" ]; then echo " [patch] skipping $build_dir (not yet generated)" diff --git a/scripts/zig-c++ b/scripts/zig-c++ new file mode 100755 index 0000000..4a670a0 --- /dev/null +++ b/scripts/zig-c++ @@ -0,0 +1,28 @@ +#!/bin/bash +# zig c++ cross-compiler wrapper. Set ZIG_TARGET before invoking cmake. +# - Strips --target=... (CMake injects the toolchain target; ZIG_TARGET overrides it) +# - Filters -Xlinker --dependency-file=... which zig's lld doesn't support. +args=() +i=0 +argv=("$@") +while [ $i -lt ${#argv[@]} ]; do + arg="${argv[$i]}" + case "$arg" in + --target=*) + i=$((i+1)) + continue + ;; + esac + if [ "$arg" = "-Xlinker" ] && [ $((i+1)) -lt ${#argv[@]} ]; then + next="${argv[$((i+1))]}" + case "$next" in + --dependency-file=*) + i=$((i+2)) + continue + ;; + esac + fi + args+=("$arg") + i=$((i+1)) +done +exec zig c++ -target "$ZIG_TARGET" "${args[@]}" diff --git a/scripts/zig-cc b/scripts/zig-cc new file mode 100755 index 0000000..e949548 --- /dev/null +++ b/scripts/zig-cc @@ -0,0 +1,28 @@ +#!/bin/bash +# zig cc cross-compiler wrapper. Set ZIG_TARGET before invoking cmake. +# - Strips --target=... (CMake injects the toolchain target; ZIG_TARGET overrides it) +# - Filters -Xlinker --dependency-file=... which zig's lld doesn't support. +args=() +i=0 +argv=("$@") +while [ $i -lt ${#argv[@]} ]; do + arg="${argv[$i]}" + case "$arg" in + --target=*) + i=$((i+1)) + continue + ;; + esac + if [ "$arg" = "-Xlinker" ] && [ $((i+1)) -lt ${#argv[@]} ]; then + next="${argv[$((i+1))]}" + case "$next" in + --dependency-file=*) + i=$((i+2)) + continue + ;; + esac + fi + args+=("$arg") + i=$((i+1)) +done +exec zig cc -target "$ZIG_TARGET" "${args[@]}"