From 39b6cc53369a6ec132b58d99514cd7a2ea499efd Mon Sep 17 00:00:00 2001 From: Spandan Das Date: Wed, 12 Apr 2023 19:05:49 +0000 Subject: [PATCH] Ignore test apexes from bp2build generated tags Soong does not enforce apex_available on the contents of test apex. To prevent special-casing test apexes in the apex validation aspect in Bazel, drop the test apexes from the tags altogether. ( The core problem I am trying to solve is making sure that stub libraries in Bazel have a single apex available. apex validation happens to be a nice side benefit) Bug: 277651159 Test: go test ./bp2build Change-Id: Ibb3cfedb5c0f2cda0464bf3758c70b67cb5885d1 --- android/mutator.go | 7 +++++++ android/proto.go | 2 +- cc/binary.go | 2 +- cc/bp2build.go | 4 ++-- cc/library_headers.go | 2 +- cc/object.go | 2 +- cc/prebuilt.go | 8 ++++---- cc/proto.go | 2 +- cc/sysprop.go | 2 +- genrule/genrule.go | 2 +- java/java.go | 2 +- 11 files changed, 21 insertions(+), 14 deletions(-) diff --git a/android/mutator.go b/android/mutator.go index c0040b7b9..013fa77cf 100644 --- a/android/mutator.go +++ b/android/mutator.go @@ -800,6 +800,13 @@ func ConvertApexAvailableToTags(apexAvailable []string) []string { return result } +// ConvertApexAvailableToTagsWithoutTestApexes converts a list of apex names to a list of bazel tags +// This function drops any test apexes from the input. +func ConvertApexAvailableToTagsWithoutTestApexes(ctx BaseModuleContext, apexAvailable []string) []string { + noTestApexes := removeTestApexes(ctx, apexAvailable) + return ConvertApexAvailableToTags(noTestApexes) +} + func (t *topDownMutatorContext) createBazelTargetModule( bazelProps bazel.BazelTargetModuleProperties, commonAttrs CommonAttributes, diff --git a/android/proto.go b/android/proto.go index 09e50c8c3..cebbd59cd 100644 --- a/android/proto.go +++ b/android/proto.go @@ -234,7 +234,7 @@ func Bp2buildProtoProperties(ctx Bp2buildMutatorContext, m *ModuleBase, srcs baz } } - tags := ApexAvailableTags(ctx.Module()) + tags := ApexAvailableTagsWithoutTestApexes(ctx.(TopDownMutatorContext), ctx.Module()) ctx.CreateBazelTargetModule( bazel.BazelTargetModuleProperties{Rule_class: "proto_library"}, diff --git a/cc/binary.go b/cc/binary.go index 097f82252..98b9923ee 100644 --- a/cc/binary.go +++ b/cc/binary.go @@ -661,7 +661,7 @@ func binaryBp2build(ctx android.TopDownMutatorContext, m *Module) { // shared with cc_test binaryAttrs := binaryBp2buildAttrs(ctx, m) - tags := android.ApexAvailableTags(m) + tags := android.ApexAvailableTagsWithoutTestApexes(ctx, m) ctx.CreateBazelTargetModule(bazel.BazelTargetModuleProperties{ Rule_class: "cc_binary", Bzl_load_location: "//build/bazel/rules/cc:cc_binary.bzl", diff --git a/cc/bp2build.go b/cc/bp2build.go index ad9d7021d..820e97fa2 100644 --- a/cc/bp2build.go +++ b/cc/bp2build.go @@ -270,7 +270,7 @@ func bp2buildParseStaticOrSharedProps(ctx android.BazelConversionPathContext, mo attrs.Srcs_c = partitionedSrcs[cSrcPartition] attrs.Srcs_as = partitionedSrcs[asSrcPartition] - attrs.Apex_available = android.ConvertApexAvailableToTags(apexAvailable) + attrs.Apex_available = android.ConvertApexAvailableToTagsWithoutTestApexes(ctx.(android.TopDownMutatorContext), apexAvailable) attrs.Features.Append(convertHiddenVisibilityToFeatureStaticOrShared(ctx, module, isStatic)) @@ -923,7 +923,7 @@ func bp2buildCcAidlLibrary( return false }) - apexAvailableTags := android.ApexAvailableTags(ctx.Module()) + apexAvailableTags := android.ApexAvailableTagsWithoutTestApexes(ctx.(android.TopDownMutatorContext), ctx.Module()) sdkAttrs := bp2BuildParseSdkAttributes(m) if !aidlSrcs.IsEmpty() { diff --git a/cc/library_headers.go b/cc/library_headers.go index 1dee72679..ce9c4aacf 100644 --- a/cc/library_headers.go +++ b/cc/library_headers.go @@ -151,7 +151,7 @@ func libraryHeadersBp2Build(ctx android.TopDownMutatorContext, module *Module) { Bzl_load_location: "//build/bazel/rules/cc:cc_library_headers.bzl", } - tags := android.ApexAvailableTags(module) + tags := android.ApexAvailableTagsWithoutTestApexes(ctx, module) ctx.CreateBazelTargetModule(props, android.CommonAttributes{ Name: module.Name(), diff --git a/cc/object.go b/cc/object.go index d65cdea74..5d6187233 100644 --- a/cc/object.go +++ b/cc/object.go @@ -226,7 +226,7 @@ func objectBp2Build(ctx android.TopDownMutatorContext, m *Module) { Bzl_load_location: "//build/bazel/rules/cc:cc_object.bzl", } - tags := android.ApexAvailableTags(m) + tags := android.ApexAvailableTagsWithoutTestApexes(ctx, m) ctx.CreateBazelTargetModule(props, android.CommonAttributes{ Name: m.Name(), diff --git a/cc/prebuilt.go b/cc/prebuilt.go index 0b5841ef0..44cd0d73f 100644 --- a/cc/prebuilt.go +++ b/cc/prebuilt.go @@ -389,7 +389,7 @@ func prebuiltLibraryStaticBp2Build(ctx android.TopDownMutatorContext, module *Mo name += "_bp2build_cc_library_static" } - tags := android.ApexAvailableTags(module) + tags := android.ApexAvailableTagsWithoutTestApexes(ctx, module) ctx.CreateBazelTargetModuleWithRestrictions(props, android.CommonAttributes{Name: name, Tags: tags}, attrs, prebuiltAttrs.Enabled) _true := true @@ -420,7 +420,7 @@ func prebuiltLibrarySharedBp2Build(ctx android.TopDownMutatorContext, module *Mo } name := android.RemoveOptionalPrebuiltPrefix(module.Name()) - tags := android.ApexAvailableTags(module) + tags := android.ApexAvailableTagsWithoutTestApexes(ctx, module) ctx.CreateBazelTargetModuleWithRestrictions(props, android.CommonAttributes{Name: name, Tags: tags}, attrs, prebuiltAttrs.Enabled) } @@ -650,7 +650,7 @@ func prebuiltObjectBp2Build(ctx android.TopDownMutatorContext, module *Module) { } name := android.RemoveOptionalPrebuiltPrefix(module.Name()) - tags := android.ApexAvailableTags(module) + tags := android.ApexAvailableTagsWithoutTestApexes(ctx, module) ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: name, Tags: tags}, attrs) } @@ -813,7 +813,7 @@ func prebuiltBinaryBp2Build(ctx android.TopDownMutatorContext, module *Module) { } name := android.RemoveOptionalPrebuiltPrefix(module.Name()) - tags := android.ApexAvailableTags(module) + tags := android.ApexAvailableTagsWithoutTestApexes(ctx, module) ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: name, Tags: tags}, attrs) } diff --git a/cc/proto.go b/cc/proto.go index 97470e5ea..5d9aef60f 100644 --- a/cc/proto.go +++ b/cc/proto.go @@ -207,7 +207,7 @@ func bp2buildProto(ctx android.Bp2buildMutatorContext, m *Module, protoSrcs baze protoAttrs.Min_sdk_version = m.Properties.Min_sdk_version name := m.Name() + suffix - tags := android.ApexAvailableTags(m) + tags := android.ApexAvailableTagsWithoutTestApexes(ctx.(android.TopDownMutatorContext), m) ctx.CreateBazelTargetModule( bazel.BazelTargetModuleProperties{ Rule_class: rule_class, diff --git a/cc/sysprop.go b/cc/sysprop.go index 0df290afa..7ddd4760e 100644 --- a/cc/sysprop.go +++ b/cc/sysprop.go @@ -38,7 +38,7 @@ type SyspropLibraryLabels struct { } func Bp2buildSysprop(ctx android.Bp2buildMutatorContext, labels SyspropLibraryLabels, srcs bazel.LabelListAttribute, minSdkVersion *string) { - apexAvailableTags := android.ApexAvailableTags(ctx.Module()) + apexAvailableTags := android.ApexAvailableTagsWithoutTestApexes(ctx.(android.TopDownMutatorContext), ctx.Module()) ctx.CreateBazelTargetModule( bazel.BazelTargetModuleProperties{ Rule_class: "sysprop_library", diff --git a/genrule/genrule.go b/genrule/genrule.go index f5da50ef3..00adb7025 100644 --- a/genrule/genrule.go +++ b/genrule/genrule.go @@ -940,7 +940,7 @@ func (m *Module) ConvertWithBp2build(ctx android.TopDownMutatorContext) { } } - tags := android.ApexAvailableTags(m) + tags := android.ApexAvailableTagsWithoutTestApexes(ctx, m) if ctx.ModuleType() == "gensrcs" { // The Output_extension prop is not in an immediately accessible field diff --git a/java/java.go b/java/java.go index fe4df7520..0da73281b 100644 --- a/java/java.go +++ b/java/java.go @@ -2839,7 +2839,7 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext) return android.IsConvertedToAidlLibrary(ctx, src.OriginalModuleName) }) - apexAvailableTags := android.ApexAvailableTags(ctx.Module()) + apexAvailableTags := android.ApexAvailableTagsWithoutTestApexes(ctx, ctx.Module()) if !aidlSrcs.IsEmpty() { aidlLibName := m.Name() + "_aidl_library"