Export genrules to Make as phony packages

Export genrules to Make, which will allow it to support
dist-for-goals.

Test: m PRODUCT-sdk_phone_armv7-win_sdk sdk_repo dist
Bug: 80494441
Bug: 128878015
Change-Id: Idb8dfcec2be5bfab94d17395826ef451b0dd9b63
diff --git a/genrule/genrule.go b/genrule/genrule.go
index c8be61a..32acd8c 100644
--- a/genrule/genrule.go
+++ b/genrule/genrule.go
@@ -16,6 +16,7 @@
 
 import (
 	"fmt"
+	"io"
 	"strings"
 
 	"github.com/google/blueprint"
@@ -115,6 +116,8 @@
 
 	outputFiles android.Paths
 	outputDeps  android.Paths
+
+	subName string
 }
 
 type taskFunc func(ctx android.ModuleContext, rawCommand string, srcFiles android.Paths) generateTask
@@ -157,6 +160,8 @@
 }
 
 func (g *Module) GenerateAndroidBuildActions(ctx android.ModuleContext) {
+	g.subName = ctx.ModuleSubDir()
+
 	if len(g.properties.Export_include_dirs) > 0 {
 		for _, dir := range g.properties.Export_include_dirs {
 			g.exportedIncludeDirs = append(g.exportedIncludeDirs,
@@ -400,6 +405,27 @@
 	}
 }
 
+func (g *Module) AndroidMk() android.AndroidMkData {
+	return android.AndroidMkData{
+		Include:    "$(BUILD_PHONY_PACKAGE)",
+		Class:      "FAKE",
+		OutputFile: android.OptionalPathForPath(g.outputFiles[0]),
+		SubName:    g.subName,
+		Extra: []android.AndroidMkExtraFunc{
+			func(w io.Writer, outputFile android.Path) {
+				fmt.Fprintln(w, "LOCAL_ADDITIONAL_DEPENDENCIES :=", strings.Join(g.outputFiles.Strings(), " "))
+			},
+		},
+		Custom: func(w io.Writer, name, prefix, moduleDir string, data android.AndroidMkData) {
+			android.WriteAndroidMkData(w, data)
+			if data.SubName != "" {
+				fmt.Fprintln(w, ".PHONY:", name)
+				fmt.Fprintln(w, name, ":", name+g.subName)
+			}
+		},
+	}
+}
+
 func generatorFactory(taskGenerator taskFunc, props ...interface{}) *Module {
 	module := &Module{
 		taskGenerator: taskGenerator,