Merge "Dont write data attrs for cc lib rules" into main
This commit is contained in:
@@ -1272,6 +1272,22 @@ func InitCommonOSAndroidMultiTargetsArchModule(m Module, hod HostOrDeviceSupport
|
|||||||
m.base().commonProperties.CreateCommonOSVariant = true
|
m.base().commonProperties.CreateCommonOSVariant = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (attrs *CommonAttributes) getRequiredWithoutCycles(ctx *bottomUpMutatorContext, props *commonProperties) []string {
|
||||||
|
// Treat `required` as if it's empty if data should be skipped for this target,
|
||||||
|
// as `required` is only used for the `data` attribute at this time, and we want
|
||||||
|
// to avoid lookups of labels that won't actually be dependencies of this target.
|
||||||
|
// TODO: b/202299295 - Refactor this to use `required` dependencies, once they
|
||||||
|
// are handled other than passing to `data`.
|
||||||
|
if proptools.Bool(attrs.SkipData) {
|
||||||
|
return []string{}
|
||||||
|
}
|
||||||
|
// The required property can contain the module itself. This causes a cycle
|
||||||
|
// when generated as the 'data' label list attribute in Bazel. Remove it if
|
||||||
|
// it exists. See b/247985196.
|
||||||
|
_, requiredWithoutCycles := RemoveFromList(ctx.ModuleName(), props.Required)
|
||||||
|
return FirstUniqueStrings(requiredWithoutCycles)
|
||||||
|
}
|
||||||
|
|
||||||
func (attrs *CommonAttributes) fillCommonBp2BuildModuleAttrs(ctx *bottomUpMutatorContext,
|
func (attrs *CommonAttributes) fillCommonBp2BuildModuleAttrs(ctx *bottomUpMutatorContext,
|
||||||
enabledPropertyOverrides bazel.BoolAttribute) constraintAttributes {
|
enabledPropertyOverrides bazel.BoolAttribute) constraintAttributes {
|
||||||
|
|
||||||
@@ -1340,18 +1356,13 @@ func (attrs *CommonAttributes) fillCommonBp2BuildModuleAttrs(ctx *bottomUpMutato
|
|||||||
|
|
||||||
attrs.Applicable_licenses = bazel.MakeLabelListAttribute(BazelLabelForModuleDeps(ctx, mod.commonProperties.Licenses))
|
attrs.Applicable_licenses = bazel.MakeLabelListAttribute(BazelLabelForModuleDeps(ctx, mod.commonProperties.Licenses))
|
||||||
|
|
||||||
// The required property can contain the module itself. This causes a cycle
|
requiredWithoutCycles := attrs.getRequiredWithoutCycles(ctx, &mod.commonProperties)
|
||||||
// when generated as the 'data' label list attribute in Bazel. Remove it if
|
|
||||||
// it exists. See b/247985196.
|
|
||||||
_, requiredWithoutCycles := RemoveFromList(ctx.ModuleName(), mod.commonProperties.Required)
|
|
||||||
requiredWithoutCycles = FirstUniqueStrings(requiredWithoutCycles)
|
|
||||||
required := depsToLabelList(requiredWithoutCycles)
|
required := depsToLabelList(requiredWithoutCycles)
|
||||||
archVariantProps := mod.GetArchVariantProperties(ctx, &commonProperties{})
|
archVariantProps := mod.GetArchVariantProperties(ctx, &commonProperties{})
|
||||||
for axis, configToProps := range archVariantProps {
|
for axis, configToProps := range archVariantProps {
|
||||||
for config, _props := range configToProps {
|
for config, _props := range configToProps {
|
||||||
if archProps, ok := _props.(*commonProperties); ok {
|
if archProps, ok := _props.(*commonProperties); ok {
|
||||||
_, requiredWithoutCycles := RemoveFromList(ctx.ModuleName(), archProps.Required)
|
requiredWithoutCycles := attrs.getRequiredWithoutCycles(ctx, archProps)
|
||||||
requiredWithoutCycles = FirstUniqueStrings(requiredWithoutCycles)
|
|
||||||
required.SetSelectValue(axis, config, depsToLabelList(requiredWithoutCycles).Value)
|
required.SetSelectValue(axis, config, depsToLabelList(requiredWithoutCycles).Value)
|
||||||
if !neitherHostNorDevice {
|
if !neitherHostNorDevice {
|
||||||
if archProps.Enabled != nil {
|
if archProps.Enabled != nil {
|
||||||
@@ -1408,9 +1419,8 @@ func (attrs *CommonAttributes) fillCommonBp2BuildModuleAttrs(ctx *bottomUpMutato
|
|||||||
platformEnabledAttribute.Add(&l)
|
platformEnabledAttribute.Add(&l)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !proptools.Bool(attrs.SkipData) {
|
attrs.Data.Append(required)
|
||||||
attrs.Data.Append(required)
|
|
||||||
}
|
|
||||||
// SkipData is not an attribute of any Bazel target
|
// SkipData is not an attribute of any Bazel target
|
||||||
// Set this to nil so that it does not appear in the generated build file
|
// Set this to nil so that it does not appear in the generated build file
|
||||||
attrs.SkipData = nil
|
attrs.SkipData = nil
|
||||||
|
@@ -5251,3 +5251,57 @@ versioned_ndk_headers {
|
|||||||
}
|
}
|
||||||
runCcLibraryTestCase(t, tc)
|
runCcLibraryTestCase(t, tc)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Regression test for b/303307456.
|
||||||
|
// TODO: b/202299295 - Remove this test when cc rules have proper support
|
||||||
|
// for the `required` property
|
||||||
|
func TestCcModules_requiredProperty(t *testing.T) {
|
||||||
|
runCcLibrarySharedTestCase(t, Bp2buildTestCase{
|
||||||
|
Description: "cc modules do not use the required property",
|
||||||
|
Filesystem: map[string]string{
|
||||||
|
"foo.c": "",
|
||||||
|
"bar.c": "",
|
||||||
|
},
|
||||||
|
Blueprint: soongCcLibraryPreamble + `
|
||||||
|
cc_library {
|
||||||
|
name: "foo_both",
|
||||||
|
srcs: ["foo.c"],
|
||||||
|
include_build_directory: false,
|
||||||
|
required: ["bar"],
|
||||||
|
}
|
||||||
|
cc_library_shared {
|
||||||
|
name: "foo_shared",
|
||||||
|
srcs: ["foo.c"],
|
||||||
|
include_build_directory: false,
|
||||||
|
required: ["bar"],
|
||||||
|
}
|
||||||
|
cc_library_static {
|
||||||
|
name: "foo_static",
|
||||||
|
srcs: ["foo.c"],
|
||||||
|
include_build_directory: false,
|
||||||
|
required: ["bar"],
|
||||||
|
}
|
||||||
|
cc_library_static {
|
||||||
|
name: "bar",
|
||||||
|
srcs: ["bar.c"],
|
||||||
|
include_build_directory: false,
|
||||||
|
}`,
|
||||||
|
ExpectedBazelTargets: []string{
|
||||||
|
MakeBazelTarget("cc_library_static", "foo_both_bp2build_cc_library_static", AttrNameToString{
|
||||||
|
"srcs_c": `["foo.c"]`,
|
||||||
|
}),
|
||||||
|
MakeBazelTarget("cc_library_shared", "foo_both", AttrNameToString{
|
||||||
|
"srcs_c": `["foo.c"]`,
|
||||||
|
}),
|
||||||
|
MakeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{
|
||||||
|
"srcs_c": `["foo.c"]`,
|
||||||
|
}),
|
||||||
|
MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
|
||||||
|
"srcs_c": `["foo.c"]`,
|
||||||
|
}),
|
||||||
|
MakeBazelTarget("cc_library_static", "bar", AttrNameToString{
|
||||||
|
"srcs_c": `["bar.c"]`,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@@ -468,12 +468,16 @@ func libraryBp2Build(ctx android.Bp2buildMutatorContext, m *Module) {
|
|||||||
android.CommonAttributes{
|
android.CommonAttributes{
|
||||||
Name: m.Name() + "_bp2build_cc_library_static",
|
Name: m.Name() + "_bp2build_cc_library_static",
|
||||||
Tags: tagsForStaticVariant,
|
Tags: tagsForStaticVariant,
|
||||||
|
// TODO: b/303307456 - Remove this when data is properly supported in cc rules.
|
||||||
|
SkipData: proptools.BoolPtr(true),
|
||||||
},
|
},
|
||||||
staticTargetAttrs, staticAttrs.Enabled)
|
staticTargetAttrs, staticAttrs.Enabled)
|
||||||
ctx.CreateBazelTargetModuleWithRestrictions(sharedProps,
|
ctx.CreateBazelTargetModuleWithRestrictions(sharedProps,
|
||||||
android.CommonAttributes{
|
android.CommonAttributes{
|
||||||
Name: m.Name(),
|
Name: m.Name(),
|
||||||
Tags: tagsForSharedVariant,
|
Tags: tagsForSharedVariant,
|
||||||
|
// TODO: b/303307456 - Remove this when data is properly supported in cc rules.
|
||||||
|
SkipData: proptools.BoolPtr(true),
|
||||||
},
|
},
|
||||||
sharedTargetAttrs, sharedAttrs.Enabled)
|
sharedTargetAttrs, sharedAttrs.Enabled)
|
||||||
|
|
||||||
@@ -496,8 +500,11 @@ func createStubsBazelTargetIfNeeded(ctx android.Bp2buildMutatorContext, m *Modul
|
|||||||
Deps: baseAttributes.deps,
|
Deps: baseAttributes.deps,
|
||||||
Api_surface: proptools.StringPtr("module-libapi"),
|
Api_surface: proptools.StringPtr("module-libapi"),
|
||||||
}
|
}
|
||||||
ctx.CreateBazelTargetModule(stubSuitesProps,
|
ctx.CreateBazelTargetModule(stubSuitesProps, android.CommonAttributes{
|
||||||
android.CommonAttributes{Name: m.Name() + "_stub_libs"},
|
Name: m.Name() + "_stub_libs",
|
||||||
|
// TODO: b/303307456 - Remove this when data is properly supported in cc rules.
|
||||||
|
SkipData: proptools.BoolPtr(true),
|
||||||
|
},
|
||||||
stubSuitesAttrs)
|
stubSuitesAttrs)
|
||||||
|
|
||||||
// Add alias for the stub shared_library in @api_surfaces repository
|
// Add alias for the stub shared_library in @api_surfaces repository
|
||||||
@@ -2935,7 +2942,12 @@ func sharedOrStaticLibraryBp2Build(ctx android.Bp2buildMutatorContext, module *M
|
|||||||
|
|
||||||
tags := android.ApexAvailableTagsWithoutTestApexes(ctx, module)
|
tags := android.ApexAvailableTagsWithoutTestApexes(ctx, module)
|
||||||
|
|
||||||
ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: module.Name(), Tags: tags}, attrs)
|
ctx.CreateBazelTargetModule(props, android.CommonAttributes{
|
||||||
|
Name: module.Name(),
|
||||||
|
Tags: tags,
|
||||||
|
// TODO: b/303307456 - Remove this when data is properly supported in cc rules.
|
||||||
|
SkipData: proptools.BoolPtr(true),
|
||||||
|
}, attrs)
|
||||||
}
|
}
|
||||||
|
|
||||||
type includesAttributes struct {
|
type includesAttributes struct {
|
||||||
|
Reference in New Issue
Block a user