bp2build: split as, c, and cpp srcs for cc_library
This CL adds support for cc_library to correctly split c, as and cpp
srcs in shared/static nested props, as well as splitting
the *filegroup* deps in those props, where each filegroup is expanded
into its own c, cpp and as srcs filegroups. This ensures that the
correct sources go into cc_library_static's underlying cc_libraries for
c, cpp and as sources respectively.
See the bp2build conversion test for a better visualization.
Bug: 183064430
Test: TH
Change-Id: I29add5140672d042adff65527d8b65f4a5f0a05b
diff --git a/bazel/properties.go b/bazel/properties.go
index b2d68da..951081c 100644
--- a/bazel/properties.go
+++ b/bazel/properties.go
@@ -137,6 +137,39 @@
return strings
}
+// Map a function over all labels in a LabelList.
+func MapLabelList(mapOver LabelList, mapFn func(string) string) LabelList {
+ var includes []Label
+ for _, inc := range mapOver.Includes {
+ mappedLabel := Label{Label: mapFn(inc.Label), OriginalModuleName: inc.OriginalModuleName}
+ includes = append(includes, mappedLabel)
+ }
+ // mapFn is not applied over excludes, but they are propagated as-is.
+ return LabelList{Includes: includes, Excludes: mapOver.Excludes}
+}
+
+// Map a function over all Labels in a LabelListAttribute
+func MapLabelListAttribute(mapOver LabelListAttribute, mapFn func(string) string) LabelListAttribute {
+ var result LabelListAttribute
+
+ result.Value = MapLabelList(mapOver.Value, mapFn)
+
+ for arch := range PlatformArchMap {
+ result.SetValueForArch(arch, MapLabelList(mapOver.GetValueForArch(arch), mapFn))
+ }
+
+ for os := range PlatformOsMap {
+ result.SetOsValueForTarget(os, MapLabelList(mapOver.GetOsValueForTarget(os), mapFn))
+
+ // TODO(b/187530594): Should we handle arch=CONDITIONS_DEFAULT here? (not in ArchValues)
+ for _, arch := range AllArches {
+ result.SetOsArchValueForTarget(os, arch, MapLabelList(mapOver.GetOsArchValueForTarget(os, arch), mapFn))
+ }
+ }
+
+ return result
+}
+
// Return all needles in a given haystack, where needleFn is true for needles.
func FilterLabelList(haystack LabelList, needleFn func(string) bool) LabelList {
var includes []Label
@@ -145,6 +178,7 @@
includes = append(includes, inc)
}
}
+ // needleFn is not applied over excludes, but they are propagated as-is.
return LabelList{Includes: includes, Excludes: haystack.Excludes}
}