diff --git a/android/paths.go b/android/paths.go index af2f9567a..31c5977ee 100644 --- a/android/paths.go +++ b/android/paths.go @@ -826,37 +826,40 @@ 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, vndkOrNdk, isSourceDump 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 != "" { archNameAndVariant += "_" + currentArch.ArchVariant } - var sourceOrBinaryDir string - var vndkOrNdkDir string - var ext string - if isSourceDump { - ext = ".lsdump.gz" - sourceOrBinaryDir = "source-based" + + var dirName string + if isLlndk { + dirName = "ndk" } else { - ext = ".bdump.gz" - sourceOrBinaryDir = "binary-based" - } - if vndkOrNdk { - vndkOrNdkDir = "vndk" - } else { - vndkOrNdkDir = "ndk" - } - if len(arches) == 0 { - panic("device build with no primary arch") + dirName = "vndk" } + binderBitness := ctx.DeviceConfig().BinderBitness() - refDumpFileStr := "prebuilts/abi-dumps/" + vndkOrNdkDir + "/" + version + "/" + binderBitness + "/" + - archNameAndVariant + "/" + sourceOrBinaryDir + "/" + 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 e92cf9d1f..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,22 +670,14 @@ func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, objs Objec exportedHeaderFlags := strings.Join(SourceAbiFlags, " ") library.sAbiOutputFile = TransformDumpToLinkedDump(ctx, objs.sAbiDumpFiles, soFile, fileName, exportedHeaderFlags) - refSourceDumpFile := android.PathForVndkRefAbiDump(ctx, vndkVersion, fileName, vndkVsNdk(ctx), true) - 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()) } } } -func vndkVsNdk(ctx ModuleContext) bool { - if inList(ctx.baseModuleName(), llndkLibraries) { - return false - } - return true -} - func (library *libraryDecorator) link(ctx ModuleContext, flags Flags, deps PathDeps, objs Objects) android.Path {