Skip to content

Commit

Permalink
Merge pull request #461 from torkve/master
Browse files Browse the repository at this point in the history
add an option to pass an arbitrary set of arguments to cargo build
  • Loading branch information
ashleygwilliams authored Jan 15, 2019
2 parents 9491d54 + 6899b97 commit 5258d42
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 2 deletions.
11 changes: 11 additions & 0 deletions docs/src/commands/build.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,17 @@ wasm-pack build examples/js-hello-world --mode no-install
| `no-install` | `wasm-pack init` implicitly and create wasm binding without installing `wasm-bindgen`. |
| `normal` | do all the stuffs of `no-install` with installed `wasm-bindgen`. |

## Extra options

The `build` command can pass extra options straight to `cargo build` even if they are not
supported in wasm-pack. To use them you should add standalone `--` argument at the very
end of your command, and all the arguments you want to pass to cargo should go after.
For example to build previous example using unstable cargo offline feature:

```
wasm-pack build examples/js-hello-world --mode no-install -- -Z offline
```

<hr style="font-size: 1.5em; margin-top: 2.5em"/>

<sup id="footnote-0">0</sup> If you need to include additional assets in the pkg
Expand Down
8 changes: 7 additions & 1 deletion src/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,12 @@ pub fn rustup_add_wasm_target(step: &Step) -> Result<(), Error> {
}

/// Run `cargo build` targetting `wasm32-unknown-unknown`.
pub fn cargo_build_wasm(path: &Path, profile: BuildProfile, step: &Step) -> Result<(), Error> {
pub fn cargo_build_wasm(
path: &Path,
profile: BuildProfile,
step: &Step,
extra_options: &Vec<String>,
) -> Result<(), Error> {
let msg = format!("{}Compiling to WASM...", emoji::CYCLONE);
PBAR.step(step, &msg);
let mut cmd = Command::new("cargo");
Expand All @@ -84,6 +89,7 @@ pub fn cargo_build_wasm(path: &Path, profile: BuildProfile, step: &Step) -> Resu
}
}
cmd.arg("--target").arg("wasm32-unknown-unknown");
cmd.args(extra_options);
child::run(cmd, "cargo build").context("Compiling your crate to WebAssembly failed")?;
Ok(())
}
Expand Down
9 changes: 8 additions & 1 deletion src/command/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ pub struct Build {
pub out_dir: PathBuf,
pub bindgen: Option<Download>,
pub cache: Cache,
pub extra_options: Vec<String>,
}

/// The `BuildMode` determines which mode of initialization we are running, and
Expand Down Expand Up @@ -120,6 +121,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`
pub extra_options: Vec<String>,
}

impl Default for BuildOptions {
Expand All @@ -135,6 +140,7 @@ impl Default for BuildOptions {
release: false,
profiling: false,
out_dir: String::new(),
extra_options: Vec::new(),
}
}
}
Expand Down Expand Up @@ -175,6 +181,7 @@ impl Build {
out_dir,
bindgen: None,
cache: Cache::new()?,
extra_options: build_opts.extra_options,
})
}

Expand Down Expand Up @@ -282,7 +289,7 @@ impl Build {

fn step_build_wasm(&mut self, step: &Step) -> Result<(), Error> {
info!("Building wasm...");
build::cargo_build_wasm(&self.crate_path, self.profile, step)?;
build::cargo_build_wasm(&self.crate_path, self.profile, step, &self.extra_options)?;

info!(
"wasm built at {:#?}.",
Expand Down
16 changes: 16 additions & 0 deletions tests/all/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -228,3 +228,19 @@ fn build_with_and_without_wasm_bindgen_debug() {
);
}
}

#[test]
fn build_with_arbitrary_cargo_options() {
let fixture = utils::fixture::js_hello_world();
fixture.install_local_wasm_bindgen();

let cli = Cli::from_iter_safe(vec![
"wasm-pack",
"build",
&fixture.path.display().to_string(),
"--",
"--no-default-features",
])
.unwrap();
fixture.run(cli.cmd).unwrap();
}

0 comments on commit 5258d42

Please sign in to comment.