From fbb486fc7ab121cacdb4251b010215e445fe01e4 Mon Sep 17 00:00:00 2001 From: Martin Stjernholm Date: Fri, 21 Aug 2020 18:43:51 +0100 Subject: [PATCH] Propagate sanitize.never flag in SDK snapshots. This is necessary to not get dependencies on libclang_rt sanitizer libs for the CRT objects which lead to cyclic dependencies in sanitizer builds. Test: `lunch aosp_blueline_hwasan-userdebug && m nothing` in a tree that has the prebuilts created and unzipped from `build/soong/scripts/build-aml-prebuilts.sh runtime-module-{sdk,host-exports}` Bug: 151303681 Change-Id: I3f848a084280bdc3ade4b74df03e981d8cc61222 --- cc/library_sdk_member.go | 12 ++++++++++++ sdk/cc_sdk_test.go | 9 +++++++++ 2 files changed, 21 insertions(+) diff --git a/cc/library_sdk_member.go b/cc/library_sdk_member.go index cff00b668..9328a2596 100644 --- a/cc/library_sdk_member.go +++ b/cc/library_sdk_member.go @@ -212,6 +212,11 @@ var includeDirProperties = []includeDirsProperty{ // Add properties that may, or may not, be arch specific. func addPossiblyArchSpecificProperties(sdkModuleContext android.ModuleContext, builder android.SnapshotBuilder, libInfo *nativeLibInfoProperties, outputProperties android.BpPropertySet) { + if libInfo.SanitizeNever { + sanitizeSet := outputProperties.AddPropertySet("sanitize") + sanitizeSet.AddProperty("never", true) + } + // Copy the generated library to the snapshot and add a reference to it in the .bp module. if libInfo.outputFile != nil { nativeLibraryPath := nativeLibraryPathFor(libInfo) @@ -359,6 +364,9 @@ type nativeLibInfoProperties struct { // not vary by arch so cannot be android specific. StubsVersion string `sdk:"ignored-on-host"` + // Value of SanitizeProperties.Sanitize.Never. Needs to be propagated for CRT objects. + SanitizeNever bool `android:"arch_variant"` + // outputFile is not exported as it is always arch specific. outputFile android.Path } @@ -405,6 +413,10 @@ func (p *nativeLibInfoProperties) PopulateFromVariant(ctx android.SdkMemberConte if ccModule.HasStubsVariants() { p.StubsVersion = ccModule.StubsVersion() } + + if ccModule.sanitize != nil && proptools.Bool(ccModule.sanitize.Properties.Sanitize.Never) { + p.SanitizeNever = true + } } func getRequiredMemberOutputFile(ctx android.SdkMemberContext, ccModule *Module) android.Path { diff --git a/sdk/cc_sdk_test.go b/sdk/cc_sdk_test.go index b8ffc11c4..84b905c9d 100644 --- a/sdk/cc_sdk_test.go +++ b/sdk/cc_sdk_test.go @@ -340,6 +340,9 @@ func TestSnapshotWithObject(t *testing.T) { cc_object { name: "crtobj", stl: "none", + sanitize: { + never: true, + }, } `) @@ -352,6 +355,9 @@ cc_prebuilt_object { sdk_member_name: "crtobj", stl: "none", compile_multilib: "both", + sanitize: { + never: true, + }, arch: { arm64: { srcs: ["arm64/lib/crtobj.o"], @@ -367,6 +373,9 @@ cc_prebuilt_object { prefer: false, stl: "none", compile_multilib: "both", + sanitize: { + never: true, + }, arch: { arm64: { srcs: ["arm64/lib/crtobj.o"],