Add support for .proto files

.proto files are translated to .pb.cc and .pb.h files, which are then
compiled normally.

Bug: 32286026
Test: mmma -j system/extras/perfprofd
Change-Id: I538071424d667aacf35b4b8bfebe217f5f092726
diff --git a/cc/compiler.go b/cc/compiler.go
index 32d98e4..0184ee9 100644
--- a/cc/compiler.go
+++ b/cc/compiler.go
@@ -100,6 +100,7 @@
 
 type baseCompiler struct {
 	Properties BaseCompilerProperties
+	Proto      ProtoProperties
 	deps       android.Paths
 }
 
@@ -123,6 +124,10 @@
 	deps.GeneratedSources = append(deps.GeneratedSources, compiler.Properties.Generated_sources...)
 	deps.GeneratedHeaders = append(deps.GeneratedHeaders, compiler.Properties.Generated_headers...)
 
+	if compiler.hasProto() {
+		deps = protoDeps(ctx, deps, &compiler.Proto)
+	}
+
 	return deps
 }
 
@@ -160,11 +165,7 @@
 				"${config.CommonNativehelperInclude}")
 		}
 
-		flags.GlobalFlags = append(flags.GlobalFlags, []string{
-			"-I" + android.PathForModuleSrc(ctx).String(),
-			"-I" + android.PathForModuleOut(ctx).String(),
-			"-I" + android.PathForModuleGen(ctx).String(),
-		}...)
+		flags.GlobalFlags = append(flags.GlobalFlags, "-I"+android.PathForModuleSrc(ctx).String())
 	}
 
 	if ctx.sdk() {
@@ -321,9 +322,23 @@
 		flags.CFlags = append(flags.CFlags, "-DANDROID_STRICT")
 	}
 
+	if compiler.hasProto() {
+		flags = protoFlags(ctx, flags, &compiler.Proto)
+	}
+
 	return flags
 }
 
+func (compiler *baseCompiler) hasProto() bool {
+	for _, src := range compiler.Properties.Srcs {
+		if filepath.Ext(src) == ".proto" {
+			return true
+		}
+	}
+
+	return false
+}
+
 var gnuToCReplacer = strings.NewReplacer("gnu", "c")
 
 func ndkPathDeps(ctx ModuleContext) android.Paths {