diff --git a/Cargo.toml b/Cargo.toml index 7c99af2..43b62c2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,6 +18,14 @@ codegen-units = 1 [profile.dev] opt-level = 1 +# desktop builds (tools/build_desktop.py): optimised like release, but compiled on all cores +# (several codegen units, thin LTO); release keeps one unit and full LTO for the smallest, +# fastest WASM +[profile.desktop] +inherits = "release" +lto = "thin" +codegen-units = 16 + # desktop builds: system file dialog (xdg portal on Linux) and sound output [target.'cfg(not(target_arch = "wasm32"))'.dependencies] rfd = { version = "0.17", default-features = false, features = ["xdg-portal"] } diff --git a/tools/build_desktop.py b/tools/build_desktop.py index 19bd957..1e9b529 100644 --- a/tools/build_desktop.py +++ b/tools/build_desktop.py @@ -149,8 +149,8 @@ def build_linux(ver): # libasound is only linked by name: its own glibc references are the user's system's business env["RUSTFLAGS"] = (env.get("RUSTFLAGS", "") + " -C link-arg=-Wl,--allow-shlib-undefined").strip() log(f"Linux build (glibc {GLIBC})") - run([cargo(), "zigbuild", "--release", "--target", f"x86_64-unknown-linux-gnu.{GLIBC}"], env=env) - binary = ROOT / "target" / "x86_64-unknown-linux-gnu" / "release" / "dungeoncraft" + run([cargo(), "zigbuild", "--profile", "desktop", "--target", f"x86_64-unknown-linux-gnu.{GLIBC}"], env=env) + binary = ROOT / "target" / "x86_64-unknown-linux-gnu" / "desktop" / "dungeoncraft" appdir = ROOT / "target" / "AppDir" shutil.rmtree(appdir, ignore_errors=True) @@ -175,9 +175,9 @@ def build_windows(ver): need_target("x86_64-pc-windows-gnu") env = zig_env() log("Windows build") - run([cargo(), "zigbuild", "--release", "--target", "x86_64-pc-windows-gnu"], env=env) + run([cargo(), "zigbuild", "--profile", "desktop", "--target", "x86_64-pc-windows-gnu"], env=env) out = DIST / f"DungeonCraft-{ver}-windows-x64.exe" - shutil.copy2(ROOT / "target" / "x86_64-pc-windows-gnu" / "release" / "dungeoncraft.exe", out) + shutil.copy2(ROOT / "target" / "x86_64-pc-windows-gnu" / "desktop" / "dungeoncraft.exe", out) return out @@ -193,13 +193,13 @@ def build_macos(ver): env["MACOSX_DEPLOYMENT_TARGET"] = "11.0" for t in arches: log(f"macOS build {t}") - run([cargo(), "build", "--release", "--target", t], env=env) + run([cargo(), "build", "--profile", "desktop", "--target", t], env=env) app = ROOT / "target" / "DungeonCraft.app" shutil.rmtree(app, ignore_errors=True) (app / "Contents" / "MacOS").mkdir(parents=True) (app / "Contents" / "Resources").mkdir(parents=True) - run(["lipo", "-create", "-output", app / "Contents" / "MacOS" / "DungeonCraft"] + [ROOT / "target" / t / "release" / "dungeoncraft" for t in arches]) + run(["lipo", "-create", "-output", app / "Contents" / "MacOS" / "DungeonCraft"] + [ROOT / "target" / t / "desktop" / "dungeoncraft" for t in arches]) short = ver.lstrip("v").replace("-", ".") (app / "Contents" / "Info.plist").write_text(INFO_PLIST.format(short=short, version=ver), encoding="utf-8")