diff options
Diffstat (limited to 'cc')
| -rw-r--r-- | cc/androidmk.go | 7 | ||||
| -rw-r--r-- | cc/builder.go | 95 | ||||
| -rw-r--r-- | cc/cc.go | 26 | ||||
| -rw-r--r-- | cc/config/global.go | 7 | ||||
| -rw-r--r-- | cc/coverage.go | 2 | ||||
| -rw-r--r-- | cc/library.go | 2 | ||||
| -rw-r--r-- | cc/test.go | 8 |
7 files changed, 113 insertions, 34 deletions
diff --git a/cc/androidmk.go b/cc/androidmk.go index 671adb55f..3ce1a8955 100644 --- a/cc/androidmk.go +++ b/cc/androidmk.go @@ -149,7 +149,7 @@ func (c *Module) AndroidMkEntries() []android.AndroidMkEntries { return []android.AndroidMkEntries{entries} } -func androidMkWriteTestData(data android.Paths, ctx AndroidMkContext, entries *android.AndroidMkEntries) { +func AndroidMkDataPaths(data android.Paths) []string { var testFiles []string for _, d := range data { rel := d.Rel() @@ -160,6 +160,11 @@ func androidMkWriteTestData(data android.Paths, ctx AndroidMkContext, entries *a path = strings.TrimSuffix(path, rel) testFiles = append(testFiles, path+":"+rel) } + return testFiles +} + +func androidMkWriteTestData(data android.Paths, ctx AndroidMkContext, entries *android.AndroidMkEntries) { + testFiles := AndroidMkDataPaths(data) if len(testFiles) > 0 { entries.ExtraEntries = append(entries.ExtraEntries, func(entries *android.AndroidMkEntries) { entries.AddStrings("LOCAL_TEST_DATA", testFiles...) diff --git a/cc/builder.go b/cc/builder.go index 4e8f1fa59..e571e5a0c 100644 --- a/cc/builder.go +++ b/cc/builder.go @@ -99,6 +99,15 @@ var ( }, "arCmd", "arFlags") + arWithLibs = pctx.AndroidStaticRule("arWithLibs", + blueprint.RuleParams{ + Command: "rm -f ${out} && $arCmd $arObjFlags $out @${out}.rsp && $arCmd $arLibFlags $out $arLibs", + CommandDeps: []string{"$arCmd"}, + Rspfile: "${out}.rsp", + RspfileContent: "${arObjs}", + }, + "arCmd", "arObjFlags", "arObjs", "arLibFlags", "arLibs") + darwinStrip = pctx.AndroidStaticRule("darwinStrip", blueprint.RuleParams{ Command: "${config.MacStripPath} -u -r -o $out $in", @@ -207,15 +216,23 @@ var ( }, []string{"cFlags", "exportDirs"}, nil) _ = pctx.SourcePathVariable("sAbiLinker", "prebuilts/clang-tools/${config.HostPrebuiltTag}/bin/header-abi-linker") + _ = pctx.SourcePathVariable("sAbiLinkerLibs", "prebuilts/clang-tools/${config.HostPrebuiltTag}/lib64") - sAbiLink = pctx.AndroidStaticRule("sAbiLink", + sAbiLink, sAbiLinkRE = remoteexec.StaticRules(pctx, "sAbiLink", blueprint.RuleParams{ - Command: "$sAbiLinker -o ${out} $symbolFilter -arch $arch $exportedHeaderFlags @${out}.rsp ", + Command: "$reTemplate$sAbiLinker -o ${out} $symbolFilter -arch $arch $exportedHeaderFlags @${out}.rsp ", CommandDeps: []string{"$sAbiLinker"}, Rspfile: "${out}.rsp", RspfileContent: "${in}", - }, - "symbolFilter", "arch", "exportedHeaderFlags") + }, &remoteexec.REParams{ + Labels: map[string]string{"type": "tool", "name": "abi-linker"}, + ExecStrategy: "${config.REAbiLinkerExecStrategy}", + Inputs: []string{"$sAbiLinkerLibs", "${out}.rsp", "$implicits"}, + RSPFile: "${out}.rsp", + OutputFiles: []string{"$out"}, + ToolchainInputs: []string{"$sAbiLinker"}, + Platform: map[string]string{remoteexec.PoolKey: "${config.RECXXPool}"}, + }, []string{"symbolFilter", "arch", "exportedHeaderFlags"}, []string{"implicits"}) _ = pctx.SourcePathVariable("sAbiDiffer", "prebuilts/clang-tools/${config.HostPrebuiltTag}/bin/header-abi-diff") @@ -601,26 +618,45 @@ func TransformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles and } // Generate a rule for compiling multiple .o files to a static library (.a) -func TransformObjToStaticLib(ctx android.ModuleContext, objFiles android.Paths, +func TransformObjToStaticLib(ctx android.ModuleContext, + objFiles android.Paths, wholeStaticLibs android.Paths, flags builderFlags, outputFile android.ModuleOutPath, deps android.Paths) { arCmd := "${config.ClangBin}/llvm-ar" - arFlags := "crsPD" + arFlags := "" if !ctx.Darwin() { arFlags += " -format=gnu" } - ctx.Build(pctx, android.BuildParams{ - Rule: ar, - Description: "static link " + outputFile.Base(), - Output: outputFile, - Inputs: objFiles, - Implicits: deps, - Args: map[string]string{ - "arFlags": arFlags, - "arCmd": arCmd, - }, - }) + if len(wholeStaticLibs) == 0 { + ctx.Build(pctx, android.BuildParams{ + Rule: ar, + Description: "static link " + outputFile.Base(), + Output: outputFile, + Inputs: objFiles, + Implicits: deps, + Args: map[string]string{ + "arFlags": "crsPD" + arFlags, + "arCmd": arCmd, + }, + }) + + } else { + ctx.Build(pctx, android.BuildParams{ + Rule: arWithLibs, + Description: "static link " + outputFile.Base(), + Output: outputFile, + Inputs: append(objFiles, wholeStaticLibs...), + Implicits: deps, + Args: map[string]string{ + "arCmd": arCmd, + "arObjFlags": "crsPD" + arFlags, + "arObjs": strings.Join(objFiles.Strings(), " "), + "arLibFlags": "cqsL" + arFlags, + "arLibs": strings.Join(wholeStaticLibs.Strings(), " "), + }, + }) + } } // Generate a rule for compiling multiple .o files, plus static libraries, whole static libraries, @@ -724,17 +760,30 @@ func TransformDumpToLinkedDump(ctx android.ModuleContext, sAbiDumps android.Path for _, tag := range excludedSymbolTags { symbolFilterStr += " --exclude-symbol-tag " + tag } + rule := sAbiLink + args := map[string]string{ + "symbolFilter": symbolFilterStr, + "arch": ctx.Arch().ArchType.Name, + "exportedHeaderFlags": exportedHeaderFlags, + } + if ctx.Config().IsEnvTrue("RBE_ABI_LINKER") { + rule = sAbiLinkRE + rbeImplicits := implicits.Strings() + for _, p := range strings.Split(exportedHeaderFlags, " ") { + if len(p) > 2 { + // Exclude the -I prefix. + rbeImplicits = append(rbeImplicits, p[2:]) + } + } + args["implicits"] = strings.Join(rbeImplicits, ",") + } ctx.Build(pctx, android.BuildParams{ - Rule: sAbiLink, + Rule: rule, Description: "header-abi-linker " + outputFile.Base(), Output: outputFile, Inputs: sAbiDumps, Implicits: implicits, - Args: map[string]string{ - "symbolFilter": symbolFilterStr, - "arch": ctx.Arch().ArchType.Name, - "exportedHeaderFlags": exportedHeaderFlags, - }, + Args: args, }) return android.OptionalPathForPath(outputFile) } @@ -124,10 +124,16 @@ type PathDeps struct { StaticLibs, LateStaticLibs, WholeStaticLibs android.Paths // Paths to .o files - Objs Objects + Objs Objects + // Paths to .o files in dependencies that provide them. Note that these lists + // aren't complete since prebuilt modules don't provide the .o files. StaticLibObjs Objects WholeStaticLibObjs Objects + // Paths to .a files in prebuilts. Complements WholeStaticLibObjs to contain + // the libs from all whole_static_lib dependencies. + WholeStaticLibsFromPrebuilts android.Paths + // Paths to generated source files GeneratedSources android.Paths GeneratedHeaders android.Paths @@ -1395,6 +1401,15 @@ func (c *Module) IsTestPerSrcAllTestsVariation() bool { return ok && test.isAllTestsVariation() } +func (c *Module) DataPaths() android.Paths { + if p, ok := c.installer.(interface { + dataPaths() android.Paths + }); ok { + return p.dataPaths() + } + return nil +} + func (c *Module) getNameSuffixWithVndkVersion(ctx android.ModuleContext) string { // Returns the name suffix for product and vendor variants. If the VNDK version is not // "current", it will append the VNDK version to the name suffix. @@ -2473,7 +2488,11 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { } ctx.AddMissingDependencies(missingDeps) } - depPaths.WholeStaticLibObjs = depPaths.WholeStaticLibObjs.Append(staticLib.objs()) + if _, ok := ccWholeStaticLib.linker.(prebuiltLinkerInterface); ok { + depPaths.WholeStaticLibsFromPrebuilts = append(depPaths.WholeStaticLibsFromPrebuilts, linkFile.Path()) + } else { + depPaths.WholeStaticLibObjs = depPaths.WholeStaticLibObjs.Append(staticLib.objs()) + } } else { ctx.ModuleErrorf( "non-cc.Modules cannot be included as whole static libraries.", depName) @@ -2862,6 +2881,9 @@ func (c *Module) DepIsInSameApex(ctx android.BaseModuleContext, dep android.Modu return false } } + } else if ctx.OtherModuleDependencyTag(dep) == llndkImplDep { + // We don't track beyond LLNDK + return false } return true } diff --git a/cc/config/global.go b/cc/config/global.go index 4e51ae924..1dd8a2d03 100644 --- a/cc/config/global.go +++ b/cc/config/global.go @@ -162,7 +162,7 @@ func init() { // http://b/131390872 // Automatically initialize any uninitialized stack variables. - // Prefer zero-init if both options are set. + // Prefer zero-init if multiple options are set. if ctx.Config().IsEnvTrue("AUTO_ZERO_INITIALIZE") { flags = append(flags, "-ftrivial-auto-var-init=zero -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang") } else if ctx.Config().IsEnvTrue("AUTO_PATTERN_INITIALIZE") { @@ -170,8 +170,8 @@ func init() { } else if ctx.Config().IsEnvTrue("AUTO_UNINITIALIZE") { flags = append(flags, "-ftrivial-auto-var-init=uninitialized") } else { - // Default to pattern initialization. - flags = append(flags, "-ftrivial-auto-var-init=pattern") + // Default to zero initialization. + flags = append(flags, "-ftrivial-auto-var-init=zero -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang") } return strings.Join(flags, " ") @@ -261,6 +261,7 @@ func init() { pctx.VariableFunc("RECXXLinksPool", remoteexec.EnvOverrideFunc("RBE_CXX_LINKS_POOL", remoteexec.DefaultPool)) pctx.VariableFunc("RECXXLinksExecStrategy", remoteexec.EnvOverrideFunc("RBE_CXX_LINKS_EXEC_STRATEGY", remoteexec.LocalExecStrategy)) pctx.VariableFunc("REAbiDumperExecStrategy", remoteexec.EnvOverrideFunc("RBE_ABI_DUMPER_EXEC_STRATEGY", remoteexec.LocalExecStrategy)) + pctx.VariableFunc("REAbiLinkerExecStrategy", remoteexec.EnvOverrideFunc("RBE_ABI_LINKER_EXEC_STRATEGY", remoteexec.LocalExecStrategy)) } var HostPrebuiltTag = pctx.VariableConfigMethod("HostPrebuiltTag", android.Config.PrebuiltOS) diff --git a/cc/coverage.go b/cc/coverage.go index cc9a1adab..f885fcbc2 100644 --- a/cc/coverage.go +++ b/cc/coverage.go @@ -92,7 +92,7 @@ func (cov *coverage) flags(ctx ModuleContext, flags Flags, deps PathDeps) (Flags // flags that the module may use. flags.Local.CFlags = append(flags.Local.CFlags, "-Wno-frame-larger-than=", "-O0") } else if clangCoverage { - flags.Local.CommonFlags = append(flags.Local.CommonFlags, "-fprofile-instr-generate", "-fcoverage-mapping") + flags.Local.CommonFlags = append(flags.Local.CommonFlags, "-fprofile-instr-generate", "-fcoverage-mapping", "-Wno-pass-failed") } } diff --git a/cc/library.go b/cc/library.go index ecea2ea54..47485ce1c 100644 --- a/cc/library.go +++ b/cc/library.go @@ -874,7 +874,7 @@ func (library *libraryDecorator) linkStatic(ctx ModuleContext, } } - TransformObjToStaticLib(ctx, library.objects.objFiles, builderFlags, outputFile, objs.tidyFiles) + TransformObjToStaticLib(ctx, library.objects.objFiles, deps.WholeStaticLibsFromPrebuilts, builderFlags, outputFile, objs.tidyFiles) library.coverageOutputFile = TransformCoverageFilesToZip(ctx, library.objects, ctx.ModuleName()) diff --git a/cc/test.go b/cc/test.go index b1f8eec53..2439c9465 100644 --- a/cc/test.go +++ b/cc/test.go @@ -160,6 +160,10 @@ func (test *testBinary) srcs() []string { return test.baseCompiler.Properties.Srcs } +func (test *testBinary) dataPaths() android.Paths { + return test.data +} + func (test *testBinary) isAllTestsVariation() bool { stem := test.binaryDecorator.Properties.Stem return stem != nil && *stem == "" @@ -345,9 +349,7 @@ func (test *testBinary) install(ctx ModuleContext, file android.Path) { } if Bool(test.Properties.Disable_framework) { var options []tradefed.Option - options = append(options, tradefed.Option{Name: "run-command", Value: "stop"}) - options = append(options, tradefed.Option{Name: "teardown-command", Value: "start"}) - configs = append(configs, tradefed.Object{"target_preparer", "com.android.tradefed.targetprep.RunCommandTargetPreparer", options}) + configs = append(configs, tradefed.Object{"target_preparer", "com.android.tradefed.targetprep.StopServicesSetup", options}) } if Bool(test.testDecorator.Properties.Isolated) { configs = append(configs, tradefed.Option{Name: "not-shardable", Value: "true"}) |