Merge "Add variant_prepend support for all the properties in bp2build"
This commit is contained in:
@@ -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
|
||||
|
@@ -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"]`,
|
||||
}),
|
||||
},
|
||||
})
|
||||
|
@@ -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"]`,
|
||||
}),
|
||||
|
@@ -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()) {
|
||||
|
@@ -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()
|
||||
|
||||
|
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user