Skip to content
File

Blob: build/wd_capnp_library.bzl

1.4 KB
1load("//:build/wd_cc_capnp_library.bzl", "wd_cc_capnp_library")
2load("//:build/wd_rust_capnp_library.bzl", "wd_rust_capnp_library")
3 
4def wd_capnp_library(
5 src,
6 deps = [],
7 tags = [],
8 visibility = ["//visibility:public"]):
9 """Generates capnp library for multiple languages.
10 
11 For a given file-name.capnp it will produce:
12 - `file-name_capnp` c++ library
13 - `file-name_capnp_rust` rust library
14 """
15 base_name = src.removesuffix(".capnp")
16 target_compatible_with = select({
17 "@//build/config:no_build": ["@platforms//:incompatible"],
18 "//conditions:default": [],
19 })
20 
21 # json.capnp is available implicitly for c++ targets
22 cc_deps = [dep for dep in deps if dep != "@capnp-cpp//src/capnp/compat:json_capnp"]
23 
24 wd_cc_capnp_library(
25 name = base_name + "_capnp",
26 visibility = visibility,
27 deps = cc_deps,
28 srcs = [src],
29 tags = ["manual"] + tags,
30 target_compatible_with = target_compatible_with,
31 )
32 
33 rust_deps = [dep + "_rust" if dep.endswith("_capnp") else dep for dep in deps]
34 
35 wd_rust_capnp_library(
36 name = base_name + "_capnp_rust",
37 crate_name = base_name.replace("-", "_") + "_capnp",
38 visibility = visibility,
39 deps = rust_deps,
40 srcs = [src],
41 tags = ["manual"] + tags,
42 target_compatible_with = target_compatible_with,
43 )