@@ -34,30 +34,73 @@ jobs:
3434 - name : End-to-end replay (x86, native)
3535 run : KASLD_NATIVE=1 tests/replay tests/fixtures/x86_64/* tests/fixtures/x86_32/*
3636
37+ # Compile-gate every arch we release, on push/PR. Same musl toolchains
38+ # release.yml ships (musl.cc blocks GitHub Actions), minus packaging — so a
39+ # per-arch toolchain or arch-gated-code break is caught here, not at release.
3740 cross-compile :
3841 runs-on : ubuntu-latest
42+ # Pinned for deterministic PR builds + a stable per-arch toolchain cache;
43+ # bump periodically. release.yml tracks the latest cross-tools release.
44+ env :
45+ MUSL_CROSS_VERSION : ' 20260515'
46+ strategy :
47+ fail-fast : false
48+ matrix :
49+ # KEEP IN SYNC with release.yml's build-release matrix. armeb (big-endian
50+ # ARM) is omitted in both — cross-tools/musl-cross ships no armeb
51+ # toolchain. (The float/baseline variants compile identically to their
52+ # base arch, but are built here too so every shipped toolchain is gated.)
53+ include :
54+ - { arch: x86_64, musl_triple: x86_64-unknown-linux-musl }
55+ - { arch: i686, musl_triple: i686-unknown-linux-musl }
56+ - { arch: i586, musl_triple: i586-unknown-linux-musl }
57+ - { arch: aarch64, musl_triple: aarch64-unknown-linux-musl }
58+ - { arch: arm, musl_triple: arm-unknown-linux-musleabi }
59+ - { arch: armhf, musl_triple: arm-unknown-linux-musleabihf }
60+ - { arch: armv7, musl_triple: armv7-unknown-linux-musleabi }
61+ - { arch: armv7l, musl_triple: armv7-unknown-linux-musleabihf }
62+ - { arch: mips, musl_triple: mips-unknown-linux-musl }
63+ - { arch: mipssf, musl_triple: mips-unknown-linux-muslsf }
64+ - { arch: mipsel, musl_triple: mipsel-unknown-linux-musl }
65+ - { arch: mipselsf, musl_triple: mipsel-unknown-linux-muslsf }
66+ - { arch: mips64, musl_triple: mips64-unknown-linux-musl }
67+ - { arch: mips64el, musl_triple: mips64el-unknown-linux-musl }
68+ - { arch: powerpc, musl_triple: powerpc-unknown-linux-musl }
69+ - { arch: powerpcle, musl_triple: powerpcle-unknown-linux-musl }
70+ - { arch: powerpc64, musl_triple: powerpc64-unknown-linux-musl }
71+ - { arch: powerpc64le, musl_triple: powerpc64le-unknown-linux-musl }
72+ - { arch: riscv32, musl_triple: riscv32-unknown-linux-musl }
73+ - { arch: riscv64, musl_triple: riscv64-unknown-linux-musl }
74+ - { arch: s390x, musl_triple: s390x-ibm-linux-musl }
75+ - { arch: loongarch64, musl_triple: loongarch64-unknown-linux-musl }
3976 steps :
4077 - uses : actions/checkout@v6
4178
42- - name : Install cross-compilers
79+ - name : Cache toolchain
80+ uses : actions/cache@v4
81+ with :
82+ path : ~/musl-cross/${{ matrix.musl_triple }}
83+ key : musl-${{ matrix.musl_triple }}-${{ env.MUSL_CROSS_VERSION }}
84+
85+ - name : Fetch toolchain + add to PATH
86+ run : |
87+ set -euo pipefail
88+ t="${{ matrix.musl_triple }}"
89+ root="$HOME/musl-cross"; mkdir -p "$root"
90+ if [ ! -d "$root/$t" ]; then
91+ base="https://github.com/cross-tools/musl-cross/releases/download/${MUSL_CROSS_VERSION}"
92+ dl() { curl -fsSL --retry 5 --retry-delay 5 --retry-all-errors "$1" -o "$2"; }
93+ dl "${base}/${t}.tar.xz" "/tmp/${t}.tar.xz"
94+ dl "${base}/${t}.tar.xz.sha256" "/tmp/${t}.sha256"
95+ echo "$(cut -d' ' -f1 "/tmp/${t}.sha256") /tmp/${t}.tar.xz" | sha256sum -c -
96+ tar -xJf "/tmp/${t}.tar.xz" -C "$root"
97+ fi
98+ echo "$root/$t/bin" >> "$GITHUB_PATH"
99+
100+ - name : Compile
101+ run : make build CC=${{ matrix.musl_triple }}-gcc
102+
103+ - name : Verify static linkage
43104 run : |
44- sudo apt-get update
45- sudo apt-get install -y \
46- gcc-aarch64-linux-gnu \
47- gcc-arm-linux-gnueabi \
48- gcc-arm-linux-gnueabihf \
49- gcc-i686-linux-gnu \
50- gcc-mips-linux-gnu \
51- gcc-mipsel-linux-gnu \
52- gcc-mips64-linux-gnuabi64 \
53- gcc-mips64el-linux-gnuabi64 \
54- gcc-powerpc-linux-gnu \
55- gcc-powerpc64-linux-gnu \
56- gcc-powerpc64le-linux-gnu \
57- gcc-riscv64-linux-gnu \
58- gcc-s390x-linux-gnu
59- # TODO: loongarch64 — no gcc-loongarch64-linux-gnu package in Ubuntu.
60- # TODO: armeb — no big-endian ARM package in Ubuntu.
61-
62- - name : Cross-compile all targets
63- run : make cross
105+ d="build/$(${{ matrix.musl_triple }}-gcc -dumpmachine)"
106+ file "$d/kasld" | grep -q "statically linked"
0 commit comments