diff options
author | Colin Cross <ccross@android.com> | 2016-08-29 16:14:13 -0700 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2016-08-31 09:48:08 -0700 |
commit | 9d45bb78c52d160d5bf73f2a485401d394f559b9 (patch) | |
tree | 67bf21333066406fd7edc618a20d32cac0b1908d | |
parent | 3cfaba1654e12fed152844d94a92a8d8aec668f0 (diff) | |
download | build_soong-9d45bb78c52d160d5bf73f2a485401d394f559b9.tar.gz build_soong-9d45bb78c52d160d5bf73f2a485401d394f559b9.tar.bz2 build_soong-9d45bb78c52d160d5bf73f2a485401d394f559b9.zip |
Enable goma in soong
When the UseGoma flag is set, put all rules except the C compilation
rule in an externally defined local_pool, which will have been created
by kati. The gomacc wrapper will already be in the CC_WRAPPER
environment variable.
Bug: 31142427
Change-Id: I699d4edff2e302eee398dad8692ceb14721a628c
-rw-r--r-- | android/config.go | 4 | ||||
-rw-r--r-- | android/defs.go | 15 | ||||
-rw-r--r-- | android/glob.go | 2 | ||||
-rw-r--r-- | android/package_ctx.go | 32 | ||||
-rw-r--r-- | android/variable.go | 1 | ||||
-rw-r--r-- | cc/builder.go | 22 | ||||
-rw-r--r-- | cc/gen.go | 4 | ||||
-rw-r--r-- | cc/ndk_library.go | 2 | ||||
-rw-r--r-- | java/app_builder.go | 10 | ||||
-rw-r--r-- | java/builder.go | 10 | ||||
-rw-r--r-- | java/gen.go | 6 |
11 files changed, 74 insertions, 34 deletions
diff --git a/android/config.go b/android/config.go index 21a72339..b7aac02d 100644 --- a/android/config.go +++ b/android/config.go @@ -369,6 +369,10 @@ func (c *config) Android64() bool { return false } +func (c *config) UseGoma() bool { + return Bool(c.ProductVariables.UseGoma) +} + func (c *config) LibartImgHostBaseAddress() string { return "0x60000000" } diff --git a/android/defs.go b/android/defs.go index 9c6527d5..6e28de72 100644 --- a/android/defs.go +++ b/android/defs.go @@ -28,7 +28,7 @@ var ( // A phony rule that is not the built-in Ninja phony rule. The built-in // phony rule has special behavior that is sometimes not desired. See the // Ninja docs for more details. - Phony = pctx.StaticRule("Phony", + Phony = pctx.AndroidStaticRule("Phony", blueprint.RuleParams{ Command: "# phony $out", Description: "phony $out", @@ -37,7 +37,7 @@ var ( // GeneratedFile is a rule for indicating that a given file was generated // while running soong. This allows the file to be cleaned up if it ever // stops being generated by soong. - GeneratedFile = pctx.StaticRule("GeneratedFile", + GeneratedFile = pctx.AndroidStaticRule("GeneratedFile", blueprint.RuleParams{ Command: "# generated $out", Description: "generated $out", @@ -45,7 +45,7 @@ var ( }) // A copy rule. - Cp = pctx.StaticRule("Cp", + Cp = pctx.AndroidStaticRule("Cp", blueprint.RuleParams{ Command: "cp $cpPreserveSymlinks $cpFlags $in $out", Description: "cp $out", @@ -53,26 +53,29 @@ var ( "cpFlags") // A timestamp touch rule. - Touch = pctx.StaticRule("Touch", + Touch = pctx.AndroidStaticRule("Touch", blueprint.RuleParams{ Command: "touch $out", Description: "touch $out", }) // A symlink rule. - Symlink = pctx.StaticRule("Symlink", + Symlink = pctx.AndroidStaticRule("Symlink", blueprint.RuleParams{ Command: "ln -f -s $fromPath $out", Description: "symlink $out", }, "fromPath") - ErrorRule = pctx.StaticRule("Error", + ErrorRule = pctx.AndroidStaticRule("Error", blueprint.RuleParams{ Command: `echo "$error" && false`, Description: "error building $out", }, "error") + + // Used only when USE_GOMA=true is set, to restrict non-goma jobs to the local parallelism value + localPool = blueprint.NewBuiltinPool("local_pool") ) func init() { diff --git a/android/glob.go b/android/glob.go index 34b3de40..0457cbcf 100644 --- a/android/glob.go +++ b/android/glob.go @@ -43,7 +43,7 @@ var ( // globRule rule traverses directories to produce a list of files that match $glob // and writes it to $out if it has changed, and writes the directories to $out.d - globRule = pctx.StaticRule("globRule", + globRule = pctx.AndroidStaticRule("globRule", blueprint.RuleParams{ Command: fmt.Sprintf(`%s -o $out $excludes "$glob"`, globCmd), CommandDeps: []string{globCmd}, diff --git a/android/package_ctx.go b/android/package_ctx.go index 56ba2d82..ee826c81 100644 --- a/android/package_ctx.go +++ b/android/package_ctx.go @@ -131,3 +131,35 @@ func (p AndroidPackageContext) PrefixedPathsForOptionalSourceVariable( return JoinWithPrefix(paths.Strings(), prefix), nil }) } + +type RuleParams struct { + blueprint.RuleParams + GomaSupported bool +} + +// AndroidStaticRule wraps blueprint.StaticRule and provides a default Pool if none is specified +func (p AndroidPackageContext) AndroidStaticRule(name string, params blueprint.RuleParams, + argNames ...string) blueprint.Rule { + return p.AndroidRuleFunc(name, func(interface{}) (blueprint.RuleParams, error) { + return params, nil + }, argNames...) +} + +// AndroidGomaStaticRule wraps blueprint.StaticRule but uses goma's parallelism if goma is enabled +func (p AndroidPackageContext) AndroidGomaStaticRule(name string, params blueprint.RuleParams, + argNames ...string) blueprint.Rule { + return p.StaticRule(name, params, argNames...) +} + +func (p AndroidPackageContext) AndroidRuleFunc(name string, + f func(interface{}) (blueprint.RuleParams, error), argNames ...string) blueprint.Rule { + return p.PackageContext.RuleFunc(name, func(config interface{}) (blueprint.RuleParams, error) { + params, err := f(config) + if config.(Config).UseGoma() && params.Pool == nil { + // When USE_GOMA=true is set and the rule is not supported by goma, restrict jobs to the + // local parallelism value + params.Pool = localPool + } + return params, err + }, argNames...) +} diff --git a/android/variable.go b/android/variable.go index be2407d1..b99e4855 100644 --- a/android/variable.go +++ b/android/variable.go @@ -101,6 +101,7 @@ type productVariables struct { Cpusets *bool `json:",omitempty"` Schedboost *bool `json:",omitempty"` Binder32bit *bool `json:",omitempty"` + UseGoma *bool `json:",omitempty"` DevicePrefer32BitExecutables *bool `json:",omitempty"` HostPrefer32BitExecutables *bool `json:",omitempty"` diff --git a/cc/builder.go b/cc/builder.go index f016cbda..a84ba08e 100644 --- a/cc/builder.go +++ b/cc/builder.go @@ -39,7 +39,7 @@ const ( var ( pctx = android.NewPackageContext("android/soong/cc") - cc = pctx.StaticRule("cc", + cc = pctx.AndroidGomaStaticRule("cc", blueprint.RuleParams{ Depfile: "${out}.d", Deps: blueprint.DepsGCC, @@ -49,7 +49,7 @@ var ( }, "ccCmd", "cFlags") - ld = pctx.StaticRule("ld", + ld = pctx.AndroidStaticRule("ld", blueprint.RuleParams{ Command: "$ldCmd ${crtBegin} @${out}.rsp " + "${libFlags} ${crtEnd} -o ${out} ${ldFlags}", @@ -60,7 +60,7 @@ var ( }, "ldCmd", "crtBegin", "libFlags", "crtEnd", "ldFlags") - partialLd = pctx.StaticRule("partialLd", + partialLd = pctx.AndroidStaticRule("partialLd", blueprint.RuleParams{ Command: "$ldCmd -nostdlib -Wl,-r ${in} -o ${out} ${ldFlags}", CommandDeps: []string{"$ldCmd"}, @@ -68,7 +68,7 @@ var ( }, "ldCmd", "ldFlags") - ar = pctx.StaticRule("ar", + ar = pctx.AndroidStaticRule("ar", blueprint.RuleParams{ Command: "rm -f ${out} && $arCmd $arFlags $out @${out}.rsp", CommandDeps: []string{"$arCmd"}, @@ -78,7 +78,7 @@ var ( }, "arCmd", "arFlags") - darwinAr = pctx.StaticRule("darwinAr", + darwinAr = pctx.AndroidStaticRule("darwinAr", blueprint.RuleParams{ Command: "rm -f ${out} && ${config.MacArPath} $arFlags $out $in", CommandDeps: []string{"${config.MacArPath}"}, @@ -86,7 +86,7 @@ var ( }, "arFlags") - darwinAppendAr = pctx.StaticRule("darwinAppendAr", + darwinAppendAr = pctx.AndroidStaticRule("darwinAppendAr", blueprint.RuleParams{ Command: "cp -f ${inAr} ${out}.tmp && ${config.MacArPath} $arFlags ${out}.tmp $in && mv ${out}.tmp ${out}", CommandDeps: []string{"${config.MacArPath}", "${inAr}"}, @@ -94,14 +94,14 @@ var ( }, "arFlags", "inAr") - darwinStrip = pctx.StaticRule("darwinStrip", + darwinStrip = pctx.AndroidStaticRule("darwinStrip", blueprint.RuleParams{ Command: "${config.MacStripPath} -u -r -o $out $in", CommandDeps: []string{"${config.MacStripPath}"}, Description: "strip $out", }) - prefixSymbols = pctx.StaticRule("prefixSymbols", + prefixSymbols = pctx.AndroidStaticRule("prefixSymbols", blueprint.RuleParams{ Command: "$objcopyCmd --prefix-symbols=${prefix} ${in} ${out}", CommandDeps: []string{"$objcopyCmd"}, @@ -111,7 +111,7 @@ var ( stripPath = pctx.SourcePathVariable("stripPath", "build/soong/scripts/strip.sh") - strip = pctx.StaticRule("strip", + strip = pctx.AndroidStaticRule("strip", blueprint.RuleParams{ Depfile: "${out}.d", Deps: blueprint.DepsGCC, @@ -121,7 +121,7 @@ var ( }, "args", "crossCompile") - emptyFile = pctx.StaticRule("emptyFile", + emptyFile = pctx.AndroidStaticRule("emptyFile", blueprint.RuleParams{ Command: "rm -f $out && touch $out", Description: "empty file $out", @@ -129,7 +129,7 @@ var ( copyGccLibPath = pctx.SourcePathVariable("copyGccLibPath", "build/soong/scripts/copygcclib.sh") - copyGccLib = pctx.StaticRule("copyGccLib", + copyGccLib = pctx.AndroidStaticRule("copyGccLib", blueprint.RuleParams{ Depfile: "${out}.d", Deps: blueprint.DepsGCC, @@ -31,7 +31,7 @@ func init() { } var ( - yacc = pctx.StaticRule("yacc", + yacc = pctx.AndroidStaticRule("yacc", blueprint.RuleParams{ Command: "BISON_PKGDATADIR=$yaccDataDir $yaccCmd -d $yaccFlags --defines=$hFile -o $cFile $in", CommandDeps: []string{"$yaccCmd"}, @@ -39,7 +39,7 @@ var ( }, "yaccFlags", "cFile", "hFile") - lex = pctx.StaticRule("lex", + lex = pctx.AndroidStaticRule("lex", blueprint.RuleParams{ Command: "$lexCmd -o$out $in", CommandDeps: []string{"$lexCmd"}, diff --git a/cc/ndk_library.go b/cc/ndk_library.go index b0fd398f..37ce2687 100644 --- a/cc/ndk_library.go +++ b/cc/ndk_library.go @@ -28,7 +28,7 @@ import ( var ( toolPath = pctx.SourcePathVariable("toolPath", "build/soong/cc/gen_stub_libs.py") - genStubSrc = pctx.StaticRule("genStubSrc", + genStubSrc = pctx.AndroidStaticRule("genStubSrc", blueprint.RuleParams{ Command: "$toolPath --arch $arch --api $apiLevel $in $out", Description: "genStubSrc $out", diff --git a/java/app_builder.go b/java/app_builder.go index d8f2571c..bbd3dac4 100644 --- a/java/app_builder.go +++ b/java/app_builder.go @@ -27,7 +27,7 @@ import ( ) var ( - aaptCreateResourceJavaFile = pctx.StaticRule("aaptCreateResourceJavaFile", + aaptCreateResourceJavaFile = pctx.AndroidStaticRule("aaptCreateResourceJavaFile", blueprint.RuleParams{ Command: `rm -rf "$javaDir" && mkdir -p "$javaDir" && ` + `$aaptCmd package -m $aaptFlags -P $publicResourcesFile -G $proguardOptionsFile ` + @@ -38,7 +38,7 @@ var ( }, "aaptFlags", "publicResourcesFile", "proguardOptionsFile", "javaDir", "javaFileList") - aaptCreateAssetsPackage = pctx.StaticRule("aaptCreateAssetsPackage", + aaptCreateAssetsPackage = pctx.AndroidStaticRule("aaptCreateAssetsPackage", blueprint.RuleParams{ Command: `rm -f $out && $aaptCmd package $aaptFlags -F $out`, CommandDeps: []string{"$aaptCmd"}, @@ -46,7 +46,7 @@ var ( }, "aaptFlags", "publicResourcesFile", "proguardOptionsFile", "javaDir", "javaFileList") - aaptAddResources = pctx.StaticRule("aaptAddResources", + aaptAddResources = pctx.AndroidStaticRule("aaptAddResources", blueprint.RuleParams{ // TODO: add-jni-shared-libs-to-package Command: `cp -f $in $out.tmp && $aaptCmd package -u $aaptFlags -F $out.tmp && mv $out.tmp $out`, @@ -55,7 +55,7 @@ var ( }, "aaptFlags") - signapk = pctx.StaticRule("signapk", + signapk = pctx.AndroidStaticRule("signapk", blueprint.RuleParams{ Command: `java -jar $signapkCmd $certificates $in $out`, CommandDeps: []string{"$signapkCmd"}, @@ -63,7 +63,7 @@ var ( }, "certificates") - androidManifestMerger = pctx.StaticRule("androidManifestMerger", + androidManifestMerger = pctx.AndroidStaticRule("androidManifestMerger", blueprint.RuleParams{ Command: "java -classpath $androidManifestMergerCmd com.android.manifmerger.Main merge " + "--main $in --libs $libsManifests --out $out", diff --git a/java/builder.go b/java/builder.go index f674f980..a9da0fc0 100644 --- a/java/builder.go +++ b/java/builder.go @@ -37,7 +37,7 @@ var ( // this, all java rules write into separate directories and then a post-processing step lists // the files in the the directory into a list file that later rules depend on (and sometimes // read from directly using @<listfile>) - javac = pctx.StaticRule("javac", + javac = pctx.AndroidStaticRule("javac", blueprint.RuleParams{ Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` + `$javacCmd -encoding UTF-8 $javacFlags $bootClasspath $classpath ` + @@ -49,7 +49,7 @@ var ( }, "javacCmd", "javacFlags", "bootClasspath", "classpath", "outDir") - jar = pctx.StaticRule("jar", + jar = pctx.AndroidStaticRule("jar", blueprint.RuleParams{ Command: `$jarCmd -o $out $jarArgs`, CommandDeps: []string{"$jarCmd"}, @@ -57,7 +57,7 @@ var ( }, "jarCmd", "jarArgs") - dx = pctx.StaticRule("dx", + dx = pctx.AndroidStaticRule("dx", blueprint.RuleParams{ Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` + `$dxCmd --dex --output=$outDir $dxFlags $in || ( rm -rf "$outDir"; exit 41 ) && ` + @@ -67,7 +67,7 @@ var ( }, "outDir", "dxFlags") - jarjar = pctx.StaticRule("jarjar", + jarjar = pctx.AndroidStaticRule("jarjar", blueprint.RuleParams{ Command: "java -jar $jarjarCmd process $rulesFile $in $out", CommandDeps: []string{"$jarjarCmd", "$rulesFile"}, @@ -75,7 +75,7 @@ var ( }, "rulesFile") - extractPrebuilt = pctx.StaticRule("extractPrebuilt", + extractPrebuilt = pctx.AndroidStaticRule("extractPrebuilt", blueprint.RuleParams{ Command: `rm -rf $outDir && unzip -qo $in -d $outDir && ` + `find $outDir -name "*.class" > $classFile && ` + diff --git a/java/gen.go b/java/gen.go index 57c4ba27..52a0c799 100644 --- a/java/gen.go +++ b/java/gen.go @@ -33,7 +33,7 @@ func init() { } var ( - aidl = pctx.StaticRule("aidl", + aidl = pctx.AndroidStaticRule("aidl", blueprint.RuleParams{ Command: "$aidlCmd -d$depFile $aidlFlags $in $out", CommandDeps: []string{"$aidlCmd"}, @@ -41,14 +41,14 @@ var ( }, "depFile", "aidlFlags") - logtags = pctx.StaticRule("logtags", + logtags = pctx.AndroidStaticRule("logtags", blueprint.RuleParams{ Command: "$logtagsCmd -o $out $in $allLogtagsFile", CommandDeps: []string{"$logtagsCmd"}, Description: "logtags $out", }) - mergeLogtags = pctx.StaticRule("mergeLogtags", + mergeLogtags = pctx.AndroidStaticRule("mergeLogtags", blueprint.RuleParams{ Command: "$mergeLogtagsCmd -o $out $in", CommandDeps: []string{"$mergeLogtagsCmd"}, |