mirror of
https://github.com/oven-sh/bun
synced 2026-02-02 15:08:46 +00:00
## Summary Add CI steps that verify baseline builds don't use CPU instructions beyond their target. Uses QEMU user-mode emulation with restricted CPU features — any illegal instruction causes SIGILL and fails the build. ## Platforms verified | Build Target | QEMU Command | What it catches | |---|---|---| | `linux-x64-baseline` (glibc) | `qemu-x86_64 -cpu Nehalem` | AVX, AVX2, AVX512 | | `linux-x64-musl-baseline` | `qemu-x86_64 -cpu Nehalem` | AVX, AVX2, AVX512 | | `linux-aarch64` (glibc) | `qemu-aarch64 -cpu cortex-a35` | LSE atomics, SVE, dotprod | | `linux-aarch64-musl` | `qemu-aarch64 -cpu cortex-a35` | LSE atomics, SVE, dotprod | ## How it works Each verify step: 1. Downloads the built binary artifact from the `build-bun` step 2. Installs `qemu-user-static` on-the-fly (dnf/apk/apt-get) 3. Runs two smoke tests under QEMU with restricted CPU features: - `bun --version` — validates startup, linker, static init code - `bun -e eval` — validates JSC initialization and basic execution 4. Hard fails on SIGILL (exit code 132) The verify step runs in the build group after `build-bun`, with a 5-minute timeout. ## Known issue this will surface **mimalloc on aarch64**: Built with `MI_OPT_ARCH=ON` which adds `-march=armv8.1-a`, enabling LSE atomics. This will SIGILL on Cortex-A35/A53 CPUs. The aarch64 verify steps are expected to fail initially, confirming the test catches real issues. Fix can be done separately in `cmake/targets/BuildMimalloc.cmake`.