Generate genlex rules from bp2build for cc targets

This change will cause bp2build to generate genlex targets any
time a .l or .ll file is present in the srcs for a cc target and
add those genlex targets to the srcs attribute of the original
target.

Bug: 207408632
Test: unit tests
Change-Id: I1bce82c9d3c3d458eae1cef547ffae3d6e975134
This commit is contained in:
Trevor Radcliffe
2022-05-13 20:55:35 +00:00
parent 91f10eccc6
commit ef9c900ec3
8 changed files with 260 additions and 13 deletions

View File

@@ -86,7 +86,7 @@ func runCcHostBinaryTestCase(t *testing.T, tc ccBinaryBp2buildTestCase) {
testCase := tc
for i, tar := range testCase.targets {
switch tar.typ {
case "cc_binary", "proto_library", "cc_lite_proto_library":
case "cc_binary", "proto_library", "cc_lite_proto_library", "genlex":
tar.attrs["target_compatible_with"] = `select({
"//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
"//conditions:default": [],
@@ -505,3 +505,49 @@ func TestCcBinaryStaticProto(t *testing.T) {
},
})
}
func TestCcBinaryConvertLex(t *testing.T) {
runCcBinaryTests(t, ccBinaryBp2buildTestCase{
description: `.l and .ll sources converted to .c and .cc`,
blueprint: `
{rule_name} {
name: "foo",
srcs: ["foo.c", "bar.cc", "foo1.l", "foo2.l", "bar1.ll", "bar2.ll"],
lex: { flags: ["--foo_opt", "--bar_opt"] },
include_build_directory: false,
}
`,
targets: []testBazelTarget{
{"genlex", "foo_genlex_l", attrNameToString{
"srcs": `[
"foo1.l",
"foo2.l",
]`,
"lexopts": `[
"--foo_opt",
"--bar_opt",
]`,
}},
{"genlex", "foo_genlex_ll", attrNameToString{
"srcs": `[
"bar1.ll",
"bar2.ll",
]`,
"lexopts": `[
"--foo_opt",
"--bar_opt",
]`,
}},
{"cc_binary", "foo", attrNameToString{
"srcs": `[
"bar.cc",
":foo_genlex_ll",
]`,
"srcs_c": `[
"foo.c",
":foo_genlex_l",
]`,
}},
},
})
}