diff options
Diffstat (limited to 'android/module.go')
-rw-r--r-- | android/module.go | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/android/module.go b/android/module.go index 98084f359..ba327108f 100644 --- a/android/module.go +++ b/android/module.go @@ -4014,3 +4014,53 @@ func (s *soongConfigTraceSingleton) GenerateBuildActions(ctx SingletonContext) { WriteFileRule(ctx, outFile, string(j)) ctx.Phony("soong_config_trace", outFile) } + +// Interface implemented by xsd_config which has 1:many mappings in bp2build workspace +// This interface exists because we want to +// 1. Determine the name of the additional targets generated by the primary soong module +// 2. Enable distinguishing an xsd_config module from other Soong modules using type assertion +type XsdConfigBp2buildTargets interface { + CppBp2buildTargetName() string + JavaBp2buildTargetName() string +} + +// PartitionXsdSrcs partitions srcs into xsd_config modules and others +// Since xsd_config are soong modules, we cannot use file extension for partitioning +func PartitionXsdSrcs(ctx BazelConversionPathContext, srcs []string) ([]string, []string) { + //isXsd returns true if src is a soong module of type xsd_config + isXsd := func(src string) bool { + mod, exists := ctx.ModuleFromName(src) + if !exists { + return false + } + _, _isXsd := mod.(XsdConfigBp2buildTargets) + return _isXsd + } + nonXsd := []string{} + xsd := []string{} + + for _, src := range srcs { + if isXsd(src) { + xsd = append(xsd, src) + } else { + nonXsd = append(nonXsd, src) + } + } + + return nonXsd, xsd +} + +// Replaces //a/b/my_xsd_config with //a/b/my_xsd_config-{cpp|java} +// The new target name is provided by the `targetName` callback function +func XsdConfigBp2buildTarget(ctx BazelConversionPathContext, mod blueprint.Module, targetName func(xsd XsdConfigBp2buildTargets) string) string { + xsd, isXsd := mod.(XsdConfigBp2buildTargets) + if !isXsd { + ctx.ModuleErrorf("xsdConfigJavaTarget called on %v, which is not an xsd_config", mod) + } + ret := BazelModuleLabel(ctx, mod) + // Remove the base module name + ret = strings.TrimSuffix(ret, mod.Name()) + // Append the language specific target name + ret += targetName(xsd) + return ret +} |