Slint cannot split the .slint compilation across crates, but a Slint LIBRARY crate exposes its generated Rust types to dependent crates (verified with a minimal proof). So: - NEW crate `qbz-ui` (lib): owns the whole .slint tree + build.rs + bundled translations; `slint::include_modules!()` + the generated types (AppWindow, MiniPlayerWindow, all globals/structs) are re-exported. Translation domain is now `qbz-ui` (the .po files renamed accordingly). - `qbz-slint` (bin) -> renamed to `qbz` (package + `[[bin]] name = "qbz"`), reclaiming the binary name from the retired Tauri app. It depends on `qbz-ui` and does `pub use qbz_ui::*;` so existing `crate::AppWindow` / `crate::*State` references resolve unchanged. This splits the single ~20 GB rustc into two crates (UI/codegen vs the 75k LOC of logic) — the foundation for lower build peak, incremental caching, and the upcoming per-feature crate extraction. Also fixed for the move: qbz-i18n bundled-.po include paths, the font/WGSL `include_bytes!`/`include_str!` paths (-> ../../qbz-ui/ui/), workspace members, dev scripts (`-p qbz`), and the CI workflows. `cargo check -p qbz` is green. cc
26 lines
1.4 KiB
Bash
Executable File
26 lines
1.4 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.
|
|
#
|
|
# RUSTFLAGS must re-list the AES-NI/SSSE3 features from .cargo/config.toml,
|
|
# because setting RUSTFLAGS *overrides* (does not merge) the config's
|
|
# [target.'cfg(target_arch = "x86_64")'] rustflags. Keep these in sync with
|
|
# .cargo/config.toml (the AES-NI path keeps offline CMAF decrypt fast).
|
|
#
|
|
# 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 target-feature=+aes,+ssse3 -C link-arg=-fuse-ld=mold -Z threads=${THREADS:-16}"
|
|
exec cargo +nightly run --release --manifest-path crates/Cargo.toml -p qbz "$@"
|