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())
 	}