| commit | bfb0dccde443038b8ea566dbadbb2efb9e3626c8 | [log] [tgz] |
|---|---|---|
| author | Rei Shimizu <Shikugawa@gmail.com> | Fri Jun 05 17:31:08 2020 +0900 |
| committer | GitHub <noreply@github.com> | Fri Jun 05 10:31:08 2020 +0200 |
| tree | e54756ee7be2449b8689b4bbf7dc66704fffa661 | |
| parent | cd73f34ae07262320c0f438340e5e73bbb808222 [diff] |
add flag to allow putting out binary whenever (#312) I'd like to build Rust code like this into `wasm32-unknown-unknown`. https://github.com/Shikugawa/envoy-wasm-rust-playground/blob/master/example/src/lib.rs This code is build with this build config. https://github.com/Shikugawa/envoy-wasm-rust-playground/blob/master/example/Cargo.toml We want to put out binary but not want to build with `--cargo-type=lib` but `--cargo-type=cdylib`. In the current implementation, we can't put out binary without using `--cargo-type=bin`. This was a critical problem for us so that patched this. I'm considering to use this like this. This will put out `test_rust.wasm` with this command. ``` bazel build //:test_rust --platforms=@io_bazel_rules_rust//rust/platform:wasm ``` ``` rust_binary( name = "test_rust", srcs = ["test_rust.rs"], crate_type = "cdylib", out_binary = True, ) ```
This repository provides rules for building Rust projects with Bazel.
To build a rust_binary for wasm32-unknown-unknown add the --platforms=//rust/platform:wasm flag.
bazel build @examples//hello_world_wasm --platforms=//rust/platform:wasm
rust_wasm_bindgen will automatically transition to the wasm platform and can be used when building wasm code for the host target.
with an overview here.
To use the Rust rules, add the following to your WORKSPACE file to add the external repositories for the Rust toolchain:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "io_bazel_rules_rust", sha256 = "b6da34e057a31b8a85e343c732de4af92a762f804fc36b0baa6c001423a70ebc", strip_prefix = "rules_rust-55f77017a7f5b08e525ebeab6e11d8896a4499d2", urls = [ # Master branch as of 2019-10-07 "https://github.com/bazelbuild/rules_rust/archive/55f77017a7f5b08e525ebeab6e11d8896a4499d2.tar.gz", ], ) http_archive( name = "bazel_skylib", sha256 = "9a737999532daca978a158f94e77e9af6a6a169709c0cee274f0a4c3359519bd", strip_prefix = "bazel-skylib-1.0.0", url = "https://github.com/bazelbuild/bazel-skylib/archive/1.0.0.tar.gz", ) load("@io_bazel_rules_rust//rust:repositories.bzl", "rust_repositories") rust_repositories() load("@io_bazel_rules_rust//:workspace.bzl", "bazel_version") bazel_version(name = "bazel_version")
The rules are under active development, as such the lastest commit on the master branch should be used. master currently requires Bazel >= 0.26.0.
To build with a particular version of the Rust compiler, pass that version to rust_repositories:
rust_repositories(version = "1.42.0")
As well as an exact version, version can be set to "nightly" or "beta". If set to these values, iso_date must also be set:
rust_repositories(version = "nightly", iso_date = "2020-04-19")
Similarly, rustfmt_version may also be configured:
rust_repositories(rustfmt_version = "1.4.8")
Currently the most common approach to managing external dependencies is using cargo-raze to generate BUILD files for Cargo crates.
cargo_crate workspace rule for pulling crates from Cargo.