Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fbb486fc authored by Martin Stjernholm's avatar Martin Stjernholm
Browse files

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
parent ec7a91f9
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -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 {
+9 −0
Original line number Diff line number Diff line
@@ -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"],