Files
qbz/scripts/slint-dev.sh
T
vicrodh 395e537b59 fix(build): drop compile-time x86 target-features — runtime AES dispatch
Users on CPUs without AES-NI (Nehalem i7-860, pre-2010 Intel Macs) or
without SSSE3 (AMD Phenom II) crashed at launch with SIGILL. The
global `-C target-feature=+aes,+ssse3` was kept after the #353/#343
x86-64-v3 incident on the belief that the aes crate's cpufeatures
runtime check would protect CPUs without AES-NI — but a compile-time
target feature makes cpufeatures compile its check to a constant, so
the AES-NI intrinsics ran unconditionally (credentials AES-GCM decrypt
at startup), and +ssse3 let LLVM autovectorize anywhere, breaking
Phenom II. Measured on the qbz-cmaf hot path (Ctr128BE<Aes128>
apply_keystream, 256 MB, release): 2145 MB/s compiled-in vs 2162 MB/s
runtime-dispatched, identical output — the flags bought nothing on
capable CPUs. Removed from .cargo/config.toml, all dev/build scripts
and the release/build workflows; old CPUs now get the software AES
fallback instead of a crash.

Fixes #549

cc
2026-07-05 14:17:46 -06:00

25 lines
1.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# QBZ Slint — standard dev build/run.
#
# Builds + runs qbz-slint in RELEASE mode (release runtime performance is
# the whole reason we moved from Tauri to Slint — we always test at release
# perf so a regression never hides behind "it's just dev mode"), but uses
# the nightly rustc PARALLEL FRONTEND (-Z threads) so the serial compile of
# the giant Slint-generated module is split across cores. The produced
# binary is the SAME optimized release binary as `cargo build --release`;
# only compile time improves. We deliberately do NOT use cranelift — it
# would lower runtime performance.
#
# No x86 target-features here or in .cargo/config.toml (#549): the aes crate
# runtime-dispatches to AES-NI at identical speed, and compile-time features
# SIGILL older CPUs.
#
# Usage: ./scripts/slint-dev.sh [extra cargo args]
# THREADS=16 ./scripts/slint-dev.sh # override frontend threads
set -euo pipefail
cd "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/.."
# `mold` (faster linker) + more frontend threads only cut COMPILE time — they
# don't change the optimised binary, so release perf measurements stay valid.
export RUSTFLAGS="-C link-arg=-fuse-ld=mold -Z threads=${THREADS:-16}"
exec cargo +nightly run --release --manifest-path crates/Cargo.toml -p qbz "$@"