diff --git a/android/paths.go b/android/paths.go index f321a4b46..31c5977ee 100644 --- a/android/paths.go +++ b/android/paths.go @@ -826,10 +826,15 @@ func pathForModule(ctx ModuleContext) OutputPath { return PathForOutput(ctx, ".intermediates", ctx.ModuleDir(), ctx.ModuleName(), ctx.ModuleSubDir()) } -// PathForVndkRefDump returns an OptionalPath representing the path of the reference -// abi dump for the given module. This is not guaranteed to be valid. -func PathForVndkRefAbiDump(ctx ModuleContext, version, fileName string, isLlndk bool) OptionalPath { +// PathForVndkRefAbiDump returns an OptionalPath representing the path of the +// reference abi dump for the given module. This is not guaranteed to be valid. +func PathForVndkRefAbiDump(ctx ModuleContext, version, fileName string, + isLlndk, isGzip bool) OptionalPath { + arches := ctx.DeviceConfig().Arches() + if len(arches) == 0 { + panic("device build with no primary arch") + } currentArch := ctx.Arch() archNameAndVariant := currentArch.ArchType.String() if currentArch.ArchVariant != "" { @@ -843,14 +848,18 @@ func PathForVndkRefAbiDump(ctx ModuleContext, version, fileName string, isLlndk dirName = "vndk" } - if len(arches) == 0 { - panic("device build with no primary arch") - } binderBitness := ctx.DeviceConfig().BinderBitness() - ext := ".lsdump.gz" - refDumpFileStr := "prebuilts/abi-dumps/" + dirName + "/" + version + "/" + binderBitness + "/" + - archNameAndVariant + "/source-based/" + fileName + ext - return ExistentPathForSource(ctx, refDumpFileStr) + + var ext string + if isGzip { + ext = ".lsdump.gz" + } else { + ext = ".lsdump" + } + + return ExistentPathForSource(ctx, "prebuilts", "abi-dumps", dirName, + version, binderBitness, archNameAndVariant, "source-based", + fileName+ext) } // PathForModuleOut returns a Path representing the paths... under the module's diff --git a/cc/library.go b/cc/library.go index dcd9576e7..5da36dc66 100644 --- a/cc/library.go +++ b/cc/library.go @@ -631,6 +631,27 @@ func (library *libraryDecorator) linkShared(ctx ModuleContext, return ret } +func getRefAbiDumpFile(ctx ModuleContext, vndkVersion, fileName string) android.Path { + isLlndk := inList(ctx.baseModuleName(), llndkLibraries) + + refAbiDumpTextFile := android.PathForVndkRefAbiDump(ctx, vndkVersion, fileName, isLlndk, false) + refAbiDumpGzipFile := android.PathForVndkRefAbiDump(ctx, vndkVersion, fileName, isLlndk, true) + + if refAbiDumpTextFile.Valid() { + if refAbiDumpGzipFile.Valid() { + ctx.ModuleErrorf( + "Two reference ABI dump files are found: %q and %q. Please delete the stale one.", + refAbiDumpTextFile, refAbiDumpGzipFile) + return nil + } + return refAbiDumpTextFile.Path() + } + if refAbiDumpGzipFile.Valid() { + return UnzipRefDump(ctx, refAbiDumpGzipFile.Path(), fileName) + } + return nil +} + func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, objs Objects, fileName string, soFile android.Path) { if len(objs.sAbiDumpFiles) > 0 && ctx.shouldCreateVndkSourceAbiDump() { vndkVersion := ctx.DeviceConfig().PlatformVndkVersion() @@ -649,12 +670,10 @@ func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, objs Objec exportedHeaderFlags := strings.Join(SourceAbiFlags, " ") library.sAbiOutputFile = TransformDumpToLinkedDump(ctx, objs.sAbiDumpFiles, soFile, fileName, exportedHeaderFlags) - isLlndk := inList(ctx.baseModuleName(), llndkLibraries) - refSourceDumpFile := android.PathForVndkRefAbiDump(ctx, vndkVersion, fileName, isLlndk) - if refSourceDumpFile.Valid() { - unzippedRefDump := UnzipRefDump(ctx, refSourceDumpFile.Path(), fileName) + refAbiDumpFile := getRefAbiDumpFile(ctx, vndkVersion, fileName) + if refAbiDumpFile != nil { library.sAbiDiff = SourceAbiDiff(ctx, library.sAbiOutputFile.Path(), - unzippedRefDump, fileName, exportedHeaderFlags, ctx.isVndkExt()) + refAbiDumpFile, fileName, exportedHeaderFlags, ctx.isVndkExt()) } } }