aboutsummaryrefslogtreecommitdiffstats
path: root/cc/cc.go
diff options
context:
space:
mode:
authorDan Willemsen <dwillemsen@google.com>2016-09-28 17:34:58 -0700
committerDan Willemsen <dwillemsen@google.com>2016-09-28 18:31:04 -0700
commitb3454ab24de620f367d6b8b77f0de2ce978b2d5f (patch)
tree9dd36ec1b3285c6131f83f0bae999a45c8965f3b /cc/cc.go
parent9c8681f4f98cf6174bd5ab04a57d8078d591534a (diff)
downloadbuild_soong-b3454ab24de620f367d6b8b77f0de2ce978b2d5f.tar.gz
build_soong-b3454ab24de620f367d6b8b77f0de2ce978b2d5f.tar.bz2
build_soong-b3454ab24de620f367d6b8b77f0de2ce978b2d5f.zip
Add export_generated_headers
Similar to export_shared_library_headers, this will export headers imported from a gensrcs or genrule. Bug: 31742855 Test: Add export_generated_headers, ensure it's in out/soong/Android-*.mk Change-Id: Ieadefd007ece8b249f011a258a9c5b27f5d3f594
Diffstat (limited to 'cc/cc.go')
-rw-r--r--cc/cc.go57
1 files changed, 38 insertions, 19 deletions
diff --git a/cc/cc.go b/cc/cc.go
index d04f8433..66c47c1f 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -64,6 +64,8 @@ type Deps struct {
GeneratedSources []string
GeneratedHeaders []string
+ ReexportGeneratedHeaders []string
+
CrtBegin, CrtEnd string
}
@@ -193,21 +195,22 @@ type dependencyTag struct {
}
var (
- sharedDepTag = dependencyTag{name: "shared", library: true}
- sharedExportDepTag = dependencyTag{name: "shared", library: true, reexportFlags: true}
- lateSharedDepTag = dependencyTag{name: "late shared", library: true}
- staticDepTag = dependencyTag{name: "static", library: true}
- staticExportDepTag = dependencyTag{name: "static", library: true, reexportFlags: true}
- lateStaticDepTag = dependencyTag{name: "late static", library: true}
- wholeStaticDepTag = dependencyTag{name: "whole static", library: true, reexportFlags: true}
- genSourceDepTag = dependencyTag{name: "gen source"}
- genHeaderDepTag = dependencyTag{name: "gen header"}
- objDepTag = dependencyTag{name: "obj"}
- crtBeginDepTag = dependencyTag{name: "crtbegin"}
- crtEndDepTag = dependencyTag{name: "crtend"}
- reuseObjTag = dependencyTag{name: "reuse objects"}
- ndkStubDepTag = dependencyTag{name: "ndk stub", library: true}
- ndkLateStubDepTag = dependencyTag{name: "ndk late stub", library: true}
+ sharedDepTag = dependencyTag{name: "shared", library: true}
+ sharedExportDepTag = dependencyTag{name: "shared", library: true, reexportFlags: true}
+ lateSharedDepTag = dependencyTag{name: "late shared", library: true}
+ staticDepTag = dependencyTag{name: "static", library: true}
+ staticExportDepTag = dependencyTag{name: "static", library: true, reexportFlags: true}
+ lateStaticDepTag = dependencyTag{name: "late static", library: true}
+ wholeStaticDepTag = dependencyTag{name: "whole static", library: true, reexportFlags: true}
+ genSourceDepTag = dependencyTag{name: "gen source"}
+ genHeaderDepTag = dependencyTag{name: "gen header"}
+ genHeaderExportDepTag = dependencyTag{name: "gen header", reexportFlags: true}
+ objDepTag = dependencyTag{name: "obj"}
+ crtBeginDepTag = dependencyTag{name: "crtbegin"}
+ crtEndDepTag = dependencyTag{name: "crtend"}
+ reuseObjTag = dependencyTag{name: "reuse objects"}
+ ndkStubDepTag = dependencyTag{name: "ndk stub", library: true}
+ ndkLateStubDepTag = dependencyTag{name: "ndk late stub", library: true}
)
// Module contains the properties and members used by all C/C++ module types, and implements
@@ -503,6 +506,12 @@ func (c *Module) deps(ctx BaseModuleContext) Deps {
}
}
+ for _, gen := range deps.ReexportGeneratedHeaders {
+ if !inList(gen, deps.GeneratedHeaders) {
+ ctx.PropertyErrorf("export_generated_headers", "Generated header module not in generated_headers: '%s'", gen)
+ }
+ }
+
return deps
}
@@ -594,7 +603,14 @@ func (c *Module) depsMutator(actx android.BottomUpMutatorContext) {
deps.LateSharedLibs...)
actx.AddDependency(c, genSourceDepTag, deps.GeneratedSources...)
- actx.AddDependency(c, genHeaderDepTag, deps.GeneratedHeaders...)
+
+ for _, gen := range deps.GeneratedHeaders {
+ depTag := genHeaderDepTag
+ if inList(gen, deps.ReexportGeneratedHeaders) {
+ depTag = genHeaderExportDepTag
+ }
+ actx.AddDependency(c, depTag, gen)
+ }
actx.AddDependency(c, objDepTag, deps.ObjFiles...)
@@ -736,12 +752,15 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
} else {
ctx.ModuleErrorf("module %q is not a gensrcs or genrule", name)
}
- case genHeaderDepTag:
+ case genHeaderDepTag, genHeaderExportDepTag:
if genRule, ok := m.(genrule.SourceFileGenerator); ok {
depPaths.GeneratedHeaders = append(depPaths.GeneratedHeaders,
genRule.GeneratedSourceFiles()...)
- depPaths.Flags = append(depPaths.Flags,
- includeDirsToFlags(android.Paths{genRule.GeneratedHeaderDir()}))
+ flags := includeDirsToFlags(android.Paths{genRule.GeneratedHeaderDir()})
+ depPaths.Flags = append(depPaths.Flags, flags)
+ if tag == genHeaderExportDepTag {
+ depPaths.ReexportedFlags = append(depPaths.ReexportedFlags, flags)
+ }
} else {
ctx.ModuleErrorf("module %q is not a genrule", name)
}