Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Update docs
  • Loading branch information
bkchr committed Nov 12, 2020
commit 63d7c09d9f5c3a2cf527ad35e3977add1874a369
2 changes: 1 addition & 1 deletion test-utils/runtime/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.

use wasm_builder::WasmBuilder;
use substrate_wasm_builder::WasmBuilder;

fn main() {
WasmBuilder::new()
Expand Down
40 changes: 22 additions & 18 deletions utils/wasm-builder/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,23 @@ The Wasm builder is a tool that integrates the process of building the WASM bina
A project that should be compiled as a Wasm binary needs to:

1. Add a `build.rs` file.
2. Add `substrate-wasm-builder` as dependency into `build-dependencies`.
2. Add `wasm-builder` as dependency into `build-dependencies`.

The `build.rs` file needs to contain the following code:

```rust
use wasm_builder_runner::{build_current_project, WasmBuilderSource};
use substrate_wasm_builder::WasmBuilder;

fn main() {
build_current_project(
// The name of the file being generated in out-dir.
"wasm_binary.rs",
// How to include wasm-builder, in this case from crates.io.
WasmBuilderSource::Crates("1.0.0"),
);
WasmBuilder::new()
// Tell the builder to build the project (crate) this `build.rs` is part of.
.with_current_project()
// Make sure to export the `heap_base` global, this is required by Substrate
.export_heap_base()
// Build the Wasm file so that it imports the memory (need to be provided by at instantiation)
.import_memory()
// Build it.
.build()
}
```

Expand All @@ -32,9 +35,10 @@ include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs"));
```

This will include the generated Wasm binary as two constants `WASM_BINARY` and `WASM_BINARY_BLOATY`.
The former is a compact Wasm binary and the latter is not compacted.
The former is a compact Wasm binary and the latter is the Wasm binary as being generated by the compiler.
Both variables have `Option<&'static [u8]>` as type.

### Feature
### Features

Wasm builder supports to enable cargo features while building the Wasm binary. By default it will
enable all features in the wasm build that are enabled for the native build except the
Expand All @@ -46,19 +50,19 @@ Wasm binary. If this feature is not present, it will not be enabled.

By using environment variables, you can configure which Wasm binaries are built and how:

- `SKIP_WASM_BUILD` - Skips building any wasm binary. This is useful when only native should be recompiled.
- `BUILD_DUMMY_WASM_BINARY` - Builds dummy wasm binaries. These dummy binaries are empty and useful
for `cargo check` runs.
- `WASM_BUILD_TYPE` - Sets the build type for building wasm binaries. Supported values are `release` or `debug`.
- `SKIP_WASM_BUILD` - Skips building any Wasm binary. This is useful when only native should be recompiled.
If this is the first run and there doesn't exist a Wasm binary, this will set both
variables to `None`.
- `WASM_BUILD_TYPE` - Sets the build type for building Wasm binaries. Supported values are `release` or `debug`.
By default the build type is equal to the build type used by the main build.
- `FORCE_WASM_BUILD` - Can be set to force a wasm build. On subsequent calls the value of the variable
needs to change. As wasm builder instructs `cargo` to watch for file changes
- `FORCE_WASM_BUILD` - Can be set to force 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.
- `WASM_BUILD_NO_COLOR` - Disable color output of the wasm build.
- `WASM_TARGET_DIRECTORY` - Will copy any build wasm binary to the given directory. The path needs
- `WASM_TARGET_DIRECTORY` - Will copy any build Wasm binary to the given directory. The path needs
to be absolute.
- `WASM_BUILD_TOOLCHAIN` - The toolchain that should be used to build the wasm binaries. The
- `WASM_BUILD_TOOLCHAIN` - The toolchain that should be used to build the Wasm binaries. The
format needs to be the same as used by cargo, e.g. `nightly-2020-02-20`.

Each project can be skipped individually by using the environment variable `SKIP_PROJECT_NAME_WASM_BUILD`.
Expand Down
38 changes: 22 additions & 16 deletions utils/wasm-builder/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,20 +25,23 @@
//! A project that should be compiled as a Wasm binary needs to:
//!
//! 1. Add a `build.rs` file.
//! 2. Add `substrate-wasm-builder` as dependency into `build-dependencies`.
//! 2. Add `wasm-builder` as dependency into `build-dependencies`.
//!
//! The `build.rs` file needs to contain the following code:
//!
//! ```ignore
//! use wasm_builder_runner::{build_current_project, WasmBuilderSource};
//! ```no_run
//! use substrate_wasm_builder::WasmBuilder;
//!
//! fn main() {
//! build_current_project(
//! // The name of the file being generated in out-dir.
//! "wasm_binary.rs",
//! // How to include wasm-builder, in this case from crates.io.
//! WasmBuilderSource::Crates("1.0.0"),
//! );
//! WasmBuilder::new()
//! // Tell the builder to build the project (crate) this `build.rs` is part of.
//! .with_current_project()
//! // Make sure to export the `heap_base` global, this is required by Substrate
//! .export_heap_base()
//! // Build the Wasm file so that it imports the memory (need to be provided by at instantiation)
//! .import_memory()
//! // Build it.
//! .build()
//! }
//! ```
//!
Expand All @@ -49,7 +52,8 @@
//! ```
//!
//! This will include the generated Wasm binary as two constants `WASM_BINARY` and `WASM_BINARY_BLOATY`.
//! The former is a compact Wasm binary and the latter is not compacted.
//! The former is a compact Wasm binary and the latter is the Wasm binary as being generated by the compiler.
//! Both variables have `Option<&'static [u8]>` as type.
//!
//! ### Feature
//!
Expand All @@ -63,17 +67,19 @@
//!
//! By using environment variables, you can configure which Wasm binaries are built and how:
//!
//! - `SKIP_WASM_BUILD` - Skips building any wasm binary. This is useful when only native should be recompiled.
//! - `WASM_BUILD_TYPE` - Sets the build type for building wasm binaries. Supported values are `release` or `debug`.
//! - `SKIP_WASM_BUILD` - Skips building any Wasm binary. This is useful when only native should be recompiled.
//! If this is the first run and there doesn't exist a Wasm binary, this will set both
//! variables to `None`.
//! - `WASM_BUILD_TYPE` - Sets the build type for building Wasm binaries. Supported values are `release` or `debug`.
//! By default the build type is equal to the build type used by the main build.
//! - `FORCE_WASM_BUILD` - Can be set to force a wasm build. On subsequent calls the value of the variable
//! needs to change. As wasm builder instructs `cargo` to watch for file changes
//! - `FORCE_WASM_BUILD` - Can be set to force 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.
//! - `WASM_BUILD_NO_COLOR` - Disable color output of the wasm build.
//! - `WASM_TARGET_DIRECTORY` - Will copy any build wasm binary to the given directory. The path needs
//! - `WASM_TARGET_DIRECTORY` - Will copy any build Wasm binary to the given directory. The path needs
//! to be absolute.
//! - `WASM_BUILD_TOOLCHAIN` - The toolchain that should be used to build the wasm binaries. The
//! - `WASM_BUILD_TOOLCHAIN` - The toolchain that should be used to build the Wasm binaries. The
//! format needs to be the same as used by cargo, e.g. `nightly-2020-02-20`.
//!
//! Each project can be skipped individually by using the environment variable `SKIP_PROJECT_NAME_WASM_BUILD`.
Expand Down