File
Blob: build/wd_capnp_library.bzl
| 1 | load("//:build/wd_cc_capnp_library.bzl", "wd_cc_capnp_library") |
| 2 | load("//:build/wd_rust_capnp_library.bzl", "wd_rust_capnp_library") |
| 3 | |
| 4 | def 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 | ) |