Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5f5dbaad authored by Liz Kammer's avatar Liz Kammer
Browse files

Handle xsd config more like other partitions

This is prep work to add additional special handling for genrule
generated headers as there will be similar partitioning for those
headers.

Test: go test soong tests
Change-Id: Ib63e7e4f7554b2b7b7bc78b2825b20c05403216a
parent 1c535124
Loading
Loading
Loading
Loading
+17 −34
Original line number Diff line number Diff line
@@ -4029,43 +4029,26 @@ type XsdConfigBp2buildTargets interface {
	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)
// XsdModuleToTargetName is a function that takes an XsdConfigBp2buildTarget
type XsdModuleToTargetName func(xsd XsdConfigBp2buildTargets) string

// XsdLabelMapper returns a bazel.LabelMapper for partitioning XSD sources/headers given an
// XsdModuleToTargetName function.
func XsdLabelMapper(targetName XsdModuleToTargetName) bazel.LabelMapper {
	return func(ctx bazel.OtherModuleContext, label bazel.Label) (string, bool) {
		mod, exists := ctx.ModuleFromName(label.OriginalModuleName)
		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 label.Label, false
		}

	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)
		xsdMod, isXsd := mod.(XsdConfigBp2buildTargets)
		if !isXsd {
		ctx.ModuleErrorf("xsdConfigJavaTarget called on %v, which is not an xsd_config", mod)
			return label.Label, false
		}
	ret := BazelModuleLabel(ctx, mod)

		// Remove the base module name
	ret = strings.TrimSuffix(ret, mod.Name())
		ret := strings.TrimSuffix(label.Label, mod.Name())
		// Append the language specific target name
	ret += targetName(xsd)
	return ret
		ret += targetName(xsdMod)
		return ret, true
	}
}
+35 −0
Original line number Diff line number Diff line
@@ -288,6 +288,41 @@ func SubtractBazelLabelList(haystack LabelList, needle LabelList) LabelList {
	return result
}

// FirstUniqueBazelLabelListAttribute takes a LabelListAttribute and makes the LabelList for
// each axis/configuration by keeping the first instance of a Label and omitting all subsequent
// repetitions.
func FirstUniqueBazelLabelListAttribute(attr LabelListAttribute) LabelListAttribute {
	var result LabelListAttribute
	result.Value = FirstUniqueBazelLabelList(attr.Value)
	if attr.HasConfigurableValues() {
		result.ConfigurableValues = make(configurableLabelLists)
	}
	for axis, configToLabels := range attr.ConfigurableValues {
		for c, l := range configToLabels {
			result.SetSelectValue(axis, c, FirstUniqueBazelLabelList(l))
		}
	}

	return result
}

// SubtractBazelLabelListAttribute subtract needle from haystack for LabelList in each
// axis/configuration.
func SubtractBazelLabelListAttribute(haystack LabelListAttribute, needle LabelListAttribute) LabelListAttribute {
	var result LabelListAttribute
	result.Value = SubtractBazelLabelList(haystack.Value, needle.Value)
	if haystack.HasConfigurableValues() {
		result.ConfigurableValues = make(configurableLabelLists)
	}
	for axis, configToLabels := range haystack.ConfigurableValues {
		for haystackConfig, haystackLabels := range configToLabels {
			result.SetSelectValue(axis, haystackConfig, SubtractBazelLabelList(haystackLabels, needle.SelectValue(axis, haystackConfig)))
		}
	}

	return result
}

type Attribute interface {
	HasConfigurableValues() bool
}
+97 −0
Original line number Diff line number Diff line
@@ -125,6 +125,63 @@ func TestSubtractBazelLabelList(t *testing.T) {
		}
	}
}

