Support bssl hash injection for libcrypto.

Bug: 215541108
Test: Build libcrypto with Bazel and verify the hash injected, add unit
test
Change-Id: I0375307aab0b1e60a8be298d680e1e0af1ebb454

Change-Id: I9133ce398e2024fe7834a292bf2f5ba3222d630b
This commit is contained in:
Yu Liu 2022-02-01 09:54:09 -08:00
parent 47cb940902
commit 75be7b94d6
2 changed files with 44 additions and 0 deletions

View file

@ -1287,6 +1287,7 @@ func makeCcLibraryTargets(name string, attrs attrNameToString) []string {
"strip": true, "strip": true,
"stubs_symbol_file": true, "stubs_symbol_file": true,
"stubs_versions": true, "stubs_versions": true,
"inject_bssl_hash": true,
} }
sharedAttrs := attrNameToString{} sharedAttrs := attrNameToString{}
staticAttrs := 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) { func TestCcLibraryCppStdWithGnuExtensions_ConvertsToFeatureAttr(t *testing.T) {
type testCase struct { type testCase struct {
cpp_std string cpp_std string

View file

@ -386,6 +386,21 @@ func libraryBp2Build(ctx android.TopDownMutatorContext, m *Module) {
Stubs_versions: compilerAttrs.stubsVersions, 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{ staticProps := bazel.BazelTargetModuleProperties{
Rule_class: "cc_library_static", Rule_class: "cc_library_static",
Bzl_load_location: "//build/bazel/rules:cc_library_static.bzl", Bzl_load_location: "//build/bazel/rules:cc_library_static.bzl",
@ -2600,4 +2615,5 @@ type bazelCcLibrarySharedAttributes struct {
Stubs_symbol_file *string Stubs_symbol_file *string
Stubs_versions bazel.StringListAttribute Stubs_versions bazel.StringListAttribute
Inject_bssl_hash bazel.BoolAttribute
} }