diff --git a/bp2build/cc_library_conversion_test.go b/bp2build/cc_library_conversion_test.go index ee1978320..4c4953d70 100644 --- a/bp2build/cc_library_conversion_test.go +++ b/bp2build/cc_library_conversion_test.go @@ -1287,6 +1287,7 @@ func makeCcLibraryTargets(name string, attrs attrNameToString) []string { "strip": true, "stubs_symbol_file": true, "stubs_versions": true, + "inject_bssl_hash": true, } sharedAttrs := attrNameToString{} staticAttrs := attrNameToString{} @@ -1822,6 +1823,33 @@ cc_library { ) } +func TestLibcryptoHashInjection(t *testing.T) { + runCcLibraryTestCase(t, bp2buildTestCase{ + description: "cc_library - libcrypto hash injection", + moduleTypeUnderTest: "cc_library", + moduleTypeUnderTestFactory: cc.LibraryFactory, + filesystem: map[string]string{}, + blueprint: soongCcLibraryPreamble + ` +cc_library { + name: "libcrypto", + target: { + android: { + inject_bssl_hash: true, + }, + }, + include_build_directory: false, +} +`, + expectedBazelTargets: makeCcLibraryTargets("libcrypto", attrNameToString{ + "inject_bssl_hash": `select({ + "//build/bazel/platforms/os:android": True, + "//conditions:default": None, + })`, + }), + }, + ) +} + func TestCcLibraryCppStdWithGnuExtensions_ConvertsToFeatureAttr(t *testing.T) { type testCase struct { cpp_std string diff --git a/cc/library.go b/cc/library.go index cefbf6c44..f6de6ca46 100644 --- a/cc/library.go +++ b/cc/library.go @@ -386,6 +386,21 @@ func libraryBp2Build(ctx android.TopDownMutatorContext, m *Module) { Stubs_versions: compilerAttrs.stubsVersions, } + for axis, configToProps := range m.GetArchVariantProperties(ctx, &LibraryProperties{}) { + for config, props := range configToProps { + if props, ok := props.(*LibraryProperties); ok { + if props.Inject_bssl_hash != nil { + // This is an edge case applies only to libcrypto + if m.Name() == "libcrypto" { + sharedTargetAttrs.Inject_bssl_hash.SetSelectValue(axis, config, props.Inject_bssl_hash) + } else { + ctx.PropertyErrorf("inject_bssl_hash", "only applies to libcrypto") + } + } + } + } + } + staticProps := bazel.BazelTargetModuleProperties{ Rule_class: "cc_library_static", Bzl_load_location: "//build/bazel/rules:cc_library_static.bzl", @@ -2600,4 +2615,5 @@ type bazelCcLibrarySharedAttributes struct { Stubs_symbol_file *string Stubs_versions bazel.StringListAttribute + Inject_bssl_hash bazel.BoolAttribute }