func TestSubtractBazelLabelListAttribute(t *testing.T) {
	testCases := []struct {
		haystack LabelListAttribute
		needle   LabelListAttribute
		expected LabelListAttribute
	}{
		{
			haystack: LabelListAttribute{
				Value: makeLabelList(
					[]string{"a", "b", "a", "c"},
					[]string{"x", "x", "y", "z"},
				),
				ConfigurableValues: configurableLabelLists{
					ArchConfigurationAxis: labelListSelectValues{
						"arm": makeLabelList([]string{"arm_1", "arm_2"}, []string{}),
						"x86": makeLabelList([]string{"x86_3", "x86_4", "x86_5"}, []string{"x86_5"}),
					},
				},
			},
			needle: LabelListAttribute{
				Value: makeLabelList(
					[]string{"d", "a"},
					[]string{"x", "y2", "z2"},
				),
				ConfigurableValues: configurableLabelLists{
					ArchConfigurationAxis: labelListSelectValues{
						"arm": makeLabelList([]string{"arm_1", "arm_3"}, []string{}),
						"x86": makeLabelList([]string{"x86_3", "x86_4"}, []string{"x86_6"}),
					},
				},
			},
			expected: LabelListAttribute{
				Value: makeLabelList(
					[]string{"b", "c"},
					[]string{"x", "x", "y", "z"},
				),
				ConfigurableValues: configurableLabelLists{
					ArchConfigurationAxis: labelListSelectValues{
						"arm": makeLabelList([]string{"arm_2"}, []string{}),
						"x86": makeLabelList([]string{"x86_5"}, []string{"x86_5"}),
					},
				},
				ForceSpecifyEmptyList: false,
				EmitEmptyList:         false,
				Prepend:               false,
			},
		},
	}
	for _, tc := range testCases {
		got := SubtractBazelLabelListAttribute(tc.haystack, tc.needle)
		if !reflect.DeepEqual(tc.expected, got) {
			t.Fatalf("Expected\n%v, but got\n%v", tc.expected, got)
		}
	}
}

