aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Willemsen <dwillemsen@google.com>2018-02-21 18:28:18 -0800
committerDan Willemsen <dwillemsen@google.com>2018-02-22 02:37:01 +0000
commit9da9d49ede01c762ac76b604dc4ab3ce24658c1c (patch)
tree57b3255c7b7aba8adbabb8c310f9e900746b930d
parent431e17af07c625cfbe68f82fb8503a6229a9dd87 (diff)
downloadbuild_soong-9da9d49ede01c762ac76b604dc4ab3ce24658c1c.tar.gz
build_soong-9da9d49ede01c762ac76b604dc4ab3ce24658c1c.tar.bz2
build_soong-9da9d49ede01c762ac76b604dc4ab3ce24658c1c.zip
Only depend on a single file for generated headers
While the rule may really need all of the generated header files to exist, only one of them (per genrule task) needs to be in the dependency list, since the rest are essentially aliases. This brings an AOSP aosp_arm-userdebug out/soong/build.ninja file from 372MB to 156MB, with equivalent functionality. The Android-aosp_arm.mk file is reduced from 11MB to 6.5MB. Bug: 73745773 Test: diff out/soong/build.ninja Test: diff out/soong/Android-aosp_arm.mk Test: rm -rf out; m Change-Id: If17377666292cc20957417fc4c3cd52f98971d0c
-rw-r--r--cc/cc.go4
-rw-r--r--genrule/genrule.go7
2 files changed, 9 insertions, 2 deletions
diff --git a/cc/cc.go b/cc/cc.go
index f65441fa..05a1579b 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -1138,13 +1138,13 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
case genHeaderDepTag, genHeaderExportDepTag:
if genRule, ok := dep.(genrule.SourceFileGenerator); ok {
depPaths.GeneratedHeaders = append(depPaths.GeneratedHeaders,
- genRule.GeneratedSourceFiles()...)
+ genRule.GeneratedDeps()...)
flags := includeDirsToFlags(genRule.GeneratedHeaderDirs())
depPaths.Flags = append(depPaths.Flags, flags)
if depTag == genHeaderExportDepTag {
depPaths.ReexportedFlags = append(depPaths.ReexportedFlags, flags)
depPaths.ReexportedFlagsDeps = append(depPaths.ReexportedFlagsDeps,
- genRule.GeneratedSourceFiles()...)
+ genRule.GeneratedDeps()...)
// 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)
diff --git a/genrule/genrule.go b/genrule/genrule.go
index e423ebcc..0cd110ce 100644
--- a/genrule/genrule.go
+++ b/genrule/genrule.go
@@ -43,6 +43,7 @@ func init() {
type SourceFileGenerator interface {
GeneratedSourceFiles() android.Paths
GeneratedHeaderDirs() android.Paths
+ GeneratedDeps() android.Paths
}
type HostToolProvider interface {
@@ -107,6 +108,7 @@ type Module struct {
exportedIncludeDirs android.Paths
outputFiles android.Paths
+ outputDeps android.Paths
}
type taskFunc func(ctx android.ModuleContext, rawCommand string, srcFiles android.Paths) generateTask
@@ -130,6 +132,10 @@ func (g *Module) GeneratedHeaderDirs() android.Paths {
return g.exportedIncludeDirs
}
+func (g *Module) GeneratedDeps() android.Paths {
+ return g.outputDeps
+}
+
func (g *Module) DepsMutator(ctx android.BottomUpMutatorContext) {
android.ExtractSourcesDeps(ctx, g.properties.Srcs)
android.ExtractSourcesDeps(ctx, g.properties.Tool_files)
@@ -334,6 +340,7 @@ func (g *Module) generateSourceFile(ctx android.ModuleContext, task generateTask
for _, outputFile := range task.out {
g.outputFiles = append(g.outputFiles, outputFile)
}
+ g.outputDeps = append(g.outputDeps, task.out[0])
}
func generatorFactory(taskGenerator taskFunc, props ...interface{}) *Module {