Diff source dump and previous version dump for Cross-Version ABI Check
Created a function to determine the current finalization stage by environment variable and the existence of a version folder prebuilt/abi-dumps/<lib_type>/<platform_sdk_version>/. Assign the corresponding prevVersion with the current stage and generate mk commands to diff source and previous dump to {fileName}.{prevVersion}.abidiff with diff flag --allow-extension and --advice-only The test is verified in all stages. lsdumps should be prepared in advance. For stage 1: current/ and PLATFORM_SDK_VERSION/ For stage 2: current/ and {PLATFORM_SDK_VERSION-1}/ For stage 3: PLATFORM_SDK_VERSION/ and {PLATFORM_SDK_VERSION-1}/ The definition of stages could be found at "go/cross-version-abi-check#bookmark=id.vpflkul2z968" Test: make libbinder_ndk Bug: 238387082 Change-Id: Ic29456113a541650c75fa38c5c4f2d6d2e76a877
This commit is contained in:
@@ -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
|
||||
@@ -1614,9 +1617,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()
|
||||
@@ -1628,6 +1661,7 @@ func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, objs Objec
|
||||
} else {
|
||||
version = "current"
|
||||
}
|
||||
prevVersion = prevDumpRefVersion(ctx)
|
||||
}
|
||||
|
||||
exportIncludeDirs := library.flagExporter.exportedIncludes(ctx)
|
||||
@@ -1646,13 +1680,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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user