diff --git a/cc/cc.go b/cc/cc.go index 00715566c..ddeede94b 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -786,7 +786,7 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { if genRule, ok := m.(genrule.SourceFileGenerator); ok { depPaths.GeneratedHeaders = append(depPaths.GeneratedHeaders, genRule.GeneratedSourceFiles()...) - flags := includeDirsToFlags(android.Paths{genRule.GeneratedHeaderDir()}) + flags := includeDirsToFlags(genRule.GeneratedHeaderDirs()) depPaths.Flags = append(depPaths.Flags, flags) if tag == genHeaderExportDepTag { depPaths.ReexportedFlags = append(depPaths.ReexportedFlags, flags) diff --git a/cc/compiler.go b/cc/compiler.go index 1798f4eba..285bb692d 100644 --- a/cc/compiler.go +++ b/cc/compiler.go @@ -245,17 +245,17 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags) Flag if !ctx.noDefaultCompilerFlags() { flags.GlobalFlags = append(flags.GlobalFlags, instructionSetFlags) - flags.ConlyFlags = append(flags.ConlyFlags, "${config.CommonGlobalConlyflags}") + flags.ConlyFlags = append([]string{"${config.CommonGlobalConlyflags}"}, flags.ConlyFlags...) if flags.Clang { flags.AsFlags = append(flags.AsFlags, tc.ClangAsflags()) - flags.CppFlags = append(flags.CppFlags, "${config.CommonClangGlobalCppflags}") + flags.CppFlags = append([]string{"${config.CommonClangGlobalCppflags}"}, flags.CppFlags...) flags.GlobalFlags = append(flags.GlobalFlags, tc.ClangCflags(), "${config.CommonClangGlobalCflags}", fmt.Sprintf("${config.%sClangGlobalCflags}", hod)) } else { - flags.CppFlags = append(flags.CppFlags, "${config.CommonGlobalCppflags}") + flags.CppFlags = append([]string{"${config.CommonGlobalCppflags}"}, flags.CppFlags...) flags.GlobalFlags = append(flags.GlobalFlags, tc.Cflags(), "${config.CommonGlobalCflags}", diff --git a/genrule/genrule.go b/genrule/genrule.go index b1ce80467..bb78b1f81 100644 --- a/genrule/genrule.go +++ b/genrule/genrule.go @@ -34,7 +34,7 @@ var ( type SourceFileGenerator interface { GeneratedSourceFiles() android.Paths - GeneratedHeaderDir() android.Path + GeneratedHeaderDirs() android.Paths } type HostToolProvider interface { @@ -65,6 +65,9 @@ type generatorProperties struct { // Local file that is used as the tool Tool_files []string + + // List of directories to export generated headers from + Export_include_dirs []string } type generator struct { @@ -77,7 +80,7 @@ type generator struct { deps android.Paths rule blueprint.Rule - genPath android.Path + exportedIncludeDirs android.Paths outputFiles android.Paths } @@ -93,8 +96,8 @@ func (g *generator) GeneratedSourceFiles() android.Paths { return g.outputFiles } -func (g *generator) GeneratedHeaderDir() android.Path { - return g.genPath +func (g *generator) GeneratedHeaderDirs() android.Paths { + return g.exportedIncludeDirs } func (g *generator) DepsMutator(ctx android.BottomUpMutatorContext) { @@ -113,7 +116,14 @@ func (g *generator) GenerateAndroidBuildActions(ctx android.ModuleContext) { return } - g.genPath = android.PathForModuleGen(ctx, "") + if len(g.properties.Export_include_dirs) > 0 { + for _, dir := range g.properties.Export_include_dirs { + g.exportedIncludeDirs = append(g.exportedIncludeDirs, + android.PathForModuleGen(ctx, ctx.ModuleDir(), dir)) + } + } else { + g.exportedIncludeDirs = append(g.exportedIncludeDirs, android.PathForModuleGen(ctx, "")) + } tools := map[string]android.Path{} @@ -166,7 +176,7 @@ func (g *generator) GenerateAndroidBuildActions(ctx android.ModuleContext) { } return "${depfile}", nil case "genDir": - return g.genPath.String(), nil + return android.PathForModuleGen(ctx, "").String(), nil default: if strings.HasPrefix(name, "location ") { label := strings.TrimSpace(strings.TrimPrefix(name, "location "))