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
25 lines
1.3 KiB
Bash
Executable File
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 "$@"
|