From 847dcc7d2a3dd3125f8c4bb9dcb4ea62125e43d8 Mon Sep 17 00:00:00 2001 From: Dan Willemsen Date: Thu, 29 Sep 2016 12:13:36 -0700 Subject: [PATCH] Handle dependencies with export_generated_headers This sets up the proper dependencies within Soong by adding the imported dependencies into GeneratedHeaders, and re-exporting them as necessary. It also exports them to Make using the new LOCAL_EXPORT_C_INCLUDE_DEPS. Bug: 31742855 Test: Inspection, build hardware/interfaces (pending) Change-Id: I6a10ceec377a97966baa9d4876b90fcda391dd01 --- cc/androidmk.go | 4 ++++ cc/cc.go | 6 ++++++ cc/library.go | 13 ++++++++++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/cc/androidmk.go b/cc/androidmk.go index 676ae300c..a4d7fcfb1 100644 --- a/cc/androidmk.go +++ b/cc/androidmk.go @@ -100,6 +100,10 @@ func (library *libraryDecorator) AndroidMk(ctx AndroidMkContext, ret *android.An if len(exportedIncludes) > 0 { fmt.Fprintln(w, "LOCAL_EXPORT_C_INCLUDE_DIRS :=", strings.Join(exportedIncludes, " ")) } + exportedIncludeDeps := library.exportedFlagsDeps() + if len(exportedIncludeDeps) > 0 { + fmt.Fprintln(w, "LOCAL_EXPORT_C_INCLUDE_DEPS :=", strings.Join(exportedIncludeDeps.Strings(), " ")) + } fmt.Fprintln(w, "LOCAL_BUILT_MODULE_STEM := $(LOCAL_MODULE)"+outputFile.Ext()) diff --git a/cc/cc.go b/cc/cc.go index 66c47c1fe..9a1981279 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -80,6 +80,7 @@ type PathDeps struct { GeneratedHeaders android.Paths Flags, ReexportedFlags []string + ReexportedFlagsDeps android.Paths CrtBegin, CrtEnd android.OptionalPath } @@ -760,6 +761,8 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { depPaths.Flags = append(depPaths.Flags, flags) if tag == genHeaderExportDepTag { depPaths.ReexportedFlags = append(depPaths.ReexportedFlags, flags) + depPaths.ReexportedFlagsDeps = append(depPaths.ReexportedFlagsDeps, + genRule.GeneratedSourceFiles()...) } } else { ctx.ModuleErrorf("module %q is not a genrule", name) @@ -799,10 +802,13 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { if t, ok := tag.(dependencyTag); ok && t.library { if i, ok := cc.linker.(exportedFlagsProducer); ok { flags := i.exportedFlags() + deps := i.exportedFlagsDeps() depPaths.Flags = append(depPaths.Flags, flags...) + depPaths.GeneratedHeaders = append(depPaths.GeneratedHeaders, deps...) if t.reexportFlags { depPaths.ReexportedFlags = append(depPaths.ReexportedFlags, flags...) + depPaths.ReexportedFlagsDeps = append(depPaths.ReexportedFlagsDeps, deps...) } } diff --git a/cc/library.go b/cc/library.go index cc5ff15bd..7cc587f5c 100644 --- a/cc/library.go +++ b/cc/library.go @@ -117,7 +117,8 @@ func libraryHostSharedFactory() (blueprint.Module, []interface{}) { type flagExporter struct { Properties FlagExporterProperties - flags []string + flags []string + flagsDeps android.Paths } func (f *flagExporter) exportIncludes(ctx ModuleContext, inc string) { @@ -131,12 +132,21 @@ func (f *flagExporter) reexportFlags(flags []string) { f.flags = append(f.flags, flags...) } +func (f *flagExporter) reexportDeps(deps android.Paths) { + f.flagsDeps = append(f.flagsDeps, deps...) +} + func (f *flagExporter) exportedFlags() []string { return f.flags } +func (f *flagExporter) exportedFlagsDeps() android.Paths { + return f.flagsDeps +} + type exportedFlagsProducer interface { exportedFlags() []string + exportedFlagsDeps() android.Paths } var _ exportedFlagsProducer = (*flagExporter)(nil) @@ -445,6 +455,7 @@ func (library *libraryDecorator) link(ctx ModuleContext, library.exportIncludes(ctx, "-I") library.reexportFlags(deps.ReexportedFlags) + library.reexportDeps(deps.ReexportedFlagsDeps) return out }