func TestFirstUniqueBazelLabelList(t *testing.T) {
	testCases := []struct {
		originalLabelList       LabelList
@@ -167,6 +224,46 @@ func TestFirstUniqueBazelLabelList(t *testing.T) {
	}
}

func TestFirstUniqueBazelLabelListAttribute(t *testing.T) {
	testCases := []struct {
		originalLabelList       LabelListAttribute
		expectedUniqueLabelList LabelListAttribute
	}{
		{
			originalLabelList: LabelListAttribute{
				Value: makeLabelList(
					[]string{"a", "b", "a", "c"},
					[]string{"x", "x", "y", "z"},
				),
				ConfigurableValues: configurableLabelLists{
					ArchConfigurationAxis: labelListSelectValues{
						"arm": makeLabelList([]string{"1", "2", "1"}, []string{}),
						"x86": makeLabelList([]string{"3", "4", "4"}, []string{"5", "5"}),
					},
				},
			},
			expectedUniqueLabelList: LabelListAttribute{
				Value: makeLabelList(
					[]string{"a", "b", "c"},
					[]string{"x", "y", "z"},
				),
				ConfigurableValues: configurableLabelLists{
					ArchConfigurationAxis: labelListSelectValues{
						"arm": makeLabelList([]string{"1", "2"}, []string{}),
						"x86": makeLabelList([]string{"3", "4"}, []string{"5"}),
					},
				},
			},
		},
	}
	for _, tc := range testCases {
		actualUniqueLabelList := FirstUniqueBazelLabelListAttribute(tc.originalLabelList)
		if !reflect.DeepEqual(tc.expectedUniqueLabelList, actualUniqueLabelList) {
			t.Fatalf("Expected %v, got %v", tc.expectedUniqueLabelList, actualUniqueLabelList)
		}
	}
}

func TestUniqueSortedBazelLabelList(t *testing.T) {
	testCases := []struct {
		originalLabelList       LabelList
+88 −58
Original line number Diff line number Diff line
@@ -43,6 +43,10 @@ const (

	rScriptSrcPartition = "renderScript"

	xsdSrcPartition = "xsd"

	hdrPartition = "hdr"

	stubsSuffix = "_stub_libs_current"
)

@@ -155,6 +159,7 @@ func groupSrcsByExtension(ctx android.BazelConversionPathContext, srcs bazel.Lab
		lSrcPartition:       bazel.LabelPartition{Extensions: []string{".l"}},
		llSrcPartition:      bazel.LabelPartition{Extensions: []string{".ll"}},
		rScriptSrcPartition: bazel.LabelPartition{Extensions: []string{".fs", ".rscript"}},
		xsdSrcPartition:     bazel.LabelPartition{LabelMapper: android.XsdLabelMapper(xsdConfigCppTarget)},
		// C++ is the "catch-all" group, and comprises generated sources because we don't
		// know the language of these sources until the genrule is executed.
		cppSrcPartition:     bazel.LabelPartition{Extensions: []string{".cpp", ".cc", ".cxx", ".mm"}, LabelMapper: addSuffixForFilegroup("_cpp_srcs"), Keep_remainder: true},
@@ -165,6 +170,14 @@ func groupSrcsByExtension(ctx android.BazelConversionPathContext, srcs bazel.Lab
	return bazel.PartitionLabelListAttribute(ctx, &srcs, labels)
}

func partitionHeaders(ctx android.BazelConversionPathContext, hdrs bazel.LabelListAttribute) bazel.PartitionToLabelListAttribute {
	labels := bazel.LabelPartitions{
		xsdSrcPartition: bazel.LabelPartition{LabelMapper: android.XsdLabelMapper(xsdConfigCppTarget)},
		hdrPartition:    bazel.LabelPartition{Keep_remainder: true},
	}
	return bazel.PartitionLabelListAttribute(ctx, &hdrs, labels)
}

// bp2BuildParseLibProps returns the attributes for a variant of a cc_library.
func bp2BuildParseLibProps(ctx android.BazelConversionPathContext, module *Module, isStatic bool) staticOrSharedAttributes {
	lib, ok := module.compiler.(*libraryDecorator)
@@ -403,7 +416,8 @@ type compilerAttributes struct {
	srcs     bazel.LabelListAttribute

	// xsd config sources
	xsdInSrcs bazel.StringListAttribute
	xsdSrcs       bazel.LabelListAttribute
	exportXsdSrcs bazel.LabelListAttribute

	// Lex sources and options
	lSrcs   bazel.LabelListAttribute
@@ -494,14 +508,11 @@ func parseCommandLineFlags(soongFlags []string, filterOut ...filterOutFn) []stri
func (ca *compilerAttributes) bp2buildForAxisAndConfig(ctx android.BazelConversionPathContext, axis bazel.ConfigurationAxis, config string, props *BaseCompilerProperties) {
	// If there's arch specific srcs or exclude_srcs, generate a select entry for it.
	// TODO(b/186153868): do this for OS specific srcs and exclude_srcs too.
	srcsList, xsdList, ok := parseSrcs(ctx, props)
	srcsList, ok := parseSrcs(ctx, props)

	if ok {
		ca.srcs.SetSelectValue(axis, config, srcsList)
	}
	if len(xsdList) > 0 {
		ca.xsdInSrcs.SetSelectValue(axis, config, xsdList)
	}

	localIncludeDirs := props.Local_include_dirs
	if axis == bazel.NoConfigAxis {
@@ -568,9 +579,11 @@ func (ca *compilerAttributes) convertProductVariables(ctx android.BazelConversio
	}
}

func (ca *compilerAttributes) finalize(ctx android.BazelConversionPathContext, implementationHdrs bazel.LabelListAttribute) {
func (ca *compilerAttributes) finalize(ctx android.BazelConversionPathContext, implementationHdrs, exportHdrs bazel.LabelListAttribute) {
	ca.srcs.ResolveExcludes()
	partitionedSrcs := groupSrcsByExtension(ctx, ca.srcs)
	partitionedImplHdrs := partitionHeaders(ctx, implementationHdrs)
	partitionedHdrs := partitionHeaders(ctx, exportHdrs)

	ca.protoSrcs = partitionedSrcs[protoSrcPartition]
	ca.aidlSrcs = partitionedSrcs[aidlSrcPartition]
@@ -580,10 +593,19 @@ func (ca *compilerAttributes) finalize(ctx android.BazelConversionPathContext, i
		if lla.IsEmpty() {
			continue
		}
		lla.Append(implementationHdrs)
		lla.Append(partitionedImplHdrs[hdrPartition])
		partitionedSrcs[p] = lla
	}

	ca.hdrs = partitionedHdrs[hdrPartition]

	ca.includesFromHeaders(ctx, partitionedImplHdrs[hdrPartition], partitionedHdrs[hdrPartition])

	xsdSrcs := bazel.SubtractBazelLabelListAttribute(partitionedSrcs[xsdSrcPartition], partitionedHdrs[xsdSrcPartition])
	xsdSrcs.Append(partitionedImplHdrs[xsdSrcPartition])
	ca.exportXsdSrcs = partitionedHdrs[xsdSrcPartition]
	ca.xsdSrcs = bazel.FirstUniqueBazelLabelListAttribute(xsdSrcs)

	ca.srcs = partitionedSrcs[cppSrcPartition]
	ca.cSrcs = partitionedSrcs[cSrcPartition]
	ca.asSrcs = partitionedSrcs[asSrcPartition]
@@ -604,11 +626,11 @@ func (ca *compilerAttributes) finalize(ctx android.BazelConversionPathContext, i
}

// Parse srcs from an arch or OS's props value.
func parseSrcs(ctx android.BazelConversionPathContext, props *BaseCompilerProperties) (bazel.LabelList, []string, bool) {
func parseSrcs(ctx android.BazelConversionPathContext, props *BaseCompilerProperties) (bazel.LabelList, bool) {
	anySrcs := false
	// Add srcs-like dependencies such as generated files.
	// First create a LabelList containing these dependencies, then merge the values with srcs.
	genSrcs, xsd := android.PartitionXsdSrcs(ctx, props.Generated_sources)
	genSrcs := props.Generated_sources
	generatedSrcsLabelList := android.BazelLabelForModuleDepsExcludes(ctx, genSrcs, props.Exclude_generated_sources)
	if len(props.Generated_sources) > 0 || len(props.Exclude_generated_sources) > 0 {
		anySrcs = true
@@ -620,7 +642,7 @@ func parseSrcs(ctx android.BazelConversionPathContext, props *BaseCompilerProper
		anySrcs = true
	}

	return bazel.AppendBazelLabelLists(allSrcsLabelList, generatedSrcsLabelList), xsd, anySrcs
	return bazel.AppendBazelLabelLists(allSrcsLabelList, generatedSrcsLabelList), anySrcs
}

func bp2buildStdVal(std *string, prefix string, useGnu bool) *string {
@@ -667,8 +689,43 @@ func packageFromLabel(label string) (string, bool) {
	return split[0][2:], true
}

// includesFromLabelList extracts relative/absolute includes from a bazel.LabelList>
func includesFromLabelList(labelList bazel.LabelList) (relative, absolute []string) {
// includesFromHeaders gets the include directories needed from generated headers
func (ca *compilerAttributes) includesFromHeaders(ctx android.BazelConversionPathContext, implHdrs, hdrs bazel.LabelListAttribute) {
	local, absolute := includesFromLabelListAttribute(implHdrs, ca.localIncludes, ca.absoluteIncludes)
	localExport, absoluteExport := includesFromLabelListAttribute(hdrs, ca.includes.Includes, ca.includes.AbsoluteIncludes)

	ca.localIncludes = local
	ca.absoluteIncludes = absolute

	ca.includes.Includes = localExport
	ca.includes.AbsoluteIncludes = absoluteExport
}

// includesFromLabelList extracts the packages from a LabelListAttribute that should be includes and
// combines them with existing local/absolute includes.
func includesFromLabelListAttribute(attr bazel.LabelListAttribute, existingLocal, existingAbsolute bazel.StringListAttribute) (bazel.StringListAttribute, bazel.StringListAttribute) {
	localAttr := existingLocal.Clone()
	absoluteAttr := existingAbsolute.Clone()
	if !attr.Value.IsEmpty() {
		l, a := includesFromLabelList(attr.Value, existingLocal.Value, existingAbsolute.Value)
		localAttr.SetSelectValue(bazel.NoConfigAxis, "", l)
		absoluteAttr.SetSelectValue(bazel.NoConfigAxis, "", a)
	}
	for axis, configToLabels := range attr.ConfigurableValues {
		for c, labels := range configToLabels {
			local := existingLocal.SelectValue(axis, c)
			absolute := existingAbsolute.SelectValue(axis, c)
			l, a := includesFromLabelList(labels, local, absolute)
			localAttr.SetSelectValue(axis, c, l)
			absoluteAttr.SetSelectValue(axis, c, a)
		}
	}
	return *localAttr, *absoluteAttr
}

// includesFromLabelList extracts relative/absolute includes from a bazel.LabelList.
func includesFromLabelList(labelList bazel.LabelList, existingRel, existingAbs []string) ([]string, []string) {
	var relative, absolute []string
	for _, hdr := range labelList.Includes {
		if pkg, hasPkg := packageFromLabel(hdr.Label); hasPkg {
			absolute = append(absolute, pkg)
@@ -676,6 +733,12 @@ func includesFromLabelList(labelList bazel.LabelList) (relative, absolute []stri
			relative = append(relative, pkg)
		}
	}
	if len(relative)+len(existingRel) != 0 {
		relative = android.FirstUniqueStrings(append(append([]string{}, existingRel...), relative...))
	}
	if len(absolute)+len(existingAbs) != 0 {
		absolute = android.FirstUniqueStrings(append(append([]string{}, existingAbs...), absolute...))
	}
	return relative, absolute
}

@@ -740,8 +803,6 @@ func bp2BuildParseBaseProps(ctx android.Bp2buildMutatorContext, module *Module)
	archVariantLinkerProps := module.GetArchVariantProperties(ctx, &BaseLinkerProperties{})
	archVariantLibraryProperties := module.GetArchVariantProperties(ctx, &LibraryProperties{})

	var implementationHdrs bazel.LabelListAttribute

	axisToConfigs := map[bazel.ConfigurationAxis]map[string]bool{}
	allAxesAndConfigs := func(cp android.ConfigurationAxisToArchVariantProperties) {
		for axis, configMap := range cp {
@@ -761,6 +822,7 @@ func bp2BuildParseBaseProps(ctx android.Bp2buildMutatorContext, module *Module)
	linkerAttrs := linkerAttributes{}

	var aidlLibs bazel.LabelList
	var implementationHdrs, exportHdrs bazel.LabelListAttribute

	// Iterate through these axes in a deterministic order. This is required
	// because processing certain dependencies may result in concatenating
@@ -770,9 +832,9 @@ func bp2BuildParseBaseProps(ctx android.Bp2buildMutatorContext, module *Module)
	for _, axis := range bazel.SortedConfigurationAxes(axisToConfigs) {
		configs := axisToConfigs[axis]
		for cfg := range configs {
			var allHdrs, allHdrsXsd []string
			var allHdrs []string
			if baseCompilerProps, ok := archVariantCompilerProps[axis][cfg].(*BaseCompilerProperties); ok {
				allHdrs, allHdrsXsd = android.PartitionXsdSrcs(ctx, baseCompilerProps.Generated_headers)
				allHdrs = baseCompilerProps.Generated_headers

				if baseCompilerProps.Lex != nil {
					compilerAttrs.lexopts.SetSelectValue(axis, cfg, baseCompilerProps.Lex.Flags)
@@ -786,36 +848,17 @@ func bp2BuildParseBaseProps(ctx android.Bp2buildMutatorContext, module *Module)
				aidlLibs.Append(android.BazelLabelForModuleDeps(ctx, baseCompilerProps.Aidl.Libs))
			}

			var exportHdrs, exportHdrsXsd []string
			var exportedHdrs []string

			if baseLinkerProps, ok := archVariantLinkerProps[axis][cfg].(*BaseLinkerProperties); ok {
				exportHdrs, exportHdrsXsd = android.PartitionXsdSrcs(ctx, baseLinkerProps.Export_generated_headers)
				exportedHdrs = baseLinkerProps.Export_generated_headers
				(&linkerAttrs).bp2buildForAxisAndConfig(ctx, module, axis, cfg, baseLinkerProps)
			}

			// in the synthetic bp2build workspace, xsd sources are compiled to a static library
			xsdList := compilerAttrs.xsdInSrcs.SelectValue(axis, cfg)
			allHdrsXsd = android.FirstUniqueStrings(append(xsdList, allHdrsXsd...))
			headers := maybePartitionExportedAndImplementationsDeps(ctx, !module.Binary(), allHdrs, exportHdrs, android.BazelLabelForModuleDeps)
			xsdConfigLibs := maybePartitionExportedAndImplementationsDeps(ctx, !module.Binary(), allHdrsXsd, exportHdrsXsd, bazelLabelForXsdConfig)
			headers := maybePartitionExportedAndImplementationsDeps(ctx, !module.Binary(), allHdrs, exportedHdrs, android.BazelLabelForModuleDeps)

			implementationHdrs.SetSelectValue(axis, cfg, headers.implementation)
			compilerAttrs.hdrs.SetSelectValue(axis, cfg, headers.export)

			exportIncludes, exportAbsoluteIncludes := includesFromLabelList(headers.export)
			compilerAttrs.includes.Includes.SetSelectValue(axis, cfg, exportIncludes)
			compilerAttrs.includes.AbsoluteIncludes.SetSelectValue(axis, cfg, exportAbsoluteIncludes)

			includes, absoluteIncludes := includesFromLabelList(headers.implementation)
			currAbsoluteIncludes := compilerAttrs.absoluteIncludes.SelectValue(axis, cfg)
			currAbsoluteIncludes = android.FirstUniqueStrings(append(currAbsoluteIncludes, absoluteIncludes...))

			compilerAttrs.absoluteIncludes.SetSelectValue(axis, cfg, currAbsoluteIncludes)

			currIncludes := compilerAttrs.localIncludes.SelectValue(axis, cfg)
			currIncludes = android.FirstUniqueStrings(append(currIncludes, includes...))

			compilerAttrs.localIncludes.SetSelectValue(axis, cfg, currIncludes)
			exportHdrs.SetSelectValue(axis, cfg, headers.export)

			if libraryProps, ok := archVariantLibraryProperties[axis][cfg].(*LibraryProperties); ok {
				if axis == bazel.NoConfigAxis {
@@ -835,14 +878,6 @@ func bp2BuildParseBaseProps(ctx android.Bp2buildMutatorContext, module *Module)
				}
			}

			if len(allHdrsXsd) > 0 {
				wholeStaticLibs := linkerAttrs.implementationWholeArchiveDeps.SelectValue(axis, cfg)
				(&wholeStaticLibs).Append(xsdConfigLibs.implementation)
				linkerAttrs.implementationWholeArchiveDeps.SetSelectValue(axis, cfg, wholeStaticLibs)
				wholeStaticLibs = linkerAttrs.wholeArchiveDeps.SelectValue(axis, cfg)
				(&wholeStaticLibs).Append(xsdConfigLibs.export)
				linkerAttrs.wholeArchiveDeps.SetSelectValue(axis, cfg, wholeStaticLibs)
			}
		}
	}

@@ -860,11 +895,14 @@ func bp2BuildParseBaseProps(ctx android.Bp2buildMutatorContext, module *Module)
	(&compilerAttrs).convertProductVariables(ctx, productVariableProps)
	(&linkerAttrs).convertProductVariables(ctx, productVariableProps)

	(&compilerAttrs).finalize(ctx, implementationHdrs)
	(&compilerAttrs).finalize(ctx, implementationHdrs, exportHdrs)
	(&linkerAttrs).finalize(ctx)

	(&compilerAttrs.srcs).Add(bp2BuildYasm(ctx, module, compilerAttrs))

	(&linkerAttrs).wholeArchiveDeps.Append(compilerAttrs.exportXsdSrcs)
	(&linkerAttrs).implementationWholeArchiveDeps.Append(compilerAttrs.xsdSrcs)

	protoDep := bp2buildProto(ctx, module, compilerAttrs.protoSrcs)

	// bp2buildProto will only set wholeStaticLib or implementationWholeStaticLib, but we don't know
@@ -1748,17 +1786,9 @@ func bazelLabelForStaticWholeModuleDeps(ctx android.BazelConversionPathContext,
	return label
}

// Replaces //a/b/my_xsd_config with //a/b/my_xsd_config-cpp
func xsdConfigCppTarget(ctx android.BazelConversionPathContext, mod blueprint.Module) string {
	callback := func(xsd android.XsdConfigBp2buildTargets) string {
func xsdConfigCppTarget(xsd android.XsdConfigBp2buildTargets) string {
	return xsd.CppBp2buildTargetName()
}
	return android.XsdConfigBp2buildTarget(ctx, mod, callback)
}

func bazelLabelForXsdConfig(ctx android.BazelConversionPathContext, modules []string) bazel.LabelList {
	return android.BazelLabelForModuleDepsWithFn(ctx, modules, xsdConfigCppTarget)
}

func bazelLabelForWholeDeps(ctx android.BazelConversionPathContext, modules []string) bazel.LabelList {
	return android.BazelLabelForModuleDepsWithFn(ctx, modules, bazelLabelForStaticWholeModuleDeps)
+13 −18
Original line number Diff line number Diff line
@@ -2819,13 +2819,9 @@ type bp2BuildJavaInfo struct {
	hasKotlin bool
}

// Replaces //a/b/my_xsd_config with //a/b/my_xsd_config-java
func xsdConfigJavaTarget(ctx android.BazelConversionPathContext, mod blueprint.Module) string {
	callback := func(xsd android.XsdConfigBp2buildTargets) string {
func javaXsdTargetName(xsd android.XsdConfigBp2buildTargets) string {
	return xsd.JavaBp2buildTargetName()
}
	return android.XsdConfigBp2buildTarget(ctx, mod, callback)
}

// convertLibraryAttrsBp2Build returns a javaCommonAttributes struct with
// converted attributes shared across java_* modules and a bp2BuildJavaInfo struct
@@ -2835,21 +2831,14 @@ func xsdConfigJavaTarget(ctx android.BazelConversionPathContext, mod blueprint.M
func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext) (*javaCommonAttributes, *bp2BuildJavaInfo) {
	var srcs bazel.LabelListAttribute
	var deps bazel.LabelListAttribute
	var staticDeps bazel.LabelList
	var staticDeps bazel.LabelListAttribute

	archVariantProps := m.GetArchVariantProperties(ctx, &CommonProperties{})
	for axis, configToProps := range archVariantProps {
		for config, _props := range configToProps {
			if archProps, ok := _props.(*CommonProperties); ok {
				srcsNonXsd, srcsXsd := android.PartitionXsdSrcs(ctx, archProps.Srcs)
				excludeSrcsNonXsd, _ := android.PartitionXsdSrcs(ctx, archProps.Exclude_srcs)
				archSrcs := android.BazelLabelForModuleSrcExcludes(ctx, srcsNonXsd, excludeSrcsNonXsd)
				archSrcs := android.BazelLabelForModuleSrcExcludes(ctx, archProps.Srcs, archProps.Exclude_srcs)
				srcs.SetSelectValue(axis, config, archSrcs)

				// Add to static deps
				xsdJavaConfigLibraryLabels := android.BazelLabelForModuleDepsWithFn(ctx, srcsXsd, xsdConfigJavaTarget)
				staticDeps.Append(xsdJavaConfigLibraryLabels)

			}
		}
	}
@@ -2857,6 +2846,7 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext)

	javaSrcPartition := "java"
	protoSrcPartition := "proto"
	xsdSrcPartition := "xsd"
	logtagSrcPartition := "logtag"
	aidlSrcPartition := "aidl"
	kotlinPartition := "kotlin"
@@ -2865,6 +2855,7 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext)
		logtagSrcPartition: bazel.LabelPartition{Extensions: []string{".logtags", ".logtag"}},
		protoSrcPartition:  android.ProtoSrcLabelPartition,
		aidlSrcPartition:   android.AidlSrcLabelPartition,
		xsdSrcPartition:    bazel.LabelPartition{LabelMapper: android.XsdLabelMapper(javaXsdTargetName)},
		kotlinPartition:    bazel.LabelPartition{Extensions: []string{".kt"}},
	})

@@ -2872,6 +2863,8 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext)
	kotlinSrcs := srcPartitions[kotlinPartition]
	javaSrcs.Append(kotlinSrcs)

	staticDeps.Append(srcPartitions[xsdSrcPartition])

	if !srcPartitions[logtagSrcPartition].IsEmpty() {
		logtagsLibName := m.Name() + "_logtags"
		ctx.CreateBazelTargetModule(
@@ -2925,7 +2918,7 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext)
			},
		)

		staticDeps.Add(&bazel.Label{Label: ":" + javaAidlLibName})
		staticDeps.Append(bazel.MakeSingleLabelListAttribute(bazel.Label{Label: ":" + javaAidlLibName}))
	}

	var javacopts bazel.StringListAttribute //[]string
@@ -2980,7 +2973,9 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext)
	// by protoc are included directly in the resulting JAR. Thus upstream dependencies
	// that depend on a java_library with proto sources can link directly to the protobuf API,
	// and so this should be a static dependency.
	staticDeps.Add(protoDepLabel)
	if protoDepLabel != nil {
		staticDeps.Append(bazel.MakeSingleLabelListAttribute(*protoDepLabel))
	}

	depLabels := &javaDependencyLabels{}
	depLabels.Deps = deps
@@ -2995,7 +2990,7 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext)
			}
		}
	}
	depLabels.StaticDeps.Value.Append(staticDeps)
	depLabels.StaticDeps.Append(staticDeps)

	hasKotlin := !kotlinSrcs.IsEmpty()
	commonAttrs.kotlinAttributes = &kotlinAttributes{