aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2017-06-04 07:11:00 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2017-06-04 07:11:00 +0000
commit1f0b6c8afaa250047d74d092fa6bb75fc455fecf (patch)
tree2c6d11026a3bc1d27ec4be96162d2ac8b8e53aee
parent7958e157c086b5e0890eff445b46503f1cd1ed44 (diff)
parent8cede07e698cc1a15257a6b5dd653488e2bbf49e (diff)
downloadbuild_soong-1f0b6c8afaa250047d74d092fa6bb75fc455fecf.tar.gz
build_soong-1f0b6c8afaa250047d74d092fa6bb75fc455fecf.tar.bz2
build_soong-1f0b6c8afaa250047d74d092fa6bb75fc455fecf.zip
release-request-777c0f47-a42e-446a-b45c-0bb1aaa9612e-for-git_oc-release-4066915 snap-temp-L92300000070444114
Change-Id: I61a281fac9baf1686d9e24094444bca8d37e2706
-rw-r--r--android/paths.go4
-rw-r--r--cc/androidmk.go1
-rw-r--r--cc/builder.go26
-rw-r--r--cc/cc.go12
-rw-r--r--cc/library.go39
-rw-r--r--cc/makevars.go1
-rw-r--r--cc/sabi.go5
7 files changed, 73 insertions, 15 deletions
diff --git a/android/paths.go b/android/paths.go
index 75e5980e..bd0b70c1 100644
--- a/android/paths.go
+++ b/android/paths.go
@@ -584,10 +584,10 @@ func PathForVndkRefAbiDump(ctx ModuleContext, version, fileName string, vndkOrNd
var vndkOrNdkDir string
var ext string
if isSourceDump {
- ext = ".lsdump"
+ ext = ".lsdump.gz"
sourceOrBinaryDir = "source-based"
} else {
- ext = ".bdump"
+ ext = ".bdump.gz"
sourceOrBinaryDir = "binary-based"
}
if vndkOrNdk {
diff --git a/cc/androidmk.go b/cc/androidmk.go
index 9fbfa801..4137373e 100644
--- a/cc/androidmk.go
+++ b/cc/androidmk.go
@@ -146,6 +146,7 @@ func (library *libraryDecorator) AndroidMk(ctx AndroidMkContext, ret *android.An
fmt.Fprintln(w, "LOCAL_ADDITIONAL_DEPENDENCIES += ", library.sAbiOutputFile.String())
if library.sAbiDiff.Valid() && !library.static() {
fmt.Fprintln(w, "LOCAL_ADDITIONAL_DEPENDENCIES += ", library.sAbiDiff.String())
+ fmt.Fprintln(w, "HEADER_ABI_DIFFS += ", library.sAbiDiff.String())
}
}
diff --git a/cc/builder.go b/cc/builder.go
index 81ecd73e..8ae35a8d 100644
--- a/cc/builder.go
+++ b/cc/builder.go
@@ -171,9 +171,10 @@ var (
_ = pctx.SourcePathVariable("sAbiDumper", "prebuilts/build-tools/${config.HostPrebuiltTag}/bin/header-abi-dumper")
+ // -w has been added since header-abi-dumper does not need to produce any sort of diagnostic information.
sAbiDump = pctx.AndroidStaticRule("sAbiDump",
blueprint.RuleParams{
- Command: "rm -f $out && $sAbiDumper -o ${out} $in $exportDirs -- $cFlags -Wno-packed -Qunused-arguments -isystem ${config.RSIncludePath}",
+ Command: "rm -f $out && $sAbiDumper -o ${out} $in $exportDirs -- $cFlags -w -isystem ${config.RSIncludePath}",
CommandDeps: []string{"$sAbiDumper"},
Description: "header-abi-dumper $in -o $out $exportDirs",
},
@@ -192,14 +193,21 @@ var (
"symbolFile", "arch", "api", "exportedHeaderFlags")
_ = pctx.SourcePathVariable("sAbiDiffer", "prebuilts/build-tools/${config.HostPrebuiltTag}/bin/header-abi-diff")
+
// Abidiff check turned on in advice-only mode. Builds will not fail on abi incompatibilties / extensions.
sAbiDiff = pctx.AndroidStaticRule("sAbiDiff",
blueprint.RuleParams{
- Command: "$sAbiDiffer -advice-only -o ${out} -new $in -old $referenceDump",
+ Command: "$sAbiDiffer -lib $libName -arch $arch -advice-only -o ${out} -new $in -old $referenceDump",
CommandDeps: []string{"$sAbiDiffer"},
Description: "header-abi-diff -o ${out} -new $in -old $referenceDump",
},
- "referenceDump")
+ "referenceDump", "libName", "arch")
+
+ unzipRefSAbiDump = pctx.AndroidStaticRule("unzipRefSAbiDump",
+ blueprint.RuleParams{
+ Command: "gunzip -c $in > $out",
+ Description: "gunzip $out",
+ })
)
func init() {
@@ -640,6 +648,16 @@ func TransformDumpToLinkedDump(ctx android.ModuleContext, sAbiDumps android.Path
return android.OptionalPathForPath(outputFile)
}
+func UnzipRefDump(ctx android.ModuleContext, zippedRefDump android.Path, baseName string) android.Path {
+ outputFile := android.PathForModuleOut(ctx, baseName+"_ref.lsdump")
+ ctx.ModuleBuild(pctx, android.ModuleBuildParams{
+ Rule: unzipRefSAbiDump,
+ Output: outputFile,
+ Input: zippedRefDump,
+ })
+ return outputFile
+}
+
func SourceAbiDiff(ctx android.ModuleContext, inputDump android.Path, referenceDump android.Path,
baseName string) android.OptionalPath {
outputFile := android.PathForModuleOut(ctx, baseName+".abidiff")
@@ -650,6 +668,8 @@ func SourceAbiDiff(ctx android.ModuleContext, inputDump android.Path, referenceD
Implicit: referenceDump,
Args: map[string]string{
"referenceDump": referenceDump.String(),
+ "libName": baseName,
+ "arch": ctx.Arch().ArchType.Name,
},
})
return android.OptionalPathForPath(outputFile)
diff --git a/cc/cc.go b/cc/cc.go
index 6e2f6a50..a10aaaac 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -428,8 +428,7 @@ func (ctx *moduleContextImpl) vndk() bool {
// Create source abi dumps if the module belongs to the list of VndkLibraries.
func (ctx *moduleContextImpl) createVndkSourceAbiDump() bool {
- return ctx.ctx.Device() && (inList(ctx.baseModuleName(), config.LLndkLibraries())) ||
- (inList(ctx.baseModuleName(), config.VndkLibraries()))
+ return ctx.ctx.Device() && ((Bool(ctx.mod.Properties.Vendor_available)) || (inList(ctx.baseModuleName(), config.LLndkLibraries())))
}
func (ctx *moduleContextImpl) selectedStl() string {
@@ -917,6 +916,9 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
depPaths.ReexportedFlags = append(depPaths.ReexportedFlags, flags)
depPaths.ReexportedFlagsDeps = append(depPaths.ReexportedFlagsDeps,
genRule.GeneratedSourceFiles()...)
+ // Add these re-exported flags to help header-abi-dumper to infer the abi exported by a library.
+ c.sabi.Properties.ReexportedIncludeFlags = append(c.sabi.Properties.ReexportedIncludeFlags, flags)
+
}
} else {
ctx.ModuleErrorf("module %q is not a genrule", name)
@@ -963,6 +965,12 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
if t.reexportFlags {
depPaths.ReexportedFlags = append(depPaths.ReexportedFlags, flags...)
depPaths.ReexportedFlagsDeps = append(depPaths.ReexportedFlagsDeps, deps...)
+ // Add these re-exported flags to help header-abi-dumper to infer the abi exported by a library.
+ // Re-exported flags from shared library dependencies are not included as those shared libraries
+ // will be included in the vndk set.
+ if tag == staticExportDepTag || tag == headerExportDepTag {
+ c.sabi.Properties.ReexportedIncludeFlags = append(c.sabi.Properties.ReexportedIncludeFlags, flags...)
+ }
}
}
diff --git a/cc/library.go b/cc/library.go
index 167a5122..8a423aae 100644
--- a/cc/library.go
+++ b/cc/library.go
@@ -312,6 +312,27 @@ func (library *libraryDecorator) compilerFlags(ctx ModuleContext, flags Flags) F
return library.baseCompiler.compilerFlags(ctx, flags)
}
+func extractExportIncludesFromFlags(flags []string) []string {
+ // This method is used in the generation of rules which produce
+ // abi-dumps for source files. Exported headers are needed to infer the
+ // abi exported by a library and filter out the rest of the abi dumped
+ // from a source. We extract the include flags exported by a library.
+ // This includes the flags exported which are re-exported from static
+ // library dependencies, exported header library dependencies and
+ // generated header dependencies. Re-exported shared library include
+ // flags are not in this set since shared library dependencies will
+ // themselves be included in the vndk. -isystem headers are not included
+ // since for bionic libraries, abi-filtering is taken care of by version
+ // scripts.
+ var exportedIncludes []string
+ for _, flag := range flags {
+ if strings.HasPrefix(flag, "-I") {
+ exportedIncludes = append(exportedIncludes, flag)
+ }
+ }
+ return exportedIncludes
+}
+
func (library *libraryDecorator) compile(ctx ModuleContext, flags Flags, deps PathDeps) Objects {
if !library.buildShared() && !library.buildStatic() {
if len(library.baseCompiler.Properties.Srcs) > 0 {
@@ -325,13 +346,15 @@ func (library *libraryDecorator) compile(ctx ModuleContext, flags Flags, deps Pa
}
return Objects{}
}
- if ctx.createVndkSourceAbiDump() || (library.sabi.Properties.CreateSAbiDumps && ctx.Device()) {
+ if (ctx.createVndkSourceAbiDump() || (library.sabi.Properties.CreateSAbiDumps && ctx.Device())) && !ctx.Vendor() {
exportIncludeDirs := android.PathsForModuleSrc(ctx, library.flagExporter.Properties.Export_include_dirs)
var SourceAbiFlags []string
for _, dir := range exportIncludeDirs.Strings() {
- SourceAbiFlags = append(SourceAbiFlags, "-I "+dir)
+ SourceAbiFlags = append(SourceAbiFlags, "-I"+dir)
+ }
+ for _, reexportedInclude := range extractExportIncludesFromFlags(library.sabi.Properties.ReexportedIncludeFlags) {
+ SourceAbiFlags = append(SourceAbiFlags, reexportedInclude)
}
-
flags.SAbiFlags = SourceAbiFlags
total_length := len(library.baseCompiler.Properties.Srcs) + len(deps.GeneratedSources) + len(library.Properties.Shared.Srcs) +
len(library.Properties.Static.Srcs)
@@ -568,7 +591,7 @@ func (library *libraryDecorator) linkShared(ctx ModuleContext,
func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, objs Objects, fileName string) {
//Also take into account object re-use.
- if len(objs.sAbiDumpFiles) > 0 && ctx.createVndkSourceAbiDump() {
+ if len(objs.sAbiDumpFiles) > 0 && ctx.createVndkSourceAbiDump() && !ctx.Vendor() {
refSourceDumpFile := android.PathForVndkRefAbiDump(ctx, "current", fileName, vndkVsNdk(ctx), true)
versionScript := android.OptionalPathForModuleSrc(ctx, library.Properties.Version_script)
var symbolFile android.OptionalPath
@@ -578,12 +601,16 @@ func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, objs Objec
exportIncludeDirs := android.PathsForModuleSrc(ctx, library.flagExporter.Properties.Export_include_dirs)
var SourceAbiFlags []string
for _, dir := range exportIncludeDirs.Strings() {
- SourceAbiFlags = append(SourceAbiFlags, "-I "+dir)
+ SourceAbiFlags = append(SourceAbiFlags, "-I"+dir)
+ }
+ for _, reexportedInclude := range extractExportIncludesFromFlags(library.sabi.Properties.ReexportedIncludeFlags) {
+ SourceAbiFlags = append(SourceAbiFlags, reexportedInclude)
}
exportedHeaderFlags := strings.Join(SourceAbiFlags, " ")
library.sAbiOutputFile = TransformDumpToLinkedDump(ctx, objs.sAbiDumpFiles, symbolFile, "current", fileName, exportedHeaderFlags)
if refSourceDumpFile.Valid() {
- library.sAbiDiff = SourceAbiDiff(ctx, library.sAbiOutputFile.Path(), refSourceDumpFile.Path(), fileName)
+ unzippedRefDump := UnzipRefDump(ctx, refSourceDumpFile.Path(), fileName)
+ library.sAbiDiff = SourceAbiDiff(ctx, library.sAbiOutputFile.Path(), unzippedRefDump, fileName)
}
}
}
diff --git a/cc/makevars.go b/cc/makevars.go
index 7ff16529..92feccc0 100644
--- a/cc/makevars.go
+++ b/cc/makevars.go
@@ -42,6 +42,7 @@ func makeVarsProvider(ctx android.MakeVarsContext) {
ctx.Strict("RS_LLVM_PREBUILTS_VERSION", "${config.RSClangVersion}")
ctx.Strict("RS_LLVM_PREBUILTS_BASE", "${config.RSClangBase}")
ctx.Strict("RS_LLVM_PREBUILTS_PATH", "${config.RSLLVMPrebuiltsPath}")
+ ctx.Strict("RS_LLVM_INCLUDES", "${config.RSIncludePath}")
ctx.Strict("RS_CLANG", "${config.RSLLVMPrebuiltsPath}/clang")
ctx.Strict("RS_LLVM_AS", "${config.RSLLVMPrebuiltsPath}/llvm-as")
ctx.Strict("RS_LLVM_LINK", "${config.RSLLVMPrebuiltsPath}/llvm-link")
diff --git a/cc/sabi.go b/cc/sabi.go
index 7ae31c97..01ef737f 100644
--- a/cc/sabi.go
+++ b/cc/sabi.go
@@ -22,7 +22,8 @@ import (
)
type SAbiProperties struct {
- CreateSAbiDumps bool `blueprint:"mutated"`
+ CreateSAbiDumps bool `blueprint:"mutated"`
+ ReexportedIncludeFlags []string
}
type sabi struct {
@@ -45,7 +46,7 @@ func (sabimod *sabi) flags(ctx ModuleContext, flags Flags) Flags {
func sabiDepsMutator(mctx android.TopDownMutatorContext) {
if c, ok := mctx.Module().(*Module); ok &&
- ((inList(c.Name(), config.VndkLibraries())) || (inList(c.Name(), config.LLndkLibraries())) ||
+ (Bool(c.Properties.Vendor_available) || (inList(c.Name(), config.LLndkLibraries())) ||
(c.sabi != nil && c.sabi.Properties.CreateSAbiDumps)) {
mctx.VisitDirectDeps(func(m blueprint.Module) {
tag := mctx.OtherModuleDependencyTag(m)