Loading android/module.go +17 −34 Original line number Diff line number Diff line Loading @@ -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 } } bazel/properties.go +35 −0 Original line number Diff line number Diff line Loading @@ -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 } Loading bazel/properties_test.go +97 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading cc/bp2build.go +88 −58 Original line number Diff line number Diff line Loading @@ -43,6 +43,10 @@ const ( rScriptSrcPartition = "renderScript" xsdSrcPartition = "xsd" hdrPartition = "hdr" stubsSuffix = "_stub_libs_current" ) Loading Loading @@ -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}, Loading @@ -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) Loading Loading @@ -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 Loading Loading @@ -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 { Loading Loading @@ -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] Loading @@ -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] Loading @@ -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 Loading @@ -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 { Loading Loading @@ -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) Loading @@ -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 } Loading Loading @@ -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 { Loading @@ -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 Loading @@ -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) Loading @@ -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 { Loading @@ -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) } } } Loading @@ -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 Loading Loading @@ -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) Loading java/java.go +13 −18 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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) } } } Loading @@ -2857,6 +2846,7 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext) javaSrcPartition := "java" protoSrcPartition := "proto" xsdSrcPartition := "xsd" logtagSrcPartition := "logtag" aidlSrcPartition := "aidl" kotlinPartition := "kotlin" Loading @@ -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"}}, }) Loading @@ -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( Loading Loading @@ -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 Loading Loading @@ -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 Loading @@ -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{ Loading Loading
android/module.go +17 −34 Original line number Diff line number Diff line Loading @@ -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 } }
bazel/properties.go +35 −0 Original line number Diff line number Diff line Loading @@ -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 } Loading
bazel/properties_test.go +97 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading
cc/bp2build.go +88 −58 Original line number Diff line number Diff line Loading @@ -43,6 +43,10 @@ const ( rScriptSrcPartition = "renderScript" xsdSrcPartition = "xsd" hdrPartition = "hdr" stubsSuffix = "_stub_libs_current" ) Loading Loading @@ -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}, Loading @@ -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) Loading Loading @@ -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 Loading Loading @@ -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 { Loading Loading @@ -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] Loading @@ -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] Loading @@ -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 Loading @@ -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 { Loading Loading @@ -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) Loading @@ -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 } Loading Loading @@ -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 { Loading @@ -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 Loading @@ -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) Loading @@ -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 { Loading @@ -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) } } } Loading @@ -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 Loading Loading @@ -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) Loading
java/java.go +13 −18 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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) } } } Loading @@ -2857,6 +2846,7 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext) javaSrcPartition := "java" protoSrcPartition := "proto" xsdSrcPartition := "xsd" logtagSrcPartition := "logtag" aidlSrcPartition := "aidl" kotlinPartition := "kotlin" Loading @@ -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"}}, }) Loading @@ -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( Loading Loading @@ -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 Loading Loading @@ -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 Loading @@ -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{ Loading