bp2build: refactor/standardize cc_* bp2build converters
This CL refactors the cc* bp2build converters to use the common
attribute extractors in cc/bp2build.go.
This also adds include_build_directory to be handled by the compiler
attr extractor to generate recursive headers as inputs.
This also turns include_dirs and local_include_dirs into the
execroot-relative -I flags.
e.g. if a module in bionic/libc has "private" in local_include_dirs,
the "-Ibionic/libc/private" copt is generated for it.
Fixes: 185139955
Test: TH
Test: Forrest for mixed_clean-droid
Change-Id: Ib67056482227e62068fbbea0455035bdf5d56319
diff --git a/bazel/properties.go b/bazel/properties.go
index 5d3299b..48d9589 100644
--- a/bazel/properties.go
+++ b/bazel/properties.go
@@ -125,7 +125,9 @@
}
}
-func UniqueBazelLabels(originalLabels []Label) []Label {
+// UniqueSortedBazelLabels takes a []Label and deduplicates the labels, and returns
+// the slice in a sorted order.
+func UniqueSortedBazelLabels(originalLabels []Label) []Label {
uniqueLabelsSet := make(map[Label]bool)
for _, l := range originalLabels {
uniqueLabelsSet[l] = true
@@ -142,8 +144,8 @@
func UniqueBazelLabelList(originalLabelList LabelList) LabelList {
var uniqueLabelList LabelList
- uniqueLabelList.Includes = UniqueBazelLabels(originalLabelList.Includes)
- uniqueLabelList.Excludes = UniqueBazelLabels(originalLabelList.Excludes)
+ uniqueLabelList.Includes = UniqueSortedBazelLabels(originalLabelList.Includes)
+ uniqueLabelList.Excludes = UniqueSortedBazelLabels(originalLabelList.Excludes)
return uniqueLabelList
}
@@ -292,7 +294,7 @@
return LabelListAttribute{Value: UniqueBazelLabelList(value)}
}
-// Append appends all values, including os and arch specific ones, from another
+// Append all values, including os and arch specific ones, from another
// LabelListAttribute to this LabelListAttribute.
func (attrs *LabelListAttribute) Append(other LabelListAttribute) {
for arch := range PlatformArchMap {
@@ -500,6 +502,26 @@
*v = value
}
+// Append appends all values, including os and arch specific ones, from another
+// StringListAttribute to this StringListAttribute
+func (attrs *StringListAttribute) Append(other StringListAttribute) {
+ for arch := range PlatformArchMap {
+ this := attrs.GetValueForArch(arch)
+ that := other.GetValueForArch(arch)
+ this = append(this, that...)
+ attrs.SetValueForArch(arch, this)
+ }
+
+ for os := range PlatformOsMap {
+ this := attrs.GetValueForOS(os)
+ that := other.GetValueForOS(os)
+ this = append(this, that...)
+ attrs.SetValueForOS(os, this)
+ }
+
+ attrs.Value = append(attrs.Value, other.Value...)
+}
+
// TryVariableSubstitution, replace string substitution formatting within each string in slice with
// Starlark string.format compatible tag for productVariable.
func TryVariableSubstitutions(slice []string, productVariable string) ([]string, bool) {
diff --git a/bazel/properties_test.go b/bazel/properties_test.go
index 56840ef..229a4aa 100644
--- a/bazel/properties_test.go
+++ b/bazel/properties_test.go
@@ -39,7 +39,7 @@
},
}
for _, tc := range testCases {
- actualUniqueLabels := UniqueBazelLabels(tc.originalLabels)
+ actualUniqueLabels := UniqueSortedBazelLabels(tc.originalLabels)
if !reflect.DeepEqual(tc.expectedUniqueLabels, actualUniqueLabels) {
t.Fatalf("Expected %v, got %v", tc.expectedUniqueLabels, actualUniqueLabels)
}