From 6fe405a5f7e9b435e03809667e0ec812d71b2553 Mon Sep 17 00:00:00 2001 From: ruv Date: Mon, 27 Apr 2026 11:22:35 -0400 Subject: [PATCH] fix(wasm-edge): gate ghost_hunter bin behind standalone-bin feature MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The standalone ghost_hunter binary defines its own on_init/on_frame/on_timer WASM3 entry-points; the lib also exports those when default-pipeline is on. A vanilla `cargo build -p wifi-densepose-wasm-edge --target wasm32-unknown-unknown --release` would build both, producing a "Linking globals named 'on_frame': symbol multiply defined!" error. Fix: declare an explicit `[[bin]] required-features = ["standalone-bin"]` gate so the bin only builds when the user opts in with `--no-default-features --features standalone-bin`. The default feature set continues to produce the combined-pipeline lib (15 KB wasm32). Validation: - cargo build -p wifi-densepose-wasm-edge --target wasm32-unknown-unknown --release → 15 KB wifi_densepose_wasm_edge.wasm (default-pipeline lib) - cargo build -p wifi-densepose-wasm-edge --bin ghost_hunter --target wasm32-unknown-unknown --release --no-default-features --features standalone-bin → 5.8 KB ghost_hunter.wasm (standalone module) - cd v2/crates/wifi-densepose-wasm-edge && cargo test --features std --no-default-features → 75/75 tests pass Co-Authored-By: claude-flow --- v2/crates/wifi-densepose-wasm-edge/Cargo.toml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/v2/crates/wifi-densepose-wasm-edge/Cargo.toml b/v2/crates/wifi-densepose-wasm-edge/Cargo.toml index 2b49ad24..02cade21 100644 --- a/v2/crates/wifi-densepose-wasm-edge/Cargo.toml +++ b/v2/crates/wifi-densepose-wasm-edge/Cargo.toml @@ -25,6 +25,18 @@ std = ["sha2/std"] # Include the default combined pipeline (gesture+coherence+adversarial) entry points. # Disable this when building standalone module binaries (ghost_hunter, etc.) default-pipeline = [] +# Build the standalone-bin Ghost Hunter target. Required because that binary +# defines its own on_init / on_frame / on_timer entry points which would +# collide with the lib's `default-pipeline` exports. Build with: +# cargo build -p wifi-densepose-wasm-edge --bin ghost_hunter \ +# --target wasm32-unknown-unknown --release \ +# --no-default-features --features standalone-bin +standalone-bin = [] + +[[bin]] +name = "ghost_hunter" +path = "src/bin/ghost_hunter.rs" +required-features = ["standalone-bin"] [profile.release] opt-level = "s" # Optimize for size