diff --git a/cc/builder.go b/cc/builder.go index 136263b41..efdbbb2d2 100644 --- a/cc/builder.go +++ b/cc/builder.go @@ -36,13 +36,6 @@ const ( staticLibraryExtension = ".a" ) -var ( - abiCheckAllowFlags = []string{ - "-allow-unreferenced-changes", - "-allow-unreferenced-elf-symbol-changes", - } -) - var ( pctx = android.NewPackageContext("android/soong/cc") @@ -208,8 +201,7 @@ var ( sAbiDiff = pctx.RuleFunc("sAbiDiff", func(ctx android.PackageRuleContext) blueprint.RuleParams { - // TODO(b/78139997): Add -check-all-apis back - commandStr := "($sAbiDiffer ${allowFlags} -lib ${libName} -arch ${arch} -o ${out} -new ${in} -old ${referenceDump})" + commandStr := "($sAbiDiffer ${extraFlags} -lib ${libName} -arch ${arch} -o ${out} -new ${in} -old ${referenceDump})" commandStr += "|| (echo 'error: Please update ABI references with: $$ANDROID_BUILD_TOP/development/vndk/tools/header-checker/utils/create_reference_dumps.py ${createReferenceDumpFlags} -l ${libName}'" commandStr += " && (mkdir -p $$DIST_DIR/abidiffs && cp ${out} $$DIST_DIR/abidiffs/)" commandStr += " && exit 1)" @@ -218,7 +210,7 @@ var ( CommandDeps: []string{"$sAbiDiffer"}, } }, - "allowFlags", "referenceDump", "libName", "arch", "createReferenceDumpFlags") + "extraFlags", "referenceDump", "libName", "arch", "createReferenceDumpFlags") unzipRefSAbiDump = pctx.AndroidStaticRule("unzipRefSAbiDump", blueprint.RuleParams{ @@ -723,27 +715,36 @@ func UnzipRefDump(ctx android.ModuleContext, zippedRefDump android.Path, baseNam } func SourceAbiDiff(ctx android.ModuleContext, inputDump android.Path, referenceDump android.Path, - baseName, exportedHeaderFlags string, isLlndk, isNdk, isVndkExt bool) android.OptionalPath { + baseName, exportedHeaderFlags string, checkAllApis, isLlndk, isNdk, isVndkExt bool) android.OptionalPath { outputFile := android.PathForModuleOut(ctx, baseName+".abidiff") libName := strings.TrimSuffix(baseName, filepath.Ext(baseName)) createReferenceDumpFlags := "" - localAbiCheckAllowFlags := append([]string(nil), abiCheckAllowFlags...) - if exportedHeaderFlags == "" { - localAbiCheckAllowFlags = append(localAbiCheckAllowFlags, "-advice-only") + var extraFlags []string + if checkAllApis { + extraFlags = append(extraFlags, "-check-all-apis") + } else { + extraFlags = append(extraFlags, + "-allow-unreferenced-changes", + "-allow-unreferenced-elf-symbol-changes") } + + if exportedHeaderFlags == "" { + extraFlags = append(extraFlags, "-advice-only") + } + if isLlndk || isNdk { createReferenceDumpFlags = "--llndk" if isLlndk { // TODO(b/130324828): "-consider-opaque-types-different" should apply to // both LLNDK and NDK shared libs. However, a known issue in header-abi-diff // breaks libaaudio. Remove the if-guard after the issue is fixed. - localAbiCheckAllowFlags = append(localAbiCheckAllowFlags, "-consider-opaque-types-different") + extraFlags = append(extraFlags, "-consider-opaque-types-different") } } if isVndkExt { - localAbiCheckAllowFlags = append(localAbiCheckAllowFlags, "-allow-extensions") + extraFlags = append(extraFlags, "-allow-extensions") } ctx.Build(pctx, android.BuildParams{ @@ -756,7 +757,7 @@ func SourceAbiDiff(ctx android.ModuleContext, inputDump android.Path, referenceD "referenceDump": referenceDump.String(), "libName": libName, "arch": ctx.Arch().ArchType.Name, - "allowFlags": strings.Join(localAbiCheckAllowFlags, " "), + "extraFlags": strings.Join(extraFlags, " "), "createReferenceDumpFlags": createReferenceDumpFlags, }, }) diff --git a/cc/library.go b/cc/library.go index 6ffb7fc1e..a5de54b4a 100644 --- a/cc/library.go +++ b/cc/library.go @@ -102,6 +102,10 @@ type LibraryProperties struct { // Symbol tags that should be ignored from the symbol file Exclude_symbol_tags []string + + // Run checks on all APIs (in addition to the ones referred by + // one of exported ELF symbols.) + Check_all_apis *bool } // Order symbols in .bss section by their sizes. Only useful for shared libraries. @@ -978,7 +982,9 @@ func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, objs Objec refAbiDumpFile := getRefAbiDumpFile(ctx, vndkVersion, fileName) if refAbiDumpFile != nil { library.sAbiDiff = SourceAbiDiff(ctx, library.sAbiOutputFile.Path(), - refAbiDumpFile, fileName, exportedHeaderFlags, ctx.isLlndk(ctx.Config()), ctx.isNdk(), ctx.isVndkExt()) + refAbiDumpFile, fileName, exportedHeaderFlags, + Bool(library.Properties.Header_abi_checker.Check_all_apis), + ctx.isLlndk(ctx.Config()), ctx.isNdk(), ctx.isVndkExt()) } } }