Loading cc/library.go +42 −8 Original line number Diff line number Diff line Loading @@ -1261,6 +1261,18 @@ func (library *libraryDecorator) linkLlndkSAbiDumpFiles(ctx ModuleContext, "34") } func (library *libraryDecorator) linkApexSAbiDumpFiles(ctx ModuleContext, deps PathDeps, sAbiDumpFiles android.Paths, soFile android.Path, libFileName string, excludeSymbolVersions, excludeSymbolTags []string, sdkVersion string) android.Path { return transformDumpToLinkedDump(ctx, sAbiDumpFiles, soFile, libFileName+".apex", library.exportedIncludeDirsForAbiCheck(ctx), android.OptionalPathForModuleSrc(ctx, library.Properties.Stubs.Symbol_file), append([]string{"*_PLATFORM", "*_PRIVATE"}, excludeSymbolVersions...), append([]string{"platform-only"}, excludeSymbolTags...), sdkVersion) } func getRefAbiDumpFile(ctx android.ModuleInstallPathContext, versionedDumpDir, fileName string) android.OptionalPath { Loading @@ -1276,21 +1288,21 @@ func getRefAbiDumpFile(ctx android.ModuleInstallPathContext, } // Return the previous and current SDK versions for cross-version ABI diff. func crossVersionAbiDiffSdkVersions(ctx ModuleContext, dumpDir string) (string, string) { func crossVersionAbiDiffSdkVersions(ctx ModuleContext, dumpDir string) (int, int) { sdkVersionInt := ctx.Config().PlatformSdkVersion().FinalInt() sdkVersionStr := ctx.Config().PlatformSdkVersion().String() if ctx.Config().PlatformSdkFinal() { return strconv.Itoa(sdkVersionInt - 1), sdkVersionStr return sdkVersionInt - 1, sdkVersionInt } else { // 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. versionedDumpDir := android.ExistentPathForSource(ctx, dumpDir, sdkVersionStr) versionedDumpDir := android.ExistentPathForSource(ctx, dumpDir, ctx.Config().PlatformSdkVersion().String()) if versionedDumpDir.Valid() { return sdkVersionStr, strconv.Itoa(sdkVersionInt + 1) return sdkVersionInt, sdkVersionInt + 1 } else { return strconv.Itoa(sdkVersionInt - 1), sdkVersionStr return sdkVersionInt - 1, sdkVersionInt } } } Loading Loading @@ -1387,7 +1399,7 @@ func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, deps PathD headerAbiChecker.Exclude_symbol_tags, currSdkVersion) var llndkDump android.Path var llndkDump, apexVariantDump android.Path tags := classifySourceAbiDump(ctx) for _, tag := range tags { if tag == llndkLsdumpTag { Loading @@ -1399,6 +1411,15 @@ func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, deps PathD headerAbiChecker.Exclude_symbol_tags) } addLsdumpPath(string(tag) + ":" + llndkDump.String()) } else if tag == apexLsdumpTag { if apexVariantDump == nil { apexVariantDump = library.linkApexSAbiDumpFiles(ctx, deps, objs.sAbiDumpFiles, soFile, fileName, headerAbiChecker.Exclude_symbol_versions, headerAbiChecker.Exclude_symbol_tags, currSdkVersion) } addLsdumpPath(string(tag) + ":" + apexVariantDump.String()) } else { addLsdumpPath(string(tag) + ":" + implDump.String()) } Loading @@ -1412,11 +1433,14 @@ func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, deps PathD } dumpDir := filepath.Join("prebuilts", "abi-dumps", dumpDirName) isLlndk := (tag == llndkLsdumpTag) isApex := (tag == apexLsdumpTag) isNdk := (tag == ndkLsdumpTag) binderBitness := ctx.DeviceConfig().BinderBitness() nameExt := "" if isLlndk { nameExt = "llndk" } else if isApex { nameExt = "apex" } // Check against the previous version. var prevVersion, currVersion string Loading @@ -1430,7 +1454,13 @@ func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, deps PathD sourceDump = llndkDump } } else { prevVersion, currVersion = crossVersionAbiDiffSdkVersions(ctx, dumpDir) prevVersionInt, currVersionInt := crossVersionAbiDiffSdkVersions(ctx, dumpDir) prevVersion = strconv.Itoa(prevVersionInt) currVersion = strconv.Itoa(currVersionInt) // APEX dumps are generated by different rules after trunk stable. if isApex && prevVersionInt > 34 { sourceDump = apexVariantDump } } prevDumpDir := filepath.Join(dumpDir, prevVersion, binderBitness) prevDumpFile := getRefAbiDumpFile(ctx, prevDumpDir, fileName) Loading @@ -1447,6 +1477,10 @@ func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, deps PathD } } else { currVersion = currSdkVersion if isApex && (!ctx.Config().PlatformSdkFinal() || ctx.Config().PlatformSdkVersion().FinalInt() > 34) { sourceDump = apexVariantDump } } currDumpDir := filepath.Join(dumpDir, currVersion, binderBitness) currDumpFile := getRefAbiDumpFile(ctx, currDumpDir, fileName) Loading cc/sabi.go +8 −3 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ var ( type lsdumpTag string const ( apexLsdumpTag lsdumpTag = "APEX" llndkLsdumpTag lsdumpTag = "LLNDK" ndkLsdumpTag lsdumpTag = "NDK" platformLsdumpTag lsdumpTag = "PLATFORM" Loading @@ -39,6 +40,8 @@ const ( // Return the prebuilt ABI dump directory for a tag; an empty string for an opt-in dump. func (tag *lsdumpTag) dirName() string { switch *tag { case apexLsdumpTag: return "platform" case ndkLsdumpTag: return "ndk" case llndkLsdumpTag: Loading Loading @@ -134,11 +137,13 @@ func classifySourceAbiDump(ctx android.BaseModuleContext) []lsdumpTag { if m.isImplementationForLLNDKPublic() { result = append(result, llndkLsdumpTag) } // Return NDK if the library is both NDK and APEX. // TODO(b/309880485): Split NDK and APEX ABI. if m.IsNdk(ctx.Config()) { result = append(result, ndkLsdumpTag) } else if m.library.hasStubsVariants() || headerAbiChecker.enabled() { } // APEX and opt-in platform dumps are placed in the same directory. if m.library.hasStubsVariants() { result = append(result, apexLsdumpTag) } else if headerAbiChecker.enabled() { result = append(result, platformLsdumpTag) } } else if headerAbiChecker.enabled() { Loading Loading
cc/library.go +42 −8 Original line number Diff line number Diff line Loading @@ -1261,6 +1261,18 @@ func (library *libraryDecorator) linkLlndkSAbiDumpFiles(ctx ModuleContext, "34") } func (library *libraryDecorator) linkApexSAbiDumpFiles(ctx ModuleContext, deps PathDeps, sAbiDumpFiles android.Paths, soFile android.Path, libFileName string, excludeSymbolVersions, excludeSymbolTags []string, sdkVersion string) android.Path { return transformDumpToLinkedDump(ctx, sAbiDumpFiles, soFile, libFileName+".apex", library.exportedIncludeDirsForAbiCheck(ctx), android.OptionalPathForModuleSrc(ctx, library.Properties.Stubs.Symbol_file), append([]string{"*_PLATFORM", "*_PRIVATE"}, excludeSymbolVersions...), append([]string{"platform-only"}, excludeSymbolTags...), sdkVersion) } func getRefAbiDumpFile(ctx android.ModuleInstallPathContext, versionedDumpDir, fileName string) android.OptionalPath { Loading @@ -1276,21 +1288,21 @@ func getRefAbiDumpFile(ctx android.ModuleInstallPathContext, } // Return the previous and current SDK versions for cross-version ABI diff. func crossVersionAbiDiffSdkVersions(ctx ModuleContext, dumpDir string) (string, string) { func crossVersionAbiDiffSdkVersions(ctx ModuleContext, dumpDir string) (int, int) { sdkVersionInt := ctx.Config().PlatformSdkVersion().FinalInt() sdkVersionStr := ctx.Config().PlatformSdkVersion().String() if ctx.Config().PlatformSdkFinal() { return strconv.Itoa(sdkVersionInt - 1), sdkVersionStr return sdkVersionInt - 1, sdkVersionInt } else { // 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. versionedDumpDir := android.ExistentPathForSource(ctx, dumpDir, sdkVersionStr) versionedDumpDir := android.ExistentPathForSource(ctx, dumpDir, ctx.Config().PlatformSdkVersion().String()) if versionedDumpDir.Valid() { return sdkVersionStr, strconv.Itoa(sdkVersionInt + 1) return sdkVersionInt, sdkVersionInt + 1 } else { return strconv.Itoa(sdkVersionInt - 1), sdkVersionStr return sdkVersionInt - 1, sdkVersionInt } } } Loading Loading @@ -1387,7 +1399,7 @@ func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, deps PathD headerAbiChecker.Exclude_symbol_tags, currSdkVersion) var llndkDump android.Path var llndkDump, apexVariantDump android.Path tags := classifySourceAbiDump(ctx) for _, tag := range tags { if tag == llndkLsdumpTag { Loading @@ -1399,6 +1411,15 @@ func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, deps PathD headerAbiChecker.Exclude_symbol_tags) } addLsdumpPath(string(tag) + ":" + llndkDump.String()) } else if tag == apexLsdumpTag { if apexVariantDump == nil { apexVariantDump = library.linkApexSAbiDumpFiles(ctx, deps, objs.sAbiDumpFiles, soFile, fileName, headerAbiChecker.Exclude_symbol_versions, headerAbiChecker.Exclude_symbol_tags, currSdkVersion) } addLsdumpPath(string(tag) + ":" + apexVariantDump.String()) } else { addLsdumpPath(string(tag) + ":" + implDump.String()) } Loading @@ -1412,11 +1433,14 @@ func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, deps PathD } dumpDir := filepath.Join("prebuilts", "abi-dumps", dumpDirName) isLlndk := (tag == llndkLsdumpTag) isApex := (tag == apexLsdumpTag) isNdk := (tag == ndkLsdumpTag) binderBitness := ctx.DeviceConfig().BinderBitness() nameExt := "" if isLlndk { nameExt = "llndk" } else if isApex { nameExt = "apex" } // Check against the previous version. var prevVersion, currVersion string Loading @@ -1430,7 +1454,13 @@ func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, deps PathD sourceDump = llndkDump } } else { prevVersion, currVersion = crossVersionAbiDiffSdkVersions(ctx, dumpDir) prevVersionInt, currVersionInt := crossVersionAbiDiffSdkVersions(ctx, dumpDir) prevVersion = strconv.Itoa(prevVersionInt) currVersion = strconv.Itoa(currVersionInt) // APEX dumps are generated by different rules after trunk stable. if isApex && prevVersionInt > 34 { sourceDump = apexVariantDump } } prevDumpDir := filepath.Join(dumpDir, prevVersion, binderBitness) prevDumpFile := getRefAbiDumpFile(ctx, prevDumpDir, fileName) Loading @@ -1447,6 +1477,10 @@ func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, deps PathD } } else { currVersion = currSdkVersion if isApex && (!ctx.Config().PlatformSdkFinal() || ctx.Config().PlatformSdkVersion().FinalInt() > 34) { sourceDump = apexVariantDump } } currDumpDir := filepath.Join(dumpDir, currVersion, binderBitness) currDumpFile := getRefAbiDumpFile(ctx, currDumpDir, fileName) Loading
cc/sabi.go +8 −3 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ var ( type lsdumpTag string const ( apexLsdumpTag lsdumpTag = "APEX" llndkLsdumpTag lsdumpTag = "LLNDK" ndkLsdumpTag lsdumpTag = "NDK" platformLsdumpTag lsdumpTag = "PLATFORM" Loading @@ -39,6 +40,8 @@ const ( // Return the prebuilt ABI dump directory for a tag; an empty string for an opt-in dump. func (tag *lsdumpTag) dirName() string { switch *tag { case apexLsdumpTag: return "platform" case ndkLsdumpTag: return "ndk" case llndkLsdumpTag: Loading Loading @@ -134,11 +137,13 @@ func classifySourceAbiDump(ctx android.BaseModuleContext) []lsdumpTag { if m.isImplementationForLLNDKPublic() { result = append(result, llndkLsdumpTag) } // Return NDK if the library is both NDK and APEX. // TODO(b/309880485): Split NDK and APEX ABI. if m.IsNdk(ctx.Config()) { result = append(result, ndkLsdumpTag) } else if m.library.hasStubsVariants() || headerAbiChecker.enabled() { } // APEX and opt-in platform dumps are placed in the same directory. if m.library.hasStubsVariants() { result = append(result, apexLsdumpTag) } else if headerAbiChecker.enabled() { result = append(result, platformLsdumpTag) } } else if headerAbiChecker.enabled() { Loading