bp2build: allowlist //external/libcap/...
This builds cap_names.list.h, which uses an eponymous filegroup "generate_cap_names_list.awk" in Soong, but uses the file target directly in Bazel. This also improve filegroup support for mixed builds, by issuing a cquery call _without_ arch. Filegroups in Soong don't have configurable properties, so don't generate Bazel filegroups into buildroot's config_nodes (which was x86_64 by default). The mixed_build_root now looks like this: ``` config_node(...) config_node(...) config_node(...) config_node(...) ... filegroup(name = "common", srcs = ["@//bionic/linker:linker_sources_x86", "@//bionic/libc:kernel_input_headers", "@//system/timezone/apex:com.android.tzdata-androidManifest", "@//external/libcap:generate_cap_names_list.awk", "@//bionic/linker:linker_sources_arm64", "@//bionic/linker:linker_sources", "@//bionic/libc:libc_sources_shared_arm", "@//bionic/linker:linker_sources_x86_64", "@//bionic/libc:all_kernel_uapi_headers", "@//build/bazel/examples/apex/minimal:build.bazel.examples.apex.minimal-file_contexts", "@//system/core/libcutils:android_filesystem_config_header", "@//bionic/libc:libc_sources_static", "@//bionic/linker:linker_sources_arm", "@//bionic/libc/tools:bionic-gensyscalls", "@//bionic/tools:bionic-generate-version-script", "@//bionic/libc:libc_sources_shared"], ) mixed_build_root(name = "buildroot", deps = [":x86", ":arm64", ":arm", ":common", ":x86_64"], ) ``` Test: CI Fixes: 198595323 Fixes: 198235838 Change-Id: I6df9a14da556cf358d96e6a99b514f66a2638295
This commit is contained in:
@@ -182,6 +182,7 @@ var (
|
||||
"external/jemalloc_new": Bp2BuildDefaultTrueRecursively,
|
||||
"external/libcxx": Bp2BuildDefaultTrueRecursively,
|
||||
"external/libcxxabi": Bp2BuildDefaultTrueRecursively,
|
||||
"external/libcap": Bp2BuildDefaultTrueRecursively,
|
||||
"external/scudo": Bp2BuildDefaultTrueRecursively,
|
||||
"prebuilts/clang/host/linux-x86": Bp2BuildDefaultTrueRecursively,
|
||||
}
|
||||
@@ -231,6 +232,10 @@ var (
|
||||
//external/brotli/...
|
||||
"brotli-fuzzer-corpus", // "declared output 'external/brotli/c/fuzz/73231c6592f195ffd41100b8706d1138ff6893b9' was not created by genrule"
|
||||
|
||||
// //external/libcap/...
|
||||
"libcap", // http://b/198595332, depends on _makenames, a cc_binary
|
||||
"cap_names.h", // http://b/198596102, depends on _makenames, a cc_binary
|
||||
|
||||
// Tests. Handle later.
|
||||
"libbionic_tests_headers_posix", // http://b/186024507, cc_library_static, sched.h, time.h not found
|
||||
"libjemalloc5_integrationtest",
|
||||
|
@@ -27,9 +27,9 @@ import (
|
||||
"sync"
|
||||
|
||||
"android/soong/bazel/cquery"
|
||||
"android/soong/shared"
|
||||
|
||||
"android/soong/bazel"
|
||||
"android/soong/shared"
|
||||
)
|
||||
|
||||
type cqueryRequest interface {
|
||||
@@ -490,6 +490,12 @@ config_node(name = "%s",
|
||||
arch = "%s",
|
||||
deps = [%s],
|
||||
)
|
||||
`
|
||||
|
||||
commonArchFilegroupString := `
|
||||
filegroup(name = "common",
|
||||
srcs = [%s],
|
||||
)
|
||||
`
|
||||
|
||||
configNodesSection := ""
|
||||
@@ -501,14 +507,22 @@ config_node(name = "%s",
|
||||
labelsByArch[archString] = append(labelsByArch[archString], labelString)
|
||||
}
|
||||
|
||||
configNodeLabels := []string{}
|
||||
allLabels := []string{}
|
||||
for archString, labels := range labelsByArch {
|
||||
configNodeLabels = append(configNodeLabels, fmt.Sprintf("\":%s\"", archString))
|
||||
labelsString := strings.Join(labels, ",\n ")
|
||||
configNodesSection += fmt.Sprintf(configNodeFormatString, archString, archString, labelsString)
|
||||
if archString == "common" {
|
||||
// arch-less labels (e.g. filegroups) don't need a config_node
|
||||
allLabels = append(allLabels, "\":common\"")
|
||||
labelsString := strings.Join(labels, ",\n ")
|
||||
configNodesSection += fmt.Sprintf(commonArchFilegroupString, labelsString)
|
||||
} else {
|
||||
// Create a config_node, and add the config_node's label to allLabels
|
||||
allLabels = append(allLabels, fmt.Sprintf("\":%s\"", archString))
|
||||
labelsString := strings.Join(labels, ",\n ")
|
||||
configNodesSection += fmt.Sprintf(configNodeFormatString, archString, archString, labelsString)
|
||||
}
|
||||
}
|
||||
|
||||
return []byte(fmt.Sprintf(formatString, configNodesSection, strings.Join(configNodeLabels, ",\n ")))
|
||||
return []byte(fmt.Sprintf(formatString, configNodesSection, strings.Join(allLabels, ",\n ")))
|
||||
}
|
||||
|
||||
func indent(original string) string {
|
||||
@@ -573,6 +587,12 @@ def %s(target):
|
||||
%s
|
||||
|
||||
def get_arch(target):
|
||||
# TODO(b/199363072): filegroups and file targets aren't associated with any
|
||||
# specific platform architecture in mixed builds. This is consistent with how
|
||||
# Soong treats filegroups, but it may not be the case with manually-written
|
||||
# filegroup BUILD targets.
|
||||
if target.kind in ["filegroup", ""]:
|
||||
return "common"
|
||||
buildoptions = build_options(target)
|
||||
platforms = build_options(target)["//command_line_option:platforms"]
|
||||
if len(platforms) != 1:
|
||||
@@ -671,11 +691,12 @@ func (context *bazelContext) InvokeBazel() error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
buildrootLabel := "@soong_injection//mixed_builds:buildroot"
|
||||
cqueryOutput, cqueryErr, err = context.issueBazelCommand(
|
||||
context.paths,
|
||||
bazel.CqueryBuildRootRunName,
|
||||
bazelCommand{"cquery", fmt.Sprintf("kind(rule, deps(%s))", buildrootLabel)},
|
||||
bazelCommand{"cquery", fmt.Sprintf("deps(%s)", buildrootLabel)},
|
||||
"--output=starlark",
|
||||
"--starlark:file="+absolutePath(cqueryFileRelpath))
|
||||
err = ioutil.WriteFile(filepath.Join(soongInjectionPath, "cquery.out"),
|
||||
|
@@ -11,7 +11,7 @@ func TestRequestResultsAfterInvokeBazel(t *testing.T) {
|
||||
label := "//foo:bar"
|
||||
arch := Arm64
|
||||
bazelContext, _ := testBazelContext(t, map[bazelCommand]string{
|
||||
bazelCommand{command: "cquery", expression: "kind(rule, deps(@soong_injection//mixed_builds:buildroot))"}: `//foo:bar|arm64>>out/foo/bar.txt`,
|
||||
bazelCommand{command: "cquery", expression: "deps(@soong_injection//mixed_builds:buildroot)"}: `//foo:bar|arm64>>out/foo/bar.txt`,
|
||||
})
|
||||
g, ok := bazelContext.GetOutputFiles(label, arch)
|
||||
if ok {
|
||||
|
@@ -118,7 +118,7 @@ func (fg *fileGroup) GenerateBazelBuildActions(ctx ModuleContext) bool {
|
||||
}
|
||||
|
||||
bazelCtx := ctx.Config().BazelContext
|
||||
filePaths, ok := bazelCtx.GetOutputFiles(fg.GetBazelLabel(ctx, fg), ctx.Arch().ArchType)
|
||||
filePaths, ok := bazelCtx.GetOutputFiles(fg.GetBazelLabel(ctx, fg), Common)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
|
Reference in New Issue
Block a user