From 3474d20d9b9c13a7d41f15394c62a2f489609b8f Mon Sep 17 00:00:00 2001 From: Henri Bourcereau Date: Wed, 25 Mar 2026 20:16:46 +0100 Subject: [PATCH] refact: add cargo cxx feature --- Cargo.lock | 1 + client_web/Cargo.toml | 3 +++ devenv.nix | 3 +++ justfile | 13 +++++++++++++ store/Cargo.toml | 4 +++- store/build.rs | 10 ++++++---- store/src/lib.rs | 1 + 7 files changed, 30 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 82028d9..f06a065 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1386,6 +1386,7 @@ version = "0.1.0" dependencies = [ "backbone-lib", "futures", + "getrandom 0.3.4", "gloo-storage", "leptos", "serde", diff --git a/client_web/Cargo.toml b/client_web/Cargo.toml index 51a35dc..e2e84ac 100644 --- a/client_web/Cargo.toml +++ b/client_web/Cargo.toml @@ -14,3 +14,6 @@ gloo-storage = "0.3" [target.'cfg(target_arch = "wasm32")'.dependencies] wasm-bindgen-futures = "0.4" +# getrandom 0.3 requires an explicit WASM backend; "wasm_js" uses window.crypto.getRandomValues. +# Must be a direct dependency (not just transitive) for the feature to take effect. +getrandom = { version = "0.3", features = ["wasm_js"] } diff --git a/devenv.nix b/devenv.nix index f7a8daa..c8cc20c 100644 --- a/devenv.nix +++ b/devenv.nix @@ -5,6 +5,9 @@ let in { packages = [ + # for Leptos + pkgs.trunk + # pkgs.wasm-bindgen-cli_0_2_114 # pour burn-rs pkgs.SDL2_gfx diff --git a/justfile b/justfile index 2bfc052..1c650fc 100644 --- a/justfile +++ b/justfile @@ -8,6 +8,19 @@ shell: devenv shell runcli: RUST_LOG=info cargo run --bin=client_cli + +[working-directory: 'client_web/'] +dev-leptos: + trunk serve + +[working-directory: 'client_web'] +build-leptos: + trunk build --release + cp dist/index.html /home/henri/travaux/programmes/forks/multiplayer/deploy/trictrac.html + cp dist/*.wasm /home/henri/travaux/programmes/forks/multiplayer/deploy/ + cp dist/*.js /home/henri/travaux/programmes/forks/multiplayer/deploy/ + cp dist/*.css /home/henri/travaux/programmes/forks/multiplayer/deploy/ + runclibots: cargo run --bin=client_cli -- --bot random,dqnburn:./bot/models/burnrl_dqn_40.mpk #cargo run --bin=client_cli -- --bot dqn:./bot/models/dqn_model_final.json,dummy diff --git a/store/Cargo.toml b/store/Cargo.toml index fbb4f6d..58e9e32 100644 --- a/store/Cargo.toml +++ b/store/Cargo.toml @@ -15,11 +15,13 @@ crate-type = ["cdylib", "rlib", "staticlib"] [features] # Enable Python bindings (required for maturin / AI training). Not available on wasm32. python = ["pyo3"] +# Enable C++ bridge for OpenSpiel integration. Not available on wasm32. +cpp = ["dep:cxx"] [dependencies] anyhow = "1.0" base64 = "0.21.7" -cxx = "1.0" +cxx = { version = "1.0", optional = true } # provides macros for creating log messages to be used by a logger (for example env_logger) log = "0.4.20" merge = "0.1.0" diff --git a/store/build.rs b/store/build.rs index 852bcf6..88d743f 100644 --- a/store/build.rs +++ b/store/build.rs @@ -1,7 +1,9 @@ fn main() { - cxx_build::bridge("src/cxxengine.rs") - .std("c++17") - .compile("trictrac-cxx"); + if std::env::var("CARGO_FEATURE_CPP").is_ok() { + cxx_build::bridge("src/cxxengine.rs") + .std("c++17") + .compile("trictrac-cxx"); - println!("cargo:rerun-if-changed=src/cxxengine.rs"); + println!("cargo:rerun-if-changed=src/cxxengine.rs"); + } } diff --git a/store/src/lib.rs b/store/src/lib.rs index 25d2dcb..a0a3d23 100644 --- a/store/src/lib.rs +++ b/store/src/lib.rs @@ -24,4 +24,5 @@ pub mod training_common; mod pyengine; // C++ interface via cxx.rs (for OpenSpiel C++ integration) +#[cfg(feature = "cpp")] pub mod cxxengine;