File
Blob: build/wd_rust_proc_macro.bzl
| 1 | load("@rules_rust//rust:defs.bzl", "rust_proc_macro", "rust_test") |
| 2 | |
| 3 | def wd_rust_proc_macro( |
| 4 | name, |
| 5 | deps = [], |
| 6 | data = [], |
| 7 | test_env = {}, |
| 8 | test_tags = [], |
| 9 | test_deps = [], |
| 10 | visibility = None): |
| 11 | """Define rust procedural macro crate. |
| 12 | |
| 13 | Args: |
| 14 | name: crate name. |
| 15 | deps: crate dependencies: rust crates (typically includes proc-macro2, quote, syn). |
| 16 | data: additional data files. |
| 17 | test_env: additional test environment variables. |
| 18 | test_tags: additional test tags. |
| 19 | test_deps: test-only dependencies. |
| 20 | visibility: crate visibility. |
| 21 | """ |
| 22 | srcs = native.glob(["**/*.rs"]) |
| 23 | crate_name = name.replace("-", "_") |
| 24 | |
| 25 | rust_proc_macro( |
| 26 | name = name, |
| 27 | crate_name = crate_name, |
| 28 | srcs = srcs, |
| 29 | deps = deps + ["@workerd//deps/rust:runtime"], |
| 30 | visibility = visibility, |
| 31 | data = data, |
| 32 | target_compatible_with = select({ |
| 33 | "@//build/config:no_build": ["@platforms//:incompatible"], |
| 34 | "//conditions:default": [], |
| 35 | }), |
| 36 | ) |
| 37 | |
| 38 | rust_test( |
| 39 | name = name + "_test", |
| 40 | crate = ":" + name, |
| 41 | env = { |
| 42 | "RUST_BACKTRACE": "1", |
| 43 | # rust test runner captures stderr by default, which makes debugging tests very hard |
| 44 | "RUST_TEST_NOCAPTURE": "1", |
| 45 | # our tests are usually very heavy and do not support concurrent invocation |
| 46 | "RUST_TEST_THREADS": "1", |
| 47 | } | test_env, |
| 48 | tags = test_tags + ["no-coverage"], |
| 49 | deps = test_deps, |
| 50 | ) |