Loading android/module.go +32 −0 Original line number Diff line number Diff line Loading @@ -1418,10 +1418,42 @@ func (attrs *CommonAttributes) fillCommonBp2BuildModuleAttrs(ctx *topDownMutator moduleEnableConstraints := bazel.LabelListAttribute{} moduleEnableConstraints.Append(platformEnabledAttribute) moduleEnableConstraints.Append(productConfigEnabledAttribute) addCompatibilityConstraintForCompileMultilib(ctx, &moduleEnableConstraints) return constraintAttributes{Target_compatible_with: moduleEnableConstraints} } var ( incompatible = bazel.LabelList{[]bazel.Label{{Label: "@platforms//:incompatible"}}, nil} ) // If compile_mulitilib is set to // 1. 32: Add an incompatibility constraint for non-32 arches // 1. 64: Add an incompatibility constraint for non-64 arches func addCompatibilityConstraintForCompileMultilib(ctx *topDownMutatorContext, enabled *bazel.LabelListAttribute) { mod := ctx.Module().base() multilib, _ := decodeMultilib(mod, mod.commonProperties.CompileOS, ctx.Config().IgnorePrefer32OnDevice()) switch multilib { case "32": // Add an incompatibility constraint for all known 64-bit arches enabled.SetSelectValue(bazel.ArchConfigurationAxis, "arm64", incompatible) enabled.SetSelectValue(bazel.ArchConfigurationAxis, "x86_64", incompatible) enabled.SetSelectValue(bazel.ArchConfigurationAxis, "riscv64", incompatible) case "64": // Add an incompatibility constraint for all known 32-bit arches enabled.SetSelectValue(bazel.ArchConfigurationAxis, "arm", incompatible) enabled.SetSelectValue(bazel.ArchConfigurationAxis, "x86", incompatible) case "both": // Do nothing: "both" is trivially compatible with 32-bit and 64-bit // The top level rule (e.g. apex/partition) will be responsible for building this module in both variants via an // outgoing_transition. default: // e.g. first, common // TODO - b/299135307: Add bp2build support for these properties. } } // Check product variables for `enabled: true` flag override. // Returns a list of the constraint_value targets who enable this override. func productVariableConfigEnableAttribute(ctx *topDownMutatorContext) bazel.LabelListAttribute { Loading bp2build/cc_library_conversion_test.go +55 −0 Original line number Diff line number Diff line Loading @@ -5279,3 +5279,58 @@ cc_library { } runCcLibraryTestCase(t, tc) } func TestCcCompileMultilibConversion(t *testing.T) { tc := Bp2buildTestCase{ Description: "cc_library with compile_multilib", ModuleTypeUnderTest: "cc_library", ModuleTypeUnderTestFactory: cc.LibraryFactory, Blueprint: ` cc_library { name: "lib32", compile_multilib: "32", } cc_library { name: "lib64", compile_multilib: "64", } `, ExpectedBazelTargets: []string{ MakeBazelTargetNoRestrictions("cc_library_shared", "lib32", AttrNameToString{ "local_includes": `["."]`, "target_compatible_with": `["//build/bazel/platforms/os:android"] + select({ "//build/bazel/platforms/arch:arm64": ["@platforms//:incompatible"], "//build/bazel/platforms/arch:riscv64": ["@platforms//:incompatible"], "//build/bazel/platforms/arch:x86_64": ["@platforms//:incompatible"], "//conditions:default": [], })`, }), MakeBazelTargetNoRestrictions("cc_library_static", "lib32_bp2build_cc_library_static", AttrNameToString{ "local_includes": `["."]`, "target_compatible_with": `["//build/bazel/platforms/os:android"] + select({ "//build/bazel/platforms/arch:arm64": ["@platforms//:incompatible"], "//build/bazel/platforms/arch:riscv64": ["@platforms//:incompatible"], "//build/bazel/platforms/arch:x86_64": ["@platforms//:incompatible"], "//conditions:default": [], })`, }), MakeBazelTargetNoRestrictions("cc_library_shared", "lib64", AttrNameToString{ "local_includes": `["."]`, "target_compatible_with": `["//build/bazel/platforms/os:android"] + select({ "//build/bazel/platforms/arch:arm": ["@platforms//:incompatible"], "//build/bazel/platforms/arch:x86": ["@platforms//:incompatible"], "//conditions:default": [], })`, }), MakeBazelTargetNoRestrictions("cc_library_static", "lib64_bp2build_cc_library_static", AttrNameToString{ "local_includes": `["."]`, "target_compatible_with": `["//build/bazel/platforms/os:android"] + select({ "//build/bazel/platforms/arch:arm": ["@platforms//:incompatible"], "//build/bazel/platforms/arch:x86": ["@platforms//:incompatible"], "//conditions:default": [], })`, }), }, } runCcLibraryTestCase(t, tc) } Loading
android/module.go +32 −0 Original line number Diff line number Diff line Loading @@ -1418,10 +1418,42 @@ func (attrs *CommonAttributes) fillCommonBp2BuildModuleAttrs(ctx *topDownMutator moduleEnableConstraints := bazel.LabelListAttribute{} moduleEnableConstraints.Append(platformEnabledAttribute) moduleEnableConstraints.Append(productConfigEnabledAttribute) addCompatibilityConstraintForCompileMultilib(ctx, &moduleEnableConstraints) return constraintAttributes{Target_compatible_with: moduleEnableConstraints} } var ( incompatible = bazel.LabelList{[]bazel.Label{{Label: "@platforms//:incompatible"}}, nil} ) // If compile_mulitilib is set to // 1. 32: Add an incompatibility constraint for non-32 arches // 1. 64: Add an incompatibility constraint for non-64 arches func addCompatibilityConstraintForCompileMultilib(ctx *topDownMutatorContext, enabled *bazel.LabelListAttribute) { mod := ctx.Module().base() multilib, _ := decodeMultilib(mod, mod.commonProperties.CompileOS, ctx.Config().IgnorePrefer32OnDevice()) switch multilib { case "32": // Add an incompatibility constraint for all known 64-bit arches enabled.SetSelectValue(bazel.ArchConfigurationAxis, "arm64", incompatible) enabled.SetSelectValue(bazel.ArchConfigurationAxis, "x86_64", incompatible) enabled.SetSelectValue(bazel.ArchConfigurationAxis, "riscv64", incompatible) case "64": // Add an incompatibility constraint for all known 32-bit arches enabled.SetSelectValue(bazel.ArchConfigurationAxis, "arm", incompatible) enabled.SetSelectValue(bazel.ArchConfigurationAxis, "x86", incompatible) case "both": // Do nothing: "both" is trivially compatible with 32-bit and 64-bit // The top level rule (e.g. apex/partition) will be responsible for building this module in both variants via an // outgoing_transition. default: // e.g. first, common // TODO - b/299135307: Add bp2build support for these properties. } } // Check product variables for `enabled: true` flag override. // Returns a list of the constraint_value targets who enable this override. func productVariableConfigEnableAttribute(ctx *topDownMutatorContext) bazel.LabelListAttribute { Loading
bp2build/cc_library_conversion_test.go +55 −0 Original line number Diff line number Diff line Loading @@ -5279,3 +5279,58 @@ cc_library { } runCcLibraryTestCase(t, tc) } func TestCcCompileMultilibConversion(t *testing.T) { tc := Bp2buildTestCase{ Description: "cc_library with compile_multilib", ModuleTypeUnderTest: "cc_library", ModuleTypeUnderTestFactory: cc.LibraryFactory, Blueprint: ` cc_library { name: "lib32", compile_multilib: "32", } cc_library { name: "lib64", compile_multilib: "64", } `, ExpectedBazelTargets: []string{ MakeBazelTargetNoRestrictions("cc_library_shared", "lib32", AttrNameToString{ "local_includes": `["."]`, "target_compatible_with": `["//build/bazel/platforms/os:android"] + select({ "//build/bazel/platforms/arch:arm64": ["@platforms//:incompatible"], "//build/bazel/platforms/arch:riscv64": ["@platforms//:incompatible"], "//build/bazel/platforms/arch:x86_64": ["@platforms//:incompatible"], "//conditions:default": [], })`, }), MakeBazelTargetNoRestrictions("cc_library_static", "lib32_bp2build_cc_library_static", AttrNameToString{ "local_includes": `["."]`, "target_compatible_with": `["//build/bazel/platforms/os:android"] + select({ "//build/bazel/platforms/arch:arm64": ["@platforms//:incompatible"], "//build/bazel/platforms/arch:riscv64": ["@platforms//:incompatible"], "//build/bazel/platforms/arch:x86_64": ["@platforms//:incompatible"], "//conditions:default": [], })`, }), MakeBazelTargetNoRestrictions("cc_library_shared", "lib64", AttrNameToString{ "local_includes": `["."]`, "target_compatible_with": `["//build/bazel/platforms/os:android"] + select({ "//build/bazel/platforms/arch:arm": ["@platforms//:incompatible"], "//build/bazel/platforms/arch:x86": ["@platforms//:incompatible"], "//conditions:default": [], })`, }), MakeBazelTargetNoRestrictions("cc_library_static", "lib64_bp2build_cc_library_static", AttrNameToString{ "local_includes": `["."]`, "target_compatible_with": `["//build/bazel/platforms/os:android"] + select({ "//build/bazel/platforms/arch:arm": ["@platforms//:incompatible"], "//build/bazel/platforms/arch:x86": ["@platforms//:incompatible"], "//conditions:default": [], })`, }), }, } runCcLibraryTestCase(t, tc) }