Skip to content

Commit 6140a3f

Browse files
authored
Merge pull request #317 from dtolnay/build
Factor out genrules to rust_cxx_bridge.bzl
2 parents f337a20 + 717c7e6 commit 6140a3f

File tree

6 files changed

+92
-98
lines changed

6 files changed

+92
-98
lines changed

demo/BUCK

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
load("//tools/buck:genrule.bzl", "genrule")
1+
load("//tools/buck:rust_cxx_bridge.bzl", "rust_cxx_bridge")
22

33
rust_binary(
44
name = "demo",
@@ -10,34 +10,10 @@ rust_binary(
1010
],
1111
)
1212

13-
cxx_library(
13+
rust_cxx_bridge(
1414
name = "bridge",
15-
srcs = [":bridge/source"],
16-
deps = [
17-
":bridge/include",
18-
":demo-include",
19-
],
20-
)
21-
22-
genrule(
23-
name = "bridge/header",
24-
srcs = ["src/main.rs"],
25-
out = "src/main.rs.h",
26-
cmd = "$(exe //:codegen) --header ${SRCS} > ${OUT}",
27-
type = "cxxbridge",
28-
)
29-
30-
genrule(
31-
name = "bridge/source",
32-
srcs = ["src/main.rs"],
33-
out = "src/main.rs.cc",
34-
cmd = "$(exe //:codegen) ${SRCS} > ${OUT}",
35-
type = "cxxbridge",
36-
)
37-
38-
cxx_library(
39-
name = "bridge/include",
40-
exported_headers = [":bridge/header"],
15+
src = "src/main.rs",
16+
deps = [":demo-include"],
4117
)
4218

4319
cxx_library(

demo/BUILD

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
load("@rules_cc//cc:defs.bzl", "cc_library")
22
load("//tools/bazel:rust.bzl", "rust_binary")
3+
load("//tools/bazel:rust_cxx_bridge.bzl", "rust_cxx_bridge")
34

45
rust_binary(
56
name = "demo",
@@ -11,34 +12,10 @@ rust_binary(
1112
],
1213
)
1314

14-
cc_library(
15+
rust_cxx_bridge(
1516
name = "bridge",
16-
srcs = [":bridge/source"],
17-
deps = [
18-
":bridge/include",
19-
":demo-include",
20-
],
21-
)
22-
23-
genrule(
24-
name = "bridge/header",
25-
srcs = ["src/main.rs"],
26-
outs = ["src/main.rs.h"],
27-
cmd = "$(location //:codegen) --header $< > $@",
28-
tools = ["//:codegen"],
29-
)
30-
31-
genrule(
32-
name = "bridge/source",
33-
srcs = ["src/main.rs"],
34-
outs = ["src/main.rs.cc"],
35-
cmd = "$(location //:codegen) $< > $@",
36-
tools = ["//:codegen"],
37-
)
38-
39-
cc_library(
40-
name = "bridge/include",
41-
hdrs = [":bridge/header"],
17+
src = "src/main.rs",
18+
deps = [":demo-include"],
4219
)
4320

4421
cc_library(

tests/BUCK

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
load("//tools/buck:genrule.bzl", "genrule")
1+
load("//tools/buck:rust_cxx_bridge.bzl", "rust_cxx_bridge")
22

33
rust_test(
44
name = "test",
@@ -34,23 +34,12 @@ cxx_library(
3434
deps = ["//:core"],
3535
)
3636

37-
genrule(
38-
name = "bridge/header",
39-
srcs = ["ffi/lib.rs"],
40-
out = "ffi/lib.rs.h",
41-
cmd = "$(exe //:codegen) --header ${SRCS} > ${OUT}",
37+
rust_cxx_bridge(
38+
name = "bridge",
39+
src = "ffi/lib.rs",
4240
)
4341

44-
genrule(
45-
name = "bridge/source",
46-
srcs = ["ffi/lib.rs"],
47-
out = "ffi/lib.rs.cc",
48-
cmd = "$(exe //:codegen) ${SRCS} > ${OUT}",
49-
)
50-
51-
genrule(
52-
name = "module/source",
53-
srcs = ["ffi/module.rs"],
54-
out = "ffi/module.rs.cc",
55-
cmd = "$(exe //:codegen) ${SRCS} > ${OUT}",
42+
rust_cxx_bridge(
43+
name = "module",
44+
src = "ffi/module.rs",
5645
)

tests/BUILD

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
load("@rules_cc//cc:defs.bzl", "cc_library")
22
load("//tools/bazel:rust.bzl", "rust_library", "rust_test")
3+
load("//tools/bazel:rust_cxx_bridge.bzl", "rust_cxx_bridge")
34

45
rust_test(
56
name = "test",
@@ -36,33 +37,18 @@ cc_library(
3637
],
3738
)
3839

39-
genrule(
40-
name = "bridge/header",
41-
srcs = ["ffi/lib.rs"],
42-
outs = ["ffi/lib.rs.h"],
43-
cmd = "$(location //:codegen) --header $< > $@",
44-
tools = ["//:codegen"],
45-
)
46-
47-
genrule(
48-
name = "bridge/source",
49-
srcs = ["ffi/lib.rs"],
50-
outs = ["ffi/lib.rs.cc"],
51-
cmd = "$(location //:codegen) $< > $@",
52-
tools = ["//:codegen"],
53-
)
54-
55-
cc_library(
56-
name = "bridge/include",
57-
hdrs = [":bridge/header"],
40+
rust_cxx_bridge(
41+
name = "bridge",
42+
src = "ffi/lib.rs",
5843
include_prefix = "cxx-test-suite",
5944
strip_include_prefix = "ffi",
45+
deps = [":impl"],
6046
)
6147

62-
genrule(
63-
name = "module/source",
64-
srcs = ["ffi/module.rs"],
65-
outs = ["ffi/module.rs.cc"],
66-
cmd = "$(location //:codegen) $< > $@",
67-
tools = ["//:codegen"],
48+
rust_cxx_bridge(
49+
name = "module",
50+
src = "ffi/module.rs",
51+
include_prefix = "cxx-test-suite",
52+
strip_include_prefix = "ffi",
53+
deps = [":impl"],
6854
)

tools/bazel/rust_cxx_bridge.bzl

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
load("@rules_cc//cc:defs.bzl", "cc_library")
2+
3+
def rust_cxx_bridge(
4+
name,
5+
src,
6+
include_prefix = None,
7+
strip_include_prefix = None,
8+
deps = []):
9+
native.genrule(
10+
name = "%s/header" % name,
11+
srcs = [src],
12+
outs = [src + ".h"],
13+
cmd = "$(location //:codegen) --header $< > $@",
14+
tools = ["//:codegen"],
15+
)
16+
17+
native.genrule(
18+
name = "%s/source" % name,
19+
srcs = [src],
20+
outs = [src + ".cc"],
21+
cmd = "$(location //:codegen) $< > $@",
22+
tools = ["//:codegen"],
23+
)
24+
25+
cc_library(
26+
name = name,
27+
srcs = [":%s/source" % name],
28+
deps = deps + [":%s/include" % name],
29+
)
30+
31+
cc_library(
32+
name = "%s/include" % name,
33+
hdrs = [":%s/header" % name],
34+
include_prefix = include_prefix,
35+
strip_include_prefix = strip_include_prefix,
36+
)

tools/buck/rust_cxx_bridge.bzl

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
load("//tools/buck:genrule.bzl", "genrule")
2+
3+
def rust_cxx_bridge(name, src, deps = []):
4+
genrule(
5+
name = "%s/header" % name,
6+
srcs = [src],
7+
out = src + ".h",
8+
cmd = "$(exe //:codegen) --header ${SRCS} > ${OUT}",
9+
type = "cxxbridge",
10+
)
11+
12+
genrule(
13+
name = "%s/source" % name,
14+
srcs = [src],
15+
out = src + ".cc",
16+
cmd = "$(exe //:codegen) ${SRCS} > ${OUT}",
17+
type = "cxxbridge",
18+
)
19+
20+
cxx_library(
21+
name = name,
22+
srcs = [":%s/source" % name],
23+
preferred_linkage = "static",
24+
deps = deps + [":%s/include" % name],
25+
)
26+
27+
cxx_library(
28+
name = "%s/include" % name,
29+
exported_headers = [":%s/header" % name],
30+
)

0 commit comments

Comments
 (0)