Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 473b3557 authored by Hsin-Yi Chen's avatar Hsin-Yi Chen Committed by Gerrit Code Review
Browse files

Merge "Split APEX ABI dumps from implementation ABI dumps" into main

parents a559cab2 98da0212
Loading
Loading
Loading
Loading
+42 −8
Original line number Diff line number Diff line
@@ -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 {

@@ -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
		}
	}
}
@@ -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 {
@@ -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())
			}
@@ -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
@@ -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)
@@ -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)
+8 −3
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ var (
type lsdumpTag string

const (
	apexLsdumpTag     lsdumpTag = "APEX"
	llndkLsdumpTag    lsdumpTag = "LLNDK"
	ndkLsdumpTag      lsdumpTag = "NDK"
	platformLsdumpTag lsdumpTag = "PLATFORM"
@@ -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:
@@ -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() {