Make RUSTFLAGS configurable in wasm-builder (#3057)

* Make `RUSTFLAGS` configurable in `wasm-builder`

* Version ups

* Update `Cargo.lock`
This commit is contained in:
Bastian Köcher
2019-07-08 15:37:42 +02:00
committed by Gavin Wood
parent 3a002a9100
commit 29311e98b4
14 changed files with 47 additions and 23 deletions
@@ -65,6 +65,7 @@
//! - `TRIGGER_WASM_BUILD` - Can be set to trigger a WASM build. On subsequent calls the value of the variable
//! needs to change. As WASM builder instructs `cargo` to watch for file changes
//! this environment variable should only be required in certain circumstances.
//! - `WASM_BUILD_RUSTFLAGS` - Extend `RUSTFLAGS` given to `cargo build` while building the WASM binary.
//!
//! Each project can be skipped individually by using the environment variable `SKIP_PROJECT_NAME_WASM_BUILD`.
//! Where `PROJECT_NAME` needs to be replaced by the name of the cargo project, e.g. `node-runtime` will
@@ -92,6 +93,9 @@ const SKIP_BUILD_ENV: &str = "SKIP_WASM_BUILD";
/// By default the WASM binary uses the same build type as the main cargo build.
const WASM_BUILD_TYPE_ENV: &str = "WASM_BUILD_TYPE";
/// Environment variable to extend the `RUSTFLAGS` variable given to the WASM build.
const WASM_BUILD_RUSTFLAGS_ENV: &str = "WASM_BUILD_RUSTFLAGS";
/// Build the currently built project as WASM binary.
///
/// The current project is determined by using the `CARGO_MANIFEST_DIR` environment variable.
@@ -227,12 +227,7 @@ fn create_project(cargo_manifest: &Path, wasm_workspace: &Path) -> PathBuf {
fs::write(
project_folder.join("src/lib.rs"),
format!(
r#"
#![no_std]
pub use wasm_project::*;
"#
)
"#![no_std] pub use wasm_project::*;",
).expect("Project `lib.rs` writing can not fail; qed");
if let Some(crate_lock_file) = find_cargo_lock(cargo_manifest) {
@@ -265,9 +260,15 @@ fn is_release_build() -> bool {
fn build_project(project: &Path) {
let manifest_path = project.join("Cargo.toml");
let mut build_cmd = crate::get_nightly_cargo();
let rustflags = format!(
"-C link-arg=--export-table {}",
env::var(crate::WASM_BUILD_RUSTFLAGS_ENV).unwrap_or_default(),
);
build_cmd.args(&["build", "--target=wasm32-unknown-unknown"])
.arg(format!("--manifest-path={}", manifest_path.display()))
.env("RUSTFLAGS", "-C link-arg=--export-table")
.env("RUSTFLAGS", rustflags)
// We don't want to call ourselves recursively
.env(crate::SKIP_BUILD_ENV, "");
@@ -347,4 +348,5 @@ fn generate_rerun_if_changed_instructions(
// Register our env variables
println!("cargo:rerun-if-env-changed={}", crate::SKIP_BUILD_ENV);
println!("cargo:rerun-if-env-changed={}", crate::WASM_BUILD_TYPE_ENV);
println!("cargo:rerun-if-env-changed={}", crate::WASM_BUILD_RUSTFLAGS_ENV);
}