Loading cc/androidmk.go +16 −6 Original line number Diff line number Diff line Loading @@ -226,17 +226,27 @@ func (library *libraryDecorator) androidMkWriteExportedFlags(entries *android.An } } func (library *libraryDecorator) androidMkEntriesWriteAdditionalDependenciesForSourceAbiDiff(entries *android.AndroidMkEntries) { if library.sAbiDiff.Valid() && !library.static() { entries.AddStrings("LOCAL_ADDITIONAL_DEPENDENCIES", library.sAbiDiff.String()) func (library *libraryDecorator) getAbiDiffsForAndroidMkDeps() []string { if library.static() { return nil } var abiDiffs []string if library.sAbiDiff.Valid() { abiDiffs = append(abiDiffs, library.sAbiDiff.String()) } if library.prevSAbiDiff.Valid() { abiDiffs = append(abiDiffs, library.prevSAbiDiff.String()) } return abiDiffs } func (library *libraryDecorator) androidMkEntriesWriteAdditionalDependenciesForSourceAbiDiff(entries *android.AndroidMkEntries) { entries.AddStrings("LOCAL_ADDITIONAL_DEPENDENCIES", library.getAbiDiffsForAndroidMkDeps()...) } // TODO(ccross): remove this once apex/androidmk.go is converted to AndroidMkEntries func (library *libraryDecorator) androidMkWriteAdditionalDependenciesForSourceAbiDiff(w io.Writer) { if library.sAbiDiff.Valid() && !library.static() { fmt.Fprintln(w, "LOCAL_ADDITIONAL_DEPENDENCIES +=", library.sAbiDiff.String()) } fmt.Fprintln(w, "LOCAL_ADDITIONAL_DEPENDENCIES +=", strings.Join(library.getAbiDiffsForAndroidMkDeps(), " ")) } func (library *libraryDecorator) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) { Loading cc/builder.go +14 −4 Original line number Diff line number Diff line Loading @@ -920,10 +920,15 @@ func unzipRefDump(ctx android.ModuleContext, zippedRefDump android.Path, baseNam // sourceAbiDiff registers a build statement to compare linked sAbi dump files (.lsdump). func sourceAbiDiff(ctx android.ModuleContext, inputDump android.Path, referenceDump android.Path, baseName, exportedHeaderFlags string, diffFlags []string, checkAllApis, isLlndk, isNdk, isVndkExt bool) android.OptionalPath { baseName, prevVersion, exportedHeaderFlags string, diffFlags []string, checkAllApis, isLlndk, isNdk, isVndkExt, previousVersionDiff bool) android.OptionalPath { outputFile := android.PathForModuleOut(ctx, baseName+".abidiff") var outputFile android.ModuleOutPath if prevVersion == "" { outputFile = android.PathForModuleOut(ctx, baseName+".abidiff") } else { outputFile = android.PathForModuleOut(ctx, baseName+"."+prevVersion+".abidiff") } libName := strings.TrimSuffix(baseName, filepath.Ext(baseName)) var extraFlags []string Loading @@ -935,10 +940,15 @@ func sourceAbiDiff(ctx android.ModuleContext, inputDump android.Path, referenceD "-allow-unreferenced-elf-symbol-changes") } // TODO(b/241496591): Remove -advice-only after b/239792343 and b/239790286 are reolved. if previousVersionDiff { extraFlags = append(extraFlags, "-advice-only") } if isLlndk || isNdk { extraFlags = append(extraFlags, "-consider-opaque-types-different") } if isVndkExt { if isVndkExt || previousVersionDiff { extraFlags = append(extraFlags, "-allow-extensions") } // TODO(b/232891473): Simplify the above logic with diffFlags. Loading cc/library.go +47 −2 Original line number Diff line number Diff line Loading @@ -613,6 +613,9 @@ type libraryDecorator struct { // Source Abi Diff sAbiDiff android.OptionalPath // Source Abi Diff against previous SDK version prevSAbiDiff android.OptionalPath // Location of the static library in the sysroot. Empty if the library is // not included in the NDK. ndkSysrootPath android.Path Loading Loading @@ -1620,9 +1623,39 @@ func getRefAbiDumpFile(ctx ModuleContext, vndkVersion, fileName string) android. return nil } func prevDumpRefVersion(ctx ModuleContext) string { sdkVersionInt := ctx.Config().PlatformSdkVersion().FinalInt() sdkVersionStr := ctx.Config().PlatformSdkVersion().String() if ctx.Config().PlatformSdkFinal() { return strconv.Itoa(sdkVersionInt - 1) } else { var dirName string isNdk := ctx.isNdk(ctx.Config()) if isNdk { dirName = "ndk" } else { dirName = "platform" } // The platform SDK version can be upgraded before finalization while the corresponding abi dumps hasn't // been generated. Thus the Cross-Version Check chooses PLATFORM_SDK_VERION - 1 as previous version. // This situation could be identified by checking the existence of the PLATFORM_SDK_VERION dump directory. refDumpDir := android.ExistentPathForSource(ctx, "prebuilts", "abi-dumps", dirName, sdkVersionStr) if refDumpDir.Valid() { return sdkVersionStr } else { return strconv.Itoa(sdkVersionInt - 1) } } } func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, objs Objects, fileName string, soFile android.Path) { if library.sabi.shouldCreateSourceAbiDump() { var version string var prevVersion string if ctx.useVndk() { // For modules linking against vndk, follow its vndk version version = ctx.Module().(*Module).VndkVersion() Loading @@ -1634,6 +1667,7 @@ func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, objs Objec } else { version = "current" } prevVersion = prevDumpRefVersion(ctx) } exportIncludeDirs := library.flagExporter.exportedIncludes(ctx) Loading @@ -1652,13 +1686,24 @@ func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, objs Objec addLsdumpPath(classifySourceAbiDump(ctx) + ":" + library.sAbiOutputFile.String()) if prevVersion != "" { prevRefAbiDumpFile := getRefAbiDumpFile(ctx, prevVersion, fileName) if prevRefAbiDumpFile != nil { library.prevSAbiDiff = sourceAbiDiff(ctx, library.sAbiOutputFile.Path(), prevRefAbiDumpFile, fileName, prevVersion, exportedHeaderFlags, library.Properties.Header_abi_checker.Diff_flags, Bool(library.Properties.Header_abi_checker.Check_all_apis), ctx.IsLlndk(), ctx.isNdk(ctx.Config()), ctx.IsVndkExt(), true) } } refAbiDumpFile := getRefAbiDumpFile(ctx, version, fileName) if refAbiDumpFile != nil { library.sAbiDiff = sourceAbiDiff(ctx, library.sAbiOutputFile.Path(), refAbiDumpFile, fileName, exportedHeaderFlags, refAbiDumpFile, fileName, "", exportedHeaderFlags, library.Properties.Header_abi_checker.Diff_flags, Bool(library.Properties.Header_abi_checker.Check_all_apis), ctx.IsLlndk(), ctx.isNdk(ctx.Config()), ctx.IsVndkExt()) ctx.IsLlndk(), ctx.isNdk(ctx.Config()), ctx.IsVndkExt(), false) } } } Loading Loading
cc/androidmk.go +16 −6 Original line number Diff line number Diff line Loading @@ -226,17 +226,27 @@ func (library *libraryDecorator) androidMkWriteExportedFlags(entries *android.An } } func (library *libraryDecorator) androidMkEntriesWriteAdditionalDependenciesForSourceAbiDiff(entries *android.AndroidMkEntries) { if library.sAbiDiff.Valid() && !library.static() { entries.AddStrings("LOCAL_ADDITIONAL_DEPENDENCIES", library.sAbiDiff.String()) func (library *libraryDecorator) getAbiDiffsForAndroidMkDeps() []string { if library.static() { return nil } var abiDiffs []string if library.sAbiDiff.Valid() { abiDiffs = append(abiDiffs, library.sAbiDiff.String()) } if library.prevSAbiDiff.Valid() { abiDiffs = append(abiDiffs, library.prevSAbiDiff.String()) } return abiDiffs } func (library *libraryDecorator) androidMkEntriesWriteAdditionalDependenciesForSourceAbiDiff(entries *android.AndroidMkEntries) { entries.AddStrings("LOCAL_ADDITIONAL_DEPENDENCIES", library.getAbiDiffsForAndroidMkDeps()...) } // TODO(ccross): remove this once apex/androidmk.go is converted to AndroidMkEntries func (library *libraryDecorator) androidMkWriteAdditionalDependenciesForSourceAbiDiff(w io.Writer) { if library.sAbiDiff.Valid() && !library.static() { fmt.Fprintln(w, "LOCAL_ADDITIONAL_DEPENDENCIES +=", library.sAbiDiff.String()) } fmt.Fprintln(w, "LOCAL_ADDITIONAL_DEPENDENCIES +=", strings.Join(library.getAbiDiffsForAndroidMkDeps(), " ")) } func (library *libraryDecorator) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) { Loading
cc/builder.go +14 −4 Original line number Diff line number Diff line Loading @@ -920,10 +920,15 @@ func unzipRefDump(ctx android.ModuleContext, zippedRefDump android.Path, baseNam // sourceAbiDiff registers a build statement to compare linked sAbi dump files (.lsdump). func sourceAbiDiff(ctx android.ModuleContext, inputDump android.Path, referenceDump android.Path, baseName, exportedHeaderFlags string, diffFlags []string, checkAllApis, isLlndk, isNdk, isVndkExt bool) android.OptionalPath { baseName, prevVersion, exportedHeaderFlags string, diffFlags []string, checkAllApis, isLlndk, isNdk, isVndkExt, previousVersionDiff bool) android.OptionalPath { outputFile := android.PathForModuleOut(ctx, baseName+".abidiff") var outputFile android.ModuleOutPath if prevVersion == "" { outputFile = android.PathForModuleOut(ctx, baseName+".abidiff") } else { outputFile = android.PathForModuleOut(ctx, baseName+"."+prevVersion+".abidiff") } libName := strings.TrimSuffix(baseName, filepath.Ext(baseName)) var extraFlags []string Loading @@ -935,10 +940,15 @@ func sourceAbiDiff(ctx android.ModuleContext, inputDump android.Path, referenceD "-allow-unreferenced-elf-symbol-changes") } // TODO(b/241496591): Remove -advice-only after b/239792343 and b/239790286 are reolved. if previousVersionDiff { extraFlags = append(extraFlags, "-advice-only") } if isLlndk || isNdk { extraFlags = append(extraFlags, "-consider-opaque-types-different") } if isVndkExt { if isVndkExt || previousVersionDiff { extraFlags = append(extraFlags, "-allow-extensions") } // TODO(b/232891473): Simplify the above logic with diffFlags. Loading
cc/library.go +47 −2 Original line number Diff line number Diff line Loading @@ -613,6 +613,9 @@ type libraryDecorator struct { // Source Abi Diff sAbiDiff android.OptionalPath // Source Abi Diff against previous SDK version prevSAbiDiff android.OptionalPath // Location of the static library in the sysroot. Empty if the library is // not included in the NDK. ndkSysrootPath android.Path Loading Loading @@ -1620,9 +1623,39 @@ func getRefAbiDumpFile(ctx ModuleContext, vndkVersion, fileName string) android. return nil } func prevDumpRefVersion(ctx ModuleContext) string { sdkVersionInt := ctx.Config().PlatformSdkVersion().FinalInt() sdkVersionStr := ctx.Config().PlatformSdkVersion().String() if ctx.Config().PlatformSdkFinal() { return strconv.Itoa(sdkVersionInt - 1) } else { var dirName string isNdk := ctx.isNdk(ctx.Config()) if isNdk { dirName = "ndk" } else { dirName = "platform" } // The platform SDK version can be upgraded before finalization while the corresponding abi dumps hasn't // been generated. Thus the Cross-Version Check chooses PLATFORM_SDK_VERION - 1 as previous version. // This situation could be identified by checking the existence of the PLATFORM_SDK_VERION dump directory. refDumpDir := android.ExistentPathForSource(ctx, "prebuilts", "abi-dumps", dirName, sdkVersionStr) if refDumpDir.Valid() { return sdkVersionStr } else { return strconv.Itoa(sdkVersionInt - 1) } } } func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, objs Objects, fileName string, soFile android.Path) { if library.sabi.shouldCreateSourceAbiDump() { var version string var prevVersion string if ctx.useVndk() { // For modules linking against vndk, follow its vndk version version = ctx.Module().(*Module).VndkVersion() Loading @@ -1634,6 +1667,7 @@ func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, objs Objec } else { version = "current" } prevVersion = prevDumpRefVersion(ctx) } exportIncludeDirs := library.flagExporter.exportedIncludes(ctx) Loading @@ -1652,13 +1686,24 @@ func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, objs Objec addLsdumpPath(classifySourceAbiDump(ctx) + ":" + library.sAbiOutputFile.String()) if prevVersion != "" { prevRefAbiDumpFile := getRefAbiDumpFile(ctx, prevVersion, fileName) if prevRefAbiDumpFile != nil { library.prevSAbiDiff = sourceAbiDiff(ctx, library.sAbiOutputFile.Path(), prevRefAbiDumpFile, fileName, prevVersion, exportedHeaderFlags, library.Properties.Header_abi_checker.Diff_flags, Bool(library.Properties.Header_abi_checker.Check_all_apis), ctx.IsLlndk(), ctx.isNdk(ctx.Config()), ctx.IsVndkExt(), true) } } refAbiDumpFile := getRefAbiDumpFile(ctx, version, fileName) if refAbiDumpFile != nil { library.sAbiDiff = sourceAbiDiff(ctx, library.sAbiOutputFile.Path(), refAbiDumpFile, fileName, exportedHeaderFlags, refAbiDumpFile, fileName, "", exportedHeaderFlags, library.Properties.Header_abi_checker.Diff_flags, Bool(library.Properties.Header_abi_checker.Check_all_apis), ctx.IsLlndk(), ctx.isNdk(ctx.Config()), ctx.IsVndkExt()) ctx.IsLlndk(), ctx.isNdk(ctx.Config()), ctx.IsVndkExt(), false) } } } Loading