From 81884fbe86f49715d7506122f995751de0383b2d Mon Sep 17 00:00:00 2001 From: Rob Parrett Date: Sun, 5 Jan 2025 08:50:34 -0800 Subject: [PATCH] Add `wasm-opt` and optimized distribution profiles (#6) * Add wasm-opt and optimized distribution profiles * Update cargo make makefile --- .github/workflows/release.yaml | 14 ++++++++++---- Cargo.toml | 16 ++++++++++++++++ Makefile.toml | 33 ++++++++++++++++++++++++++------- 3 files changed, 52 insertions(+), 11 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index a291efc..8299a0a 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -29,13 +29,19 @@ jobs: - name: Build run: | - cargo build --release --target wasm32-unknown-unknown + cargo build --profile web-dist --target wasm32-unknown-unknown - name: Prepare package run: | wasm-bindgen --no-typescript --out-name bevy_game --out-dir wasm --target web target/wasm32-unknown-unknown/release/${{ env.binary }}.wasm cp -r assets wasm/ + - name: Optimize Wasm + uses: NiklasEi/wasm-opt-action@v2 + with: + file: target/wasm32-unknown-unknown/web-dist/*.wasm + optimize_all: true + - name: Package as a zip working-directory: ./wasm run: | @@ -74,7 +80,7 @@ jobs: - name: Build run: | - cargo build --release --target x86_64-unknown-linux-gnu + cargo build --profile dist --target x86_64-unknown-linux-gnu - name: Prepare package run: | @@ -117,7 +123,7 @@ jobs: - name: Build run: | - cargo build --release --target x86_64-pc-windows-msvc + cargo build --profile dist --target x86_64-pc-windows-msvc - name: Prepare package run: | @@ -163,7 +169,7 @@ jobs: - name: Build run: | - cargo build --release --target x86_64-apple-darwin + cargo build --profile dist --target x86_64-apple-darwin - name: Prepare Package run: | diff --git a/Cargo.toml b/Cargo.toml index 3f3700e..0cdca56 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -40,3 +40,19 @@ ron = "0.8.0" [target.'cfg(target_arch = "wasm32")'.dependencies] web-sys = { version = "*", features = ["console", "Window", "Storage"] } + +[profile.dist] +inherits = "release" +lto = "thin" + +[profile.web-dist] +inherits = "dist" +opt-level = "s" + +# Enable only a small amount of optimization in debug mode +[profile.dev] +opt-level = 1 + +# Enable high optimizations for dependencies (incl. Bevy), but not for our code: +[profile.dev.package."*"] +opt-level = 3 diff --git a/Makefile.toml b/Makefile.toml index d67b724..5480f4d 100644 --- a/Makefile.toml +++ b/Makefile.toml @@ -1,23 +1,42 @@ [env] -ENV_DIR = {source="${CARGO_MAKE_PROFILE}", default_value = "debug", mapping = {release = "release"}} -CARGO_TARGET_DIR = {value = "target", condition = {env_not_set = ["CARGO_TARGET_DIR"]}} +ENV_DIR = { source = "${CARGO_MAKE_PROFILE}", default_value = "debug", mapping = { release = "release", "web-dist" = "web-dist" } } +CARGO_TARGET_DIR = { value = "target", condition = { env_not_set = [ + "CARGO_TARGET_DIR", +] } } CARGO_WASM_PATH = "${CARGO_TARGET_DIR}/wasm32-unknown-unknown/${ENV_DIR}/${CARGO_MAKE_CRATE_NAME}.wasm" CARGO_MANIFEST_DIR = "${CARGO_MAKE_WORKING_DIRECTORY}" -PORT=4000 +PORT = 4000 [env.release] CARGO_RELEASE_ARGS = "--release" +[env.web-dist] +CARGO_RELEASE_ARGS = "--profile web-dist" + [tasks.show-env] command = "env" [tasks.build] -args = ["build", "--target", "wasm32-unknown-unknown", "@@split(CARGO_RELEASE_ARGS, )"] +args = [ + "build", + "--target", + "wasm32-unknown-unknown", + "@@split(CARGO_RELEASE_ARGS, )", +] command = "cargo" [tasks.bindgen] -install_crate = {crate_name = "wasm-bindgen-cli", binary = "wasm-bindgen", test_arg="--help"} -args = ["--out-dir", "wasm", "--out-name", "bevy_game", "--target", "web", "--no-typescript", "${CARGO_WASM_PATH}"] +install_crate = { crate_name = "wasm-bindgen-cli", binary = "wasm-bindgen", test_arg = "--help" } +args = [ + "--out-dir", + "wasm", + "--out-name", + "bevy_game", + "--target", + "web", + "--no-typescript", + "${CARGO_WASM_PATH}", +] command = "wasm-bindgen" dependencies = ["build"] @@ -28,7 +47,7 @@ cp -r assets wasm/ dependencies = ["bindgen"] [tasks.serve] -install_crate = {crate_name = "microserver", binary = "microserver", test_arg="--help"} +install_crate = { crate_name = "microserver", binary = "microserver", test_arg = "--help" } command = "microserver" args = ["--port", "${PORT}", "--no-spa", "wasm/"] dependencies = ["static"]