mirror of
https://github.com/ApfelTeeSaft/LiveSplitOne.git
synced 2026-08-26 19:23:40 +00:00
We have had a really outdated version of Font Awesome directly vendored into our repository. Not only was it outdated, but it also is shipped as a font file, including all the icons, even though we only use a small subset of them. By switching to Lucide, we not only are depending on something more up to date, but now the icons can also be tree shaked. This also updates some of our CSS to use flex box and grid instead of manually positioning with margins.
91 lines
3.1 KiB
JavaScript
91 lines
3.1 KiB
JavaScript
import { execSync } from "child_process";
|
|
import fs from "fs";
|
|
|
|
let toolchain = "";
|
|
let profile = "debug";
|
|
let cargoFlags = "";
|
|
// Keep .github/workflows/ci.yml in sync with these flags, so wasm-opt works.
|
|
let rustFlags =
|
|
"-C target-feature=+bulk-memory,+mutable-globals,+nontrapping-fptoint,+sign-ext,+simd128,+extended-const,+multivalue,+reference-types,+tail-call";
|
|
let wasmBindgenFlags = "--encode-into always --target web --reference-types";
|
|
let target = "wasm32-unknown-unknown";
|
|
let targetFolder = target;
|
|
|
|
if (process.argv.some((v) => v === "--max-opt")) {
|
|
// Do a fully optimized build ready for deployment.
|
|
profile = "max-opt";
|
|
cargoFlags = "--profile max-opt";
|
|
} else if (process.argv.some((v) => v === "--release")) {
|
|
// Do an optimized build.
|
|
profile = "release";
|
|
cargoFlags = "--release";
|
|
} else {
|
|
// Do a debug build.
|
|
wasmBindgenFlags += " --keep-debug";
|
|
}
|
|
|
|
// Use WASM features that may not be supported by all the browsers.
|
|
if (process.argv.some((v) => v === "--unstable")) {
|
|
// Relaxed SIMD is not supported by Firefox and Safari yet.
|
|
rustFlags += ",+relaxed-simd";
|
|
|
|
// Not supported by any browser yet.
|
|
rustFlags += ",+wide-arithmetic";
|
|
}
|
|
|
|
// Use the nightly toolchain, which enables some more optimizations.
|
|
if (process.argv.some((v) => v === "--nightly")) {
|
|
toolchain = "+nightly";
|
|
cargoFlags +=
|
|
" -Z build-std=std,panic_abort -Z build-std-features=panic_immediate_abort";
|
|
rustFlags += " -Z wasm-c-abi=spec";
|
|
|
|
// FIXME: Apparently the multivalue ABI is broken again.
|
|
// Caused by: https://github.com/rust-lang/rust/pull/135534
|
|
// target = "../wasm32-multivalue.json";
|
|
// targetFolder = "wasm32-multivalue";
|
|
|
|
// Virtual function elimination requires LTO, so we can only do it for
|
|
// max-opt builds.
|
|
if (profile == "max-opt") {
|
|
// Seems like cargo itself calls rustc to check for file name patterns,
|
|
// but it forgets to pass the LTO flag that we specified in the
|
|
// Cargo.toml, so the virtual-function-elimination complains that it's
|
|
// only compatible with LTO, so we have to specify lto here too.
|
|
// FIXME: Seems to be broken at the moment.
|
|
// rustFlags += " -Z virtual-function-elimination -C lto";
|
|
}
|
|
}
|
|
|
|
execSync(`cargo ${toolchain} run`, {
|
|
cwd: "livesplit-core/capi/bind_gen",
|
|
stdio: "inherit",
|
|
});
|
|
|
|
execSync(
|
|
`cargo ${toolchain} rustc -p livesplit-core-capi --crate-type cdylib --features wasm-web,web-rendering --target ${target} ${cargoFlags}`,
|
|
{
|
|
cwd: "livesplit-core",
|
|
stdio: "inherit",
|
|
env: {
|
|
...process.env,
|
|
RUSTFLAGS: rustFlags,
|
|
},
|
|
}
|
|
);
|
|
|
|
execSync(
|
|
`wasm-bindgen ${wasmBindgenFlags} livesplit-core/target/${targetFolder}/${profile}/livesplit_core.wasm --out-dir src/livesplit-core`,
|
|
{
|
|
stdio: "inherit",
|
|
}
|
|
);
|
|
|
|
fs.createReadStream(
|
|
"livesplit-core/capi/bindings/wasm_bindgen/web/index.ts"
|
|
).pipe(fs.createWriteStream("src/livesplit-core/index.ts"));
|
|
|
|
fs.createReadStream(
|
|
"livesplit-core/capi/bindings/wasm_bindgen/web/preload.ts"
|
|
).pipe(fs.createWriteStream("src/livesplit-core/preload.ts"));
|