1212jobs :
1313 build :
1414 name : Build ${{ matrix.target }}
15- runs-on : ${{ matrix.os }}
15+ runs-on : ${{ matrix.runner || matrix. os }}
1616 strategy :
1717 fail-fast : false
1818 matrix :
@@ -29,11 +29,12 @@ jobs:
2929 target : x86_64-apple-darwin
3030 - os : macos-14
3131 target : aarch64-apple-darwin
32- # Windows
32+ # Windows (aarch64 使用 windows-11-arm runner,os 名称仍为 windows-latest)
3333 - os : windows-latest
3434 target : x86_64-pc-windows-msvc
3535 - os : windows-latest
3636 target : aarch64-pc-windows-msvc
37+ runner : windows-11-arm
3738
3839 steps :
3940 - name : Checkout
@@ -55,19 +56,25 @@ jobs:
5556 if : matrix.os == 'ubuntu-latest' && matrix.target == 'aarch64-unknown-linux-gnu'
5657 run : |
5758 sudo apt-get update
58- sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-dev-arm64-cross
59+ sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-dev-arm64-cross binutils-aarch64-linux-gnu
5960
6061 - name : Set env for Linux aarch64 cross (glibc)
6162 if : matrix.os == 'ubuntu-latest' && matrix.target == 'aarch64-unknown-linux-gnu'
6263 run : |
6364 echo "CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
6465 echo "CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++" >> $GITHUB_ENV
6566 echo "AR_aarch64_unknown_linux_gnu=aarch64-linux-gnu-ar" >> $GITHUB_ENV
67+ echo "RANLIB_aarch64_unknown_linux_gnu=aarch64-linux-gnu-ranlib" >> $GITHUB_ENV
68+ echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
6669
6770 - name : Install musl (Linux static, x86_64 only)
6871 if : matrix.os == 'ubuntu-latest' && matrix.target == 'x86_64-unknown-linux-musl'
6972 run : sudo apt-get update && sudo apt-get install -y musl-tools
7073
74+ - name : Set env for musl (x86_64)
75+ if : matrix.os == 'ubuntu-latest' && matrix.target == 'x86_64-unknown-linux-musl'
76+ run : echo "CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER=musl-gcc" >> $GITHUB_ENV
77+
7178 - name : Build
7279 run : cargo build --release --target ${{ matrix.target }} --verbose
7380
@@ -79,12 +86,20 @@ jobs:
7986 else
8087 exe="target/${{ matrix.target }}/release/${{ env.BINARY_NAME }}"
8188 fi
82- if [ -f "$exe" ]; then
83- "$exe" --version
84- else
89+ if [ ! -f "$exe" ]; then
8590 echo "Binary not found: $exe"
8691 exit 1
8792 fi
93+ # Only run binary on native target (cross-compiled binaries cannot run on host)
94+ if [ "${{ matrix.os }}" = "ubuntu-latest" ] && [ "${{ matrix.target }}" = "x86_64-unknown-linux-gnu" ]; then
95+ "$exe" --version
96+ elif [ "${{ matrix.os }}" = "windows-latest" ] && { [ "${{ matrix.target }}" = "x86_64-pc-windows-msvc" ] || [ "${{ matrix.target }}" = "aarch64-pc-windows-msvc" ]; }; then
97+ "$exe" --version
98+ elif [ "${{ matrix.os }}" = "macos-14" ] && [ "${{ matrix.target }}" = "aarch64-apple-darwin" ]; then
99+ "$exe" --version
100+ else
101+ echo "Skipping execution (cross-compiled target)."
102+ fi
88103
89104 - name : Package
90105 shell : bash
0 commit comments