Add support for Implicit Outputs

Test: mmma -j system/tools/hidl
Test: Inspect out/soong/build.ninja before/after
Change-Id: I8e91a033342a12302d51358c5be244e32ad689d7
diff --git a/android/module.go b/android/module.go
index 230d95c..5894ee7 100644
--- a/android/module.go
+++ b/android/module.go
@@ -34,16 +34,18 @@
 )
 
 type ModuleBuildParams struct {
-	Rule      blueprint.Rule
-	Output    WritablePath
-	Outputs   WritablePaths
-	Input     Path
-	Inputs    Paths
-	Implicit  Path
-	Implicits Paths
-	OrderOnly Paths
-	Default   bool
-	Args      map[string]string
+	Rule            blueprint.Rule
+	Output          WritablePath
+	Outputs         WritablePaths
+	ImplicitOutput  WritablePath
+	ImplicitOutputs WritablePaths
+	Input           Path
+	Inputs          Paths
+	Implicit        Path
+	Implicits       Paths
+	OrderOnly       Paths
+	Default         bool
+	Args            map[string]string
 }
 
 type androidBaseContext interface {
@@ -519,18 +521,22 @@
 
 func (a *androidModuleContext) ModuleBuild(pctx blueprint.PackageContext, params ModuleBuildParams) {
 	bparams := blueprint.BuildParams{
-		Rule:      params.Rule,
-		Outputs:   params.Outputs.Strings(),
-		Inputs:    params.Inputs.Strings(),
-		Implicits: params.Implicits.Strings(),
-		OrderOnly: params.OrderOnly.Strings(),
-		Args:      params.Args,
-		Optional:  !params.Default,
+		Rule:            params.Rule,
+		Outputs:         params.Outputs.Strings(),
+		ImplicitOutputs: params.ImplicitOutputs.Strings(),
+		Inputs:          params.Inputs.Strings(),
+		Implicits:       params.Implicits.Strings(),
+		OrderOnly:       params.OrderOnly.Strings(),
+		Args:            params.Args,
+		Optional:        !params.Default,
 	}
 
 	if params.Output != nil {
 		bparams.Outputs = append(bparams.Outputs, params.Output.String())
 	}
+	if params.ImplicitOutput != nil {
+		bparams.ImplicitOutputs = append(bparams.ImplicitOutputs, params.ImplicitOutput.String())
+	}
 	if params.Input != nil {
 		bparams.Inputs = append(bparams.Inputs, params.Input.String())
 	}
diff --git a/cc/gen.go b/cc/gen.go
index 9d3a67c..1000bf8 100644
--- a/cc/gen.go
+++ b/cc/gen.go
@@ -33,11 +33,11 @@
 var (
 	yacc = pctx.AndroidStaticRule("yacc",
 		blueprint.RuleParams{
-			Command:     "BISON_PKGDATADIR=$yaccDataDir $yaccCmd -d $yaccFlags --defines=$hFile -o $cFile $in",
+			Command:     "BISON_PKGDATADIR=$yaccDataDir $yaccCmd -d $yaccFlags --defines=$hFile -o $out $in",
 			CommandDeps: []string{"$yaccCmd"},
 			Description: "yacc $out",
 		},
-		"yaccFlags", "cFile", "hFile")
+		"yaccFlags", "hFile")
 
 	lex = pctx.AndroidStaticRule("lex",
 		blueprint.RuleParams{
@@ -51,12 +51,12 @@
 	headerFile = android.GenPathWithExt(ctx, "yacc", yaccFile, "h")
 
 	ctx.ModuleBuild(pctx, android.ModuleBuildParams{
-		Rule:    yacc,
-		Outputs: android.WritablePaths{outFile, headerFile},
-		Input:   yaccFile,
+		Rule:           yacc,
+		Output:         outFile,
+		ImplicitOutput: headerFile,
+		Input:          yaccFile,
 		Args: map[string]string{
 			"yaccFlags": yaccFlags,
-			"cFile":     outFile.String(),
 			"hFile":     headerFile.String(),
 		},
 	})