bp2build for sanitizer blocklists long term fix
Bug: 286872909
Test: Unit tests
Test: b build relevant targets
Change-Id: I553091f76fca936006651b1ed22c8fe4d176e18f
diff --git a/cc/bp2build.go b/cc/bp2build.go
index 9d90a5b..601c0c5 100644
--- a/cc/bp2build.go
+++ b/cc/bp2build.go
@@ -65,6 +65,8 @@
Hdrs bazel.LabelListAttribute
Copts bazel.StringListAttribute
+ Additional_compiler_inputs bazel.LabelListAttribute
+
Deps bazel.LabelListAttribute
Implementation_deps bazel.LabelListAttribute
Dynamic_deps bazel.LabelListAttribute
@@ -508,6 +510,8 @@
suffix bazel.StringAttribute
fdoProfile bazel.LabelAttribute
+
+ additionalCompilerInputs bazel.LabelListAttribute
}
type filterOutFn func(string) bool
@@ -1016,11 +1020,16 @@
(&compilerAttrs).localIncludes.Append(rsLocalIncludes)
(&compilerAttrs).localIncludes.Value = android.FirstUniqueStrings(compilerAttrs.localIncludes.Value)
- features := compilerAttrs.features.Clone().Append(linkerAttrs.features).Append(bp2buildSanitizerFeatures(ctx, module))
+ sanitizerValues := bp2buildSanitizerFeatures(ctx, module)
+
+ features := compilerAttrs.features.Clone().Append(linkerAttrs.features).Append(sanitizerValues.features)
features = features.Append(bp2buildLtoFeatures(ctx, module))
features = features.Append(convertHiddenVisibilityToFeatureBase(ctx, module))
features.DeduplicateAxesFromBase()
+ compilerAttrs.copts = *compilerAttrs.copts.Append(sanitizerValues.copts)
+ compilerAttrs.additionalCompilerInputs = *compilerAttrs.additionalCompilerInputs.Append(sanitizerValues.additionalCompilerInputs)
+
addMuslSystemDynamicDeps(ctx, linkerAttrs)
return baseAttributes{
@@ -1910,8 +1919,16 @@
return attrs
}
-func bp2buildSanitizerFeatures(ctx android.BazelConversionPathContext, m *Module) bazel.StringListAttribute {
+type sanitizerValues struct {
+ features bazel.StringListAttribute
+ copts bazel.StringListAttribute
+ additionalCompilerInputs bazel.LabelListAttribute
+}
+
+func bp2buildSanitizerFeatures(ctx android.BazelConversionPathContext, m *Module) sanitizerValues {
sanitizerFeatures := bazel.StringListAttribute{}
+ sanitizerCopts := bazel.StringListAttribute{}
+ sanitizerCompilerInputs := bazel.LabelListAttribute{}
bp2BuildPropParseHelper(ctx, m, &SanitizeProperties{}, func(axis bazel.ConfigurationAxis, config string, props interface{}) {
var features []string
if sanitizerProps, ok := props.(*SanitizeProperties); ok {
@@ -1923,9 +1940,10 @@
}
blocklist := sanitizerProps.Sanitize.Blocklist
if blocklist != nil {
- // Format the blocklist name to be used in a feature name
- blocklistFeatureSuffix := strings.Replace(strings.ToLower(*blocklist), ".", "_", -1)
- features = append(features, "sanitizer_blocklist_"+blocklistFeatureSuffix)
+ // TODO: b/294868620 - Change this not to use the special axis when completing the bug
+ coptValue := fmt.Sprintf("-fsanitize-ignorelist=$(location %s)", *blocklist)
+ sanitizerCopts.SetSelectValue(bazel.SanitizersEnabledAxis, bazel.SanitizersEnabled, []string{coptValue})
+ sanitizerCompilerInputs.SetSelectValue(bazel.SanitizersEnabledAxis, bazel.SanitizersEnabled, bazel.MakeLabelListFromTargetNames([]string{*blocklist}))
}
if sanitizerProps.Sanitize.Cfi != nil && !proptools.Bool(sanitizerProps.Sanitize.Cfi) {
features = append(features, "-android_cfi")
@@ -1938,7 +1956,11 @@
sanitizerFeatures.SetSelectValue(axis, config, features)
}
})
- return sanitizerFeatures
+ return sanitizerValues{
+ features: sanitizerFeatures,
+ copts: sanitizerCopts,
+ additionalCompilerInputs: sanitizerCompilerInputs,
+ }
}
func bp2buildLtoFeatures(ctx android.BazelConversionPathContext, m *Module) bazel.StringListAttribute {