1def rust_cxx_bridge(
2        name: str,
3        src: str,
4        deps: list[str] = []):
5    native.export_file(
6        name = "%s/header" % name,
7        src = ":%s/generated[generated.h]" % name,
8        out = src + ".h",
9    )
10
11    native.export_file(
12        name = "%s/source" % name,
13        src = ":%s/generated[generated.cc]" % name,
14        out = src + ".cc",
15    )
16
17    native.genrule(
18        name = "%s/generated" % name,
19        srcs = [src],
20        outs = {
21            "generated.cc": ["generated.cc"],
22            "generated.h": ["generated.h"],
23        },
24        cmd = "$(exe //:codegen) ${SRCS} -o ${OUT}/generated.h -o ${OUT}/generated.cc",
25        type = "cxxbridge",
26    )
27
28    native.cxx_library(
29        name = name,
30        srcs = [":%s/source" % name],
31        preferred_linkage = "static",
32        exported_deps = deps + [":%s/include" % name],
33    )
34
35    native.cxx_library(
36        name = "%s/include" % name,
37        exported_headers = [":%s/header" % name],
38    )
39