Let header-abi-linker filter symbols by API level
In a trunk stable branch, the ABI-monitored libraries under different
release configurations share the source code. The exported symbols are
filtered by version scripts and API level. header-abi-linker needs to
take the API level as a parameter.
Test: make
Bug: 308192597
Change-Id: I4b55b7ec023451b3a4cd1da308a1de10842d51d2
diff --git a/cc/builder.go b/cc/builder.go
index f5e0dcc..c8fa1e4 100644
--- a/cc/builder.go
+++ b/cc/builder.go
@@ -875,7 +875,8 @@
// into a single .ldump sAbi dump file
func transformDumpToLinkedDump(ctx android.ModuleContext, sAbiDumps android.Paths, soFile android.Path,
baseName, exportedHeaderFlags string, symbolFile android.OptionalPath,
- excludedSymbolVersions, excludedSymbolTags []string) android.OptionalPath {
+ excludedSymbolVersions, excludedSymbolTags []string,
+ api string) android.OptionalPath {
outputFile := android.PathForModuleOut(ctx, baseName+".lsdump")
@@ -892,6 +893,11 @@
for _, tag := range excludedSymbolTags {
symbolFilterStr += " --exclude-symbol-tag " + tag
}
+ apiLevelsJson := android.GetApiLevelsJson(ctx)
+ implicits = append(implicits, apiLevelsJson)
+ symbolFilterStr += " --api-map " + apiLevelsJson.String()
+ symbolFilterStr += " --api " + api
+
rule := sAbiLink
args := map[string]string{
"symbolFilter": symbolFilterStr,
diff --git a/cc/library.go b/cc/library.go
index 2161512..7332939 100644
--- a/cc/library.go
+++ b/cc/library.go
@@ -1904,17 +1904,19 @@
}
exportedHeaderFlags := strings.Join(SourceAbiFlags, " ")
headerAbiChecker := library.getHeaderAbiCheckerProperties(ctx)
- library.sAbiOutputFile = transformDumpToLinkedDump(ctx, objs.sAbiDumpFiles, soFile, fileName, exportedHeaderFlags,
- android.OptionalPathForModuleSrc(ctx, library.symbolFileForAbiCheck(ctx)),
- headerAbiChecker.Exclude_symbol_versions,
- headerAbiChecker.Exclude_symbol_tags)
-
- addLsdumpPath(classifySourceAbiDump(ctx) + ":" + library.sAbiOutputFile.String())
-
// The logic must be consistent with classifySourceAbiDump.
isVndk := ctx.useVndk() && ctx.isVndk()
isNdk := ctx.isNdk(ctx.Config())
isLlndk := ctx.isImplementationForLLNDKPublic()
+ currVersion := currRefAbiDumpVersion(ctx, isVndk)
+ library.sAbiOutputFile = transformDumpToLinkedDump(ctx, objs.sAbiDumpFiles, soFile, fileName, exportedHeaderFlags,
+ android.OptionalPathForModuleSrc(ctx, library.symbolFileForAbiCheck(ctx)),
+ headerAbiChecker.Exclude_symbol_versions,
+ headerAbiChecker.Exclude_symbol_tags,
+ currVersion)
+
+ addLsdumpPath(classifySourceAbiDump(ctx) + ":" + library.sAbiOutputFile.String())
+
dumpDir := getRefAbiDumpDir(isNdk, isVndk)
binderBitness := ctx.DeviceConfig().BinderBitness()
// If NDK or PLATFORM library, check against previous version ABI.
@@ -1930,7 +1932,6 @@
}
}
// Check against the current version.
- currVersion := currRefAbiDumpVersion(ctx, isVndk)
currDumpDir := filepath.Join(dumpDir, currVersion, binderBitness)
currDumpFile := getRefAbiDumpFile(ctx, currDumpDir, fileName)
if currDumpFile.Valid() {