xsdc: add a genrule so that the xsd can be used as 'data' in tests

Bug: 146349835
Test: 1. patch aosp/1186184
      2. $ m -j VtsHalAudioEffectV5_0TargetTest
      3. check audio_effects_config_V5_0.xsd in
         VtsHalAudioEffectV5_0TargetTest

Change-Id: I619d8b78ecbed2c2db5bb4248c652786de616782
diff --git a/build/xsdc.go b/build/xsdc.go
index f66476b..37f0440 100644
--- a/build/xsdc.go
+++ b/build/xsdc.go
@@ -52,6 +52,11 @@
 		CommandDeps: []string{"${xsdcCmd}", "${config.SoongZipCmd}"},
 		Description: "xsdc C++ ${in} => ${out}",
 	}, "pkgName", "outDir")
+
+	xsdConfigRule = pctx.StaticRule("xsdConfigRule", blueprint.RuleParams{
+		Command:     "cp -f ${in} ${output}",
+		Description: "copy the xsd file: ${in} => ${output}",
+	}, "output")
 )
 
 type xsdConfigProperties struct {
@@ -71,8 +76,13 @@
 	genOutputs_h android.WritablePath
 
 	docsPath android.Path
+
+	xsdConfigPath android.OptionalPath
+	genOutputs  android.Paths
 }
 
+var _ android.SourceFileProducer = (*xsdConfig)(nil)
+
 type ApiToCheck struct {
 	Api_file         *string
 	Removed_api_file *string
@@ -99,7 +109,7 @@
 }
 
 func (module *xsdConfig) Srcs() android.Paths {
-	return android.Paths{module.genOutputs_j}
+	return append(module.genOutputs, module.genOutputs_j)
 }
 
 func (module *xsdConfig) GeneratedDeps() android.Paths {
@@ -114,6 +124,24 @@
 	android.ExtractSourcesDeps(ctx, module.properties.Srcs)
 }
 
+func (module *xsdConfig) generateXsdConfig(ctx android.ModuleContext) {
+	if !module.xsdConfigPath.Valid() {
+		return
+	}
+
+	output := android.PathForModuleGen(ctx, module.Name()+".xsd")
+	module.genOutputs = append(module.genOutputs, output)
+
+	ctx.ModuleBuild(pctx, android.ModuleBuildParams{
+		Rule:   xsdConfigRule,
+		Input:  module.xsdConfigPath.Path(),
+		Output: output,
+		Args: map[string]string{
+			"output": output.String(),
+		},
+	})
+}
+
 func (module *xsdConfig) GenerateAndroidBuildActions(ctx android.ModuleContext) {
 	if len(module.properties.Srcs) != 1 {
 		ctx.PropertyErrorf("srcs", "xsd_config must be one src")
@@ -160,6 +188,8 @@
 			"outDir":  android.PathForModuleGen(ctx, "cpp").String(),
 		},
 	})
+	module.xsdConfigPath = android.ExistentPathForSource(ctx, xsdFile.String())
+	module.generateXsdConfig(ctx)
 }
 
 func xsdConfigMutator(mctx android.TopDownMutatorContext) {