bp2build: support generated sources and hdrs

There are two pieces to make this work:
1. Local include paths must include $(BINDIR)-relative paths, to support
generated headers in those directories.
2. The srcs that bp2build outputs for BUILD targets must include labels
for targets given in generated_hdrs and generated_srcs.

Support for exported_generated_hdrs intentionally deferred.

This allows us to remove several targets from the bp2build denylist.
Some are moved to the mixed build denylist, because genreated headers are
still unsupported in mixed builds.
Test: bp2build.sh CI script

Change-Id: Ib4f9dac20f6445487b8dad53b91eac01f437a590
This commit is contained in:
Chris Parsons
2021-05-13 15:13:04 -04:00
parent b1caeb0768
commit 484e50aa7c
7 changed files with 379 additions and 68 deletions

View File

@@ -17,6 +17,8 @@ package bp2build
import (
"android/soong/android"
"android/soong/cc"
"android/soong/genrule"
"strings"
"testing"
)
@@ -179,10 +181,15 @@ cc_library_static {
"-Dflag1",
"-Dflag2",
"-Iinclude_dir_1",
"-I$(BINDIR)/include_dir_1",
"-Iinclude_dir_2",
"-I$(BINDIR)/include_dir_2",
"-Ilocal_include_dir_1",
"-I$(BINDIR)/local_include_dir_1",
"-Ilocal_include_dir_2",
"-I$(BINDIR)/local_include_dir_2",
"-I.",
"-I$(BINDIR)/.",
],
deps = [
":header_lib_1",
@@ -205,22 +212,34 @@ cc_library_static {
],
)`, `cc_library_static(
name = "static_lib_1",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
srcs = ["static_lib_1.cc"],
)`, `cc_library_static(
name = "static_lib_2",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
srcs = ["static_lib_2.cc"],
)`, `cc_library_static(
name = "whole_static_lib_1",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
srcs = ["whole_static_lib_1.cc"],
)`, `cc_library_static(
name = "whole_static_lib_2",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
srcs = ["whole_static_lib_2.cc"],
)`},
@@ -257,7 +276,9 @@ cc_library_static {
name = "foo_static",
copts = [
"-Isubpackage",
"-I$(BINDIR)/subpackage",
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
)`},
@@ -280,7 +301,10 @@ cc_library_static {
}`,
expectedBazelTargets: []string{`cc_library_static(
name = "foo_static",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
includes = ["subpackage"],
linkstatic = True,
)`},
@@ -303,7 +327,10 @@ cc_library_static {
}`,
expectedBazelTargets: []string{`cc_library_static(
name = "foo_static",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
includes = ["subpackage"],
linkstatic = True,
)`},
@@ -341,10 +368,15 @@ cc_library_static {
name = "foo_static",
copts = [
"-Isubpackage/subsubpackage",
"-I$(BINDIR)/subpackage/subsubpackage",
"-Isubpackage2",
"-I$(BINDIR)/subpackage2",
"-Isubpackage3/subsubpackage",
"-I$(BINDIR)/subpackage3/subsubpackage",
"-Isubpackage/subsubpackage2",
"-I$(BINDIR)/subpackage/subsubpackage2",
"-Isubpackage",
"-I$(BINDIR)/subpackage",
],
includes = ["./exported_subsubpackage"],
linkstatic = True,
@@ -372,7 +404,9 @@ cc_library_static {
name = "foo_static",
copts = [
"-Isubpackage",
"-I$(BINDIR)/subpackage",
"-Isubpackage2",
"-I$(BINDIR)/subpackage2",
],
linkstatic = True,
)`},
@@ -401,8 +435,11 @@ cc_library_static {
name = "foo_static",
copts = [
"-Isubpackage",
"-I$(BINDIR)/subpackage",
"-Isubpackage2",
"-I$(BINDIR)/subpackage2",
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
)`},
@@ -423,7 +460,10 @@ cc_library_static {
}`,
expectedBazelTargets: []string{`cc_library_static(
name = "foo_static",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
deps = select({
"//build/bazel/platforms/arch:arm64": [":static_dep"],
"//conditions:default": [],
@@ -435,11 +475,17 @@ cc_library_static {
}),
)`, `cc_library_static(
name = "static_dep",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
)`, `cc_library_static(
name = "static_dep2",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
)`},
},
@@ -459,7 +505,10 @@ cc_library_static {
}`,
expectedBazelTargets: []string{`cc_library_static(
name = "foo_static",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
deps = select({
"//build/bazel/platforms/os:android": [":static_dep"],
"//conditions:default": [],
@@ -471,11 +520,17 @@ cc_library_static {
}),
)`, `cc_library_static(
name = "static_dep",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
)`, `cc_library_static(
name = "static_dep2",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
)`},
},
@@ -500,7 +555,10 @@ cc_library_static {
}`,
expectedBazelTargets: []string{`cc_library_static(
name = "foo_static",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
deps = [":static_dep"] + select({
"//build/bazel/platforms/arch:arm64": [":static_dep4"],
"//conditions:default": [],
@@ -512,19 +570,31 @@ cc_library_static {
whole_archive_deps = [":static_dep2"],
)`, `cc_library_static(
name = "static_dep",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
)`, `cc_library_static(
name = "static_dep2",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
)`, `cc_library_static(
name = "static_dep3",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
)`, `cc_library_static(
name = "static_dep4",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
)`},
},
@@ -547,7 +617,10 @@ cc_library_static {
}`,
expectedBazelTargets: []string{`cc_library_static(
name = "foo_static",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
srcs = [
"common.c",
@@ -573,7 +646,10 @@ cc_library_static {
}`,
expectedBazelTargets: []string{`cc_library_static(
name = "foo_static",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
srcs = ["common.c"] + select({
"//build/bazel/platforms/arch:arm": ["foo-arm.c"],
@@ -604,7 +680,10 @@ cc_library_static {
}`,
expectedBazelTargets: []string{`cc_library_static(
name = "foo_static",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
srcs = ["common.c"] + select({
"//build/bazel/platforms/arch:arm": ["for-arm.c"],
@@ -637,7 +716,10 @@ cc_library_static {
} `,
expectedBazelTargets: []string{`cc_library_static(
name = "foo_static",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
srcs = ["common.c"] + select({
"//build/bazel/platforms/arch:arm": [
@@ -687,7 +769,10 @@ cc_library_static {
} `,
expectedBazelTargets: []string{`cc_library_static(
name = "foo_static",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
srcs = ["common.c"] + select({
"//build/bazel/platforms/arch:arm": [
@@ -738,12 +823,18 @@ cc_library_static {
}`,
expectedBazelTargets: []string{`cc_library_static(
name = "foo_static",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
deps = [":static_dep"],
linkstatic = True,
)`, `cc_library_static(
name = "static_dep",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
)`},
},
@@ -768,7 +859,10 @@ cc_library_static {
} `,
expectedBazelTargets: []string{`cc_library_static(
name = "foo_static",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
srcs = ["common.c"] + select({
"//build/bazel/platforms/arch:arm": ["for-lib32.c"],
@@ -801,7 +895,10 @@ cc_library_static {
} `,
expectedBazelTargets: []string{`cc_library_static(
name = "foo_static2",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
srcs = ["common.c"] + select({
"//build/bazel/platforms/arch:arm": [
@@ -867,7 +964,10 @@ cc_library_static {
}`,
expectedBazelTargets: []string{`cc_library_static(
name = "foo_static3",
copts = ["-I."],
copts = [
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
srcs = ["common.c"] + select({
"//build/bazel/platforms/arch:arm": [
@@ -911,6 +1011,94 @@ cc_library_static {
"not-for-x86_64.c",
],
}),
)`},
},
{
description: "cc_library_static arch srcs/exclude_srcs with generated files",
moduleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
depsMutators: []android.RegisterMutatorFunc{cc.RegisterDepsBp2Build},
filesystem: map[string]string{
"common.c": "",
"for-x86.c": "",
"not-for-x86.c": "",
"not-for-everything.c": "",
"dep/Android.bp": `
genrule {
name: "generated_src_other_pkg",
out: ["generated_src_other_pkg.cpp"],
cmd: "nothing to see here",
}
genrule {
name: "generated_hdr_other_pkg",
out: ["generated_hdr_other_pkg.cpp"],
cmd: "nothing to see here",
}
genrule {
name: "generated_hdr_other_pkg_x86",
out: ["generated_hdr_other_pkg_x86.cpp"],
cmd: "nothing to see here",
}`,
},
bp: soongCcLibraryStaticPreamble + `
genrule {
name: "generated_src",
out: ["generated_src.cpp"],
cmd: "nothing to see here",
}
genrule {
name: "generated_src_x86",
out: ["generated_src_x86.cpp"],
cmd: "nothing to see here",
}
genrule {
name: "generated_hdr",
out: ["generated_hdr.h"],
cmd: "nothing to see here",
}
cc_library_static {
name: "foo_static3",
srcs: ["common.c", "not-for-*.c"],
exclude_srcs: ["not-for-everything.c"],
generated_sources: ["generated_src", "generated_src_other_pkg"],
generated_headers: ["generated_hdr", "generated_hdr_other_pkg"],
arch: {
x86: {
srcs: ["for-x86.c"],
exclude_srcs: ["not-for-x86.c"],
generated_sources: ["generated_src_x86"],
generated_headers: ["generated_hdr_other_pkg_x86"],
},
},
}
`,
expectedBazelTargets: []string{`cc_library_static(
name = "foo_static3",
copts = [
"-I.",
"-I$(BINDIR)/.",
],
linkstatic = True,
srcs = [
"//dep:generated_hdr_other_pkg",
"//dep:generated_src_other_pkg",
":generated_hdr",
":generated_src",
"common.c",
] + select({
"//build/bazel/platforms/arch:x86": [
"//dep:generated_hdr_other_pkg_x86",
":generated_src_x86",
"for-x86.c",
],
"//conditions:default": ["not-for-x86.c"],
}),
)`},
},
}
@@ -933,6 +1121,7 @@ cc_library_static {
cc.RegisterCCBuildComponents(ctx)
ctx.RegisterModuleType("toolchain_library", cc.ToolchainLibraryFactory)
ctx.RegisterModuleType("cc_library_headers", cc.LibraryHeaderFactory)
ctx.RegisterModuleType("genrule", genrule.GenRuleFactory)
ctx.RegisterModuleType(testCase.moduleTypeUnderTest, testCase.moduleTypeUnderTestFactory)
for _, m := range testCase.depsMutators {