diff options
| author | 2022-11-23 09:42:05 -0500 | |
|---|---|---|
| committer | 2022-11-23 10:01:30 -0500 | |
| commit | ffc17e4edb9bdb32a4119b912be30503e54893cc (patch) | |
| tree | cd3e632c008d3fa68860c73cdb2daa8538f58a30 | |
| parent | ba36441424871f8f930f6be84cfb6560876bf0cd (diff) | |
Use excludes from OS axis for OsAndInApex
The axis for OS and in APEX was previously ignoring the excludes from
OS, which would result in excludes for non-Android OSes being
incorrectly ignored.
Test: go test Soong tests
Test: b build //hardware/libhardware:all
Bug: 260131489
Change-Id: Ie77f763bea0f473ac69a0c6b6bc3216e7359ad12
| -rw-r--r-- | bazel/configurability.go | 5 | ||||
| -rw-r--r-- | bazel/properties.go | 20 | ||||
| -rw-r--r-- | bp2build/cc_library_conversion_test.go | 57 | ||||
| -rw-r--r-- | bp2build/testing.go | 2 |
4 files changed, 84 insertions, 0 deletions
diff --git a/bazel/configurability.go b/bazel/configurability.go index a93aa000a..3f4cc735f 100644 --- a/bazel/configurability.go +++ b/bazel/configurability.go @@ -203,6 +203,11 @@ var ( osAndInApexMap = map[string]string{ AndroidAndInApex: "//build/bazel/rules/apex:android-in_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, } diff --git a/bazel/properties.go b/bazel/properties.go index 823cda8b2..ee9609aa3 100644 --- a/bazel/properties.go +++ b/bazel/properties.go @@ -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 // the base value and included in default values as appropriate. 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 { baseLabels := lla.Value.deepCopy() for config, val := range configToLabels { diff --git a/bp2build/cc_library_conversion_test.go b/bp2build/cc_library_conversion_test.go index 4c86374b5..61acf6833 100644 --- a/bp2build/cc_library_conversion_test.go +++ b/bp2build/cc_library_conversion_test.go @@ -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) { runCcLibraryTestCase(t, Bp2buildTestCase{ ModuleTypeUnderTest: "cc_library", diff --git a/bp2build/testing.go b/bp2build/testing.go index 37508047e..0f1a8b237 100644 --- a/bp2build/testing.go +++ b/bp2build/testing.go @@ -90,6 +90,7 @@ type Bp2buildTestCase struct { } func RunBp2BuildTestCase(t *testing.T, registerModuleTypes func(ctx android.RegistrationContext), tc Bp2buildTestCase) { + t.Helper() bp2buildSetup := func(ctx *android.TestContext) { registerModuleTypes(ctx) 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) { + t.Helper() apiBp2BuildSetup := func(ctx *android.TestContext) { registerModuleTypes(ctx) ctx.RegisterForApiBazelConversion() |