diff options
author | 2023-09-01 19:43:56 +0000 | |
---|---|---|
committer | 2023-09-01 21:30:29 +0000 | |
commit | ab29f57ce6ceb9d4b2fa0ebc144776887ea061e6 (patch) | |
tree | 783856048a19b040443e9a0d8d3115653d3b1ec6 | |
parent | 08e1792144fb28c41982713206cc6128735ec6fc (diff) |
Fix target_compatible_with non-determinism for proto.include_dirs
A single proto providing directory can be used by multiple soong modules. Some of these
can be
1. Host specific
2. Device specific
3. Both host and device
Since the generated proto_library can have 1:many mapping, it should
have an empty target_compatible_with. Compatiblity will be enforced at
the top-level {cc|java|python}_proto_library.
(This is a followup to aosp/2727054 which did not handle this correctly)
Test: Added a unit test
Change-Id: I09b3def70e3d043fd8ba0d1eb4ffff1910f097d1
-rw-r--r-- | android/module.go | 2 | ||||
-rw-r--r-- | android/proto.go | 5 | ||||
-rw-r--r-- | bp2build/cc_library_conversion_test.go | 38 |
3 files changed, 44 insertions, 1 deletions
diff --git a/android/module.go b/android/module.go index 19502bae8..f9ea89778 100644 --- a/android/module.go +++ b/android/module.go @@ -1371,7 +1371,7 @@ func (attrs *CommonAttributes) fillCommonBp2BuildModuleAttrs(ctx *topDownMutator for _, axis := range enabledPropertyOverrides.SortedConfigurationAxes() { configToBools := enabledPropertyOverrides.ConfigurableValues[axis] for cfg, val := range configToBools { - if axis != bazel.OsConfigurationAxis || osSupport[cfg] { + if axis != bazel.OsConfigurationAxis || osSupport[cfg] || val /*If enabled is explicitly requested via overrides */ { enabledProperty.SetSelectValue(axis, cfg, &val) } } diff --git a/android/proto.go b/android/proto.go index 7c418c693..fc21d0177 100644 --- a/android/proto.go +++ b/android/proto.go @@ -408,6 +408,11 @@ func createProtoLibraryTargetsForIncludeDirs(ctx Bp2buildMutatorContext, include // As a workarounds, delete `target_compatible_with` alwaysEnabled := bazel.BoolAttribute{} alwaysEnabled.Value = proptools.BoolPtr(true) + // Add android and linux explicitly so that fillcommonbp2buildmoduleattrs can override these configs + // When we extend b support for other os'es (darwin/windows), we should add those configs here as well + alwaysEnabled.SetSelectValue(bazel.OsConfigurationAxis, bazel.OsAndroid, proptools.BoolPtr(true)) + alwaysEnabled.SetSelectValue(bazel.OsConfigurationAxis, bazel.OsLinux, proptools.BoolPtr(true)) + ctx.CreateBazelTargetModuleWithRestrictions( bazel.BazelTargetModuleProperties{Rule_class: "proto_library"}, CommonAttributes{ diff --git a/bp2build/cc_library_conversion_test.go b/bp2build/cc_library_conversion_test.go index 02ed57a51..e50c710d2 100644 --- a/bp2build/cc_library_conversion_test.go +++ b/bp2build/cc_library_conversion_test.go @@ -5241,3 +5241,41 @@ func TestProtoLocalIncludeDirs(t *testing.T) { } runCcLibraryTestCase(t, tc) } + +// `foo_device` and `bar_host` can depend on .proto files of a specific dir, +// the dynamically generated proto_library should not have any target_compatible_with +func TestProtoLibraryForIncludeDirsIsOsAgnostic(t *testing.T) { + tc := Bp2buildTestCase{ + Description: "proto_library generated for proto.include_dirs is compatible for all axes", + ModuleTypeUnderTest: "cc_library", + ModuleTypeUnderTestFactory: cc.LibraryFactory, + Blueprint: simpleModuleDoNotConvertBp2build("cc_library", "libprotobuf-cpp-lite") + ` +cc_library { + name: "foo_device", + device_supported: true, // this is the default behavior, but added explicitly here for illustration + host_supported: false, + proto: {include_dirs: ["dir"]}, +} +cc_library { + name: "bar_host", + device_supported: false, + host_supported: true, + srcs: ["bar.proto"], + proto: {include_dirs: ["dir"]}, +} +`, + Filesystem: map[string]string{ + "dir/Android.bp": "", + "dir/dir.proto": "", + }, + Dir: "dir", // check for the generated proto_library + ExpectedBazelTargets: []string{ + MakeBazelTargetNoRestrictions("proto_library", "dir.include_dir_bp2build_generated_proto", AttrNameToString{ + "srcs": `["dir.proto"]`, + "strip_import_prefix": `""`, + "tags": `["manual"]`, + }), + }, + } + runCcLibraryTestCase(t, tc) +} |