Skip to content
File

Blob: build/wd_rust_proc_macro.bzl

1.5 KB
1load("@rules_rust//rust:defs.bzl", "rust_proc_macro", "rust_test")
2 
3def 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 )