diff --git a/src/build.rs b/src/build.rs index 4628d37ca..bd14b502e 100644 --- a/src/build.rs +++ b/src/build.rs @@ -68,6 +68,7 @@ pub fn cargo_build_wasm( path: &Path, profile: BuildProfile, step: &Step, + extra_options: &Vec, ) -> Result<(), Error> { let msg = format!("{}Compiling to WASM...", emoji::CYCLONE); PBAR.step(step, &msg); @@ -91,6 +92,7 @@ pub fn cargo_build_wasm( } } cmd.arg("--target").arg("wasm32-unknown-unknown"); + cmd.args(extra_options); child::run(log, cmd, "cargo build").context("Compiling your crate to WebAssembly failed")?; Ok(()) } diff --git a/src/command/build.rs b/src/command/build.rs index d3dc15f07..4a91c8db1 100644 --- a/src/command/build.rs +++ b/src/command/build.rs @@ -30,6 +30,7 @@ pub struct Build { pub out_dir: PathBuf, pub bindgen: Option, pub cache: Cache, + pub extra_options: Vec, } /// The `BuildMode` determines which mode of initialization we are running, and @@ -119,6 +120,10 @@ pub struct BuildOptions { #[structopt(long = "out-dir", short = "d", default_value = "pkg")] /// Sets the output directory with a relative path. pub out_dir: String, + + #[structopt(last = true)] + /// List of extra options to pass to `cargo build` + extra_options: Vec, } type BuildStep = fn(&mut Build, &Step, &Logger) -> Result<(), Error>; @@ -151,6 +156,7 @@ impl Build { out_dir, bindgen: None, cache: Cache::new()?, + extra_options: build_opts.extra_options, }) } @@ -255,7 +261,13 @@ impl Build { fn step_build_wasm(&mut self, step: &Step, log: &Logger) -> Result<(), Error> { info!(&log, "Building wasm..."); - build::cargo_build_wasm(log, &self.crate_path, self.profile, step)?; + build::cargo_build_wasm( + log, + &self.crate_path, + self.profile, + step, + &self.extra_options, + )?; info!( &log,