Merge "Use excludes from OS axis for OsAndInApex"

This commit is contained in:
Treehugger Robot
2022-11-23 17:17:19 +00:00
committed by Gerrit Code Review
4 changed files with 84 additions and 0 deletions

View File

@@ -203,6 +203,11 @@ var (
osAndInApexMap = map[string]string{ osAndInApexMap = map[string]string{
AndroidAndInApex: "//build/bazel/rules/apex:android-in_apex", AndroidAndInApex: "//build/bazel/rules/apex:android-in_apex",
AndroidAndNonApex: "//build/bazel/rules/apex:android-non_apex", AndroidAndNonApex: "//build/bazel/rules/apex:android-non_apex",
osDarwin: "//build/bazel/platforms/os:darwin",
osLinux: "//build/bazel/platforms/os:linux",
osLinuxMusl: "//build/bazel/platforms/os:linux_musl",
osLinuxBionic: "//build/bazel/platforms/os:linux_bionic",
osWindows: "//build/bazel/platforms/os:windows",
ConditionsDefaultConfigKey: ConditionsDefaultSelectKey, ConditionsDefaultConfigKey: ConditionsDefaultSelectKey,
} }

View File

@@ -843,6 +843,26 @@ func (lla *LabelListAttribute) Exclude(axis ConfigurationAxis, config string, la
// ResolveExcludes handles excludes across the various axes, ensuring that items are removed from // ResolveExcludes handles excludes across the various axes, ensuring that items are removed from
// the base value and included in default values as appropriate. // the base value and included in default values as appropriate.
func (lla *LabelListAttribute) ResolveExcludes() { func (lla *LabelListAttribute) ResolveExcludes() {
// If there are OsAndInApexAxis, we need to use
// * includes from the OS & in APEX Axis for non-Android configs for libraries that need to be
// included in non-Android OSes
// * excludes from the OS Axis for non-Android configs, to exclude libraries that should _not_
// be included in the non-Android OSes
if _, ok := lla.ConfigurableValues[OsAndInApexAxis]; ok {
inApexLabels := lla.ConfigurableValues[OsAndInApexAxis][ConditionsDefaultConfigKey]
for config, labels := range lla.ConfigurableValues[OsConfigurationAxis] {
// OsAndroid has already handled its excludes.
// We only need to copy the excludes from other arches, so if there are none, skip it.
if config == OsAndroid || len(labels.Excludes) == 0 {
continue
}
lla.ConfigurableValues[OsAndInApexAxis][config] = LabelList{
Includes: inApexLabels.Includes,
Excludes: labels.Excludes,
}
}
}
for axis, configToLabels := range lla.ConfigurableValues { for axis, configToLabels := range lla.ConfigurableValues {
baseLabels := lla.Value.deepCopy() baseLabels := lla.Value.deepCopy()
for config, val := range configToLabels { for config, val := range configToLabels {

View File

@@ -2976,6 +2976,63 @@ cc_library {
}) })
} }
func TestCcLibraryExcludesLibsHost(t *testing.T) {
runCcLibraryTestCase(t, Bp2buildTestCase{
ModuleTypeUnderTest: "cc_library",
ModuleTypeUnderTestFactory: cc.LibraryFactory,
Filesystem: map[string]string{
"bar.map.txt": "",
},
Blueprint: simpleModuleDoNotConvertBp2build("cc_library", "bazlib") + `
cc_library {
name: "quxlib",
stubs: { symbol_file: "bar.map.txt", versions: ["current"] },
bazel_module: { bp2build_available: false },
}
cc_library {
name: "barlib",
stubs: { symbol_file: "bar.map.txt", versions: ["28", "29", "current"] },
bazel_module: { bp2build_available: false },
}
cc_library {
name: "foolib",
shared_libs: ["barlib", "quxlib"],
target: {
host: {
shared_libs: ["bazlib"],
exclude_shared_libs: ["barlib"],
},
},
include_build_directory: false,
bazel_module: { bp2build_available: true },
}`,
ExpectedBazelTargets: makeCcLibraryTargets("foolib", AttrNameToString{
"implementation_dynamic_deps": `select({
"//build/bazel/platforms/os:darwin": [":bazlib"],
"//build/bazel/platforms/os:linux": [":bazlib"],
"//build/bazel/platforms/os:linux_bionic": [":bazlib"],
"//build/bazel/platforms/os:linux_musl": [":bazlib"],
"//build/bazel/platforms/os:windows": [":bazlib"],
"//conditions:default": [],
}) + select({
"//build/bazel/platforms/os:darwin": [":quxlib"],
"//build/bazel/platforms/os:linux": [":quxlib"],
"//build/bazel/platforms/os:linux_bionic": [":quxlib"],
"//build/bazel/platforms/os:linux_musl": [":quxlib"],
"//build/bazel/platforms/os:windows": [":quxlib"],
"//build/bazel/rules/apex:android-in_apex": [
":barlib_stub_libs_current",
":quxlib_stub_libs_current",
],
"//conditions:default": [
":barlib",
":quxlib",
],
})`,
}),
})
}
func TestCcLibraryEscapeLdflags(t *testing.T) { func TestCcLibraryEscapeLdflags(t *testing.T) {
runCcLibraryTestCase(t, Bp2buildTestCase{ runCcLibraryTestCase(t, Bp2buildTestCase{
ModuleTypeUnderTest: "cc_library", ModuleTypeUnderTest: "cc_library",

View File

@@ -90,6 +90,7 @@ type Bp2buildTestCase struct {
} }
func RunBp2BuildTestCase(t *testing.T, registerModuleTypes func(ctx android.RegistrationContext), tc Bp2buildTestCase) { func RunBp2BuildTestCase(t *testing.T, registerModuleTypes func(ctx android.RegistrationContext), tc Bp2buildTestCase) {
t.Helper()
bp2buildSetup := func(ctx *android.TestContext) { bp2buildSetup := func(ctx *android.TestContext) {
registerModuleTypes(ctx) registerModuleTypes(ctx)
ctx.RegisterForBazelConversion() ctx.RegisterForBazelConversion()
@@ -98,6 +99,7 @@ func RunBp2BuildTestCase(t *testing.T, registerModuleTypes func(ctx android.Regi
} }
func RunApiBp2BuildTestCase(t *testing.T, registerModuleTypes func(ctx android.RegistrationContext), tc Bp2buildTestCase) { func RunApiBp2BuildTestCase(t *testing.T, registerModuleTypes func(ctx android.RegistrationContext), tc Bp2buildTestCase) {
t.Helper()
apiBp2BuildSetup := func(ctx *android.TestContext) { apiBp2BuildSetup := func(ctx *android.TestContext) {
registerModuleTypes(ctx) registerModuleTypes(ctx)
ctx.RegisterForApiBazelConversion() ctx.RegisterForApiBazelConversion()