Merge "Add variant_prepend support for all the properties in bp2build"

This commit is contained in:
Zi Wang
2023-01-10 05:54:29 +00:00
committed by Gerrit Code Review
6 changed files with 29 additions and 11 deletions

View File

@@ -674,6 +674,11 @@ type LabelListAttribute struct {
// specific select statements where an empty list for a non-default select
// key has a meaning.
EmitEmptyList bool
// If a property has struct tag "variant_prepend", this value should
// be set to True, so that when bp2build generates BUILD.bazel, variant
// properties(select ...) come before general properties.
Prepend bool
}
type configurableLabelLists map[ConfigurationAxis]labelListSelectValues

View File

@@ -186,6 +186,8 @@ func TestCcApiHeaders(t *testing.T) {
})
}
// header_libs has "variant_prepend" tag. In bp2build output,
// variant info(select) should go before general info.
func TestCcLibraryHeadersOsSpecificHeader(t *testing.T) {
runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
Description: "cc_library_headers test with os-specific header_libs props",
@@ -247,14 +249,14 @@ cc_library_headers {
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
"deps": `[":base-lib"] + select({
"deps": `select({
"//build/bazel/platforms/os:android": [":android-lib"],
"//build/bazel/platforms/os:darwin": [":darwin-lib"],
"//build/bazel/platforms/os:linux_bionic": [":linux_bionic-lib"],
"//build/bazel/platforms/os:linux_glibc": [":linux-lib"],
"//build/bazel/platforms/os:windows": [":windows-lib"],
"//conditions:default": [],
})`,
}) + [":base-lib"]`,
}),
},
})

View File

@@ -1003,6 +1003,8 @@ cc_library_static {
})
}
// generated_headers has "variant_prepend" tag. In bp2build output,
// variant info(select) should go before general info.
func TestCcLibraryStaticArchSrcsExcludeSrcsGeneratedFiles(t *testing.T) {
runCcLibraryStaticTestCase(t, Bp2buildTestCase{
Description: "cc_library_static arch srcs/exclude_srcs with generated files",
@@ -1066,13 +1068,13 @@ cc_library_static {
"//build/bazel/platforms/os:android": [":generated_src_android"],
"//conditions:default": [],
})`,
"hdrs": `["//dep:generated_hdr_other_pkg"] + select({
"//build/bazel/platforms/arch:x86": ["//dep:generated_hdr_other_pkg_x86"],
"//conditions:default": [],
}) + select({
"hdrs": `select({
"//build/bazel/platforms/os:android": ["//dep:generated_hdr_other_pkg_android"],
"//conditions:default": [],
})`,
}) + select({
"//build/bazel/platforms/arch:x86": ["//dep:generated_hdr_other_pkg_x86"],
"//conditions:default": [],
}) + ["//dep:generated_hdr_other_pkg"]`,
"local_includes": `["."]`,
"export_absolute_includes": `["dep"]`,
}),

View File

@@ -106,8 +106,9 @@ func getBoolValue(boolAttr bazel.BoolAttribute) (reflect.Value, []selects) {
return value, []selects{ret}
}
func getLabelListValues(list bazel.LabelListAttribute) (reflect.Value, []selects) {
func getLabelListValues(list bazel.LabelListAttribute) (reflect.Value, []selects, bool) {
value := reflect.ValueOf(list.Value.Includes)
prepend := list.Prepend
var ret []selects
for _, axis := range list.SortedConfigurationAxes() {
configToLabels := list.ConfigurableValues[axis]
@@ -133,7 +134,7 @@ func getLabelListValues(list bazel.LabelListAttribute) (reflect.Value, []selects
}
}
return value, ret
return value, ret, prepend
}
func labelListSelectValue(selectKey string, list bazel.LabelList, emitEmptyList bool) (bool, reflect.Value) {
@@ -173,7 +174,7 @@ func prettyPrintAttribute(v bazel.Attribute, indent int) (string, error) {
value, configurableAttrs, prepend = getStringListValues(list)
defaultSelectValue = &emptyBazelList
case bazel.LabelListAttribute:
value, configurableAttrs = getLabelListValues(list)
value, configurableAttrs, prepend = getLabelListValues(list)
emitZeroValues = list.EmitEmptyList
defaultSelectValue = &emptyBazelList
if list.ForceSpecifyEmptyList && (!value.IsNil() || list.HasConfigurableValues()) {

View File

@@ -804,6 +804,12 @@ func bp2BuildParseBaseProps(ctx android.Bp2buildMutatorContext, module *Module)
(&linkerAttrs).wholeArchiveDeps.Add(bp2buildCcSysprop(ctx, module.Name(), module.Properties.Min_sdk_version, compilerAttrs.syspropSrcs))
}
linkerAttrs.wholeArchiveDeps.Prepend = true
linkerAttrs.deps.Prepend = true
compilerAttrs.localIncludes.Prepend = true
compilerAttrs.absoluteIncludes.Prepend = true
compilerAttrs.hdrs.Prepend = true
features := compilerAttrs.features.Clone().Append(linkerAttrs.features).Append(bp2buildSanitizerFeatures(ctx, module))
features.DeduplicateAxesFromBase()

View File

@@ -78,7 +78,7 @@ type ObjectLinkerProperties struct {
Static_libs []string `android:"arch_variant,variant_prepend"`
// list of shared library modules should only provide headers for this module.
Shared_libs []string `android:"arch_variant"`
Shared_libs []string `android:"arch_variant,variant_prepend"`
// list of modules that should only provide headers for this module.
Header_libs []string `android:"arch_variant,variant_prepend"`
@@ -178,6 +178,8 @@ func objectBp2Build(ctx android.TopDownMutatorContext, m *Module) {
deps.SetSelectValue(axis, config, android.BazelLabelForModuleDeps(ctx, objectLinkerProps.Static_libs))
deps.SetSelectValue(axis, config, android.BazelLabelForModuleDeps(ctx, objectLinkerProps.Shared_libs))
deps.SetSelectValue(axis, config, android.BazelLabelForModuleDeps(ctx, objectLinkerProps.Header_libs))
// static_libs, shared_libs, and header_libs have variant_prepend tag
deps.Prepend = true
}
}
}