Merge changes I3454370a,I18dd900d

* changes:
  Move global cppflags to the beginning of cppflags
  genrule: let Android.bp file specify exported header dirs
diff --git a/cc/cc.go b/cc/cc.go
index 0071556..ddeede9 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -786,7 +786,7 @@
 				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 1798f4e..285bb69 100644
--- a/cc/compiler.go
+++ b/cc/compiler.go
@@ -245,17 +245,17 @@
 
 	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 b1ce804..bb78b1f 100644
--- a/genrule/genrule.go
+++ b/genrule/genrule.go
@@ -34,7 +34,7 @@
 
 type SourceFileGenerator interface {
 	GeneratedSourceFiles() android.Paths
-	GeneratedHeaderDir() android.Path
+	GeneratedHeaderDirs() android.Paths
 }
 
 type HostToolProvider interface {
@@ -65,6 +65,9 @@
 
 	// 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 @@
 	deps android.Paths
 	rule blueprint.Rule
 
-	genPath android.Path
+	exportedIncludeDirs android.Paths
 
 	outputFiles android.Paths
 }
@@ -93,8 +96,8 @@
 	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 @@
 		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 @@
 			}
 			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 "))