Merge "Fix target_compatible_with non-determinism for proto.include_dirs" into main

This commit is contained in:
Spandan Das
2023-09-05 16:38:42 +00:00
committed by Gerrit Code Review
3 changed files with 44 additions and 1 deletions

View File

@@ -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)
}
}

View File

@@ -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{

View File

@@ -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)
}