diff --git a/bp2build/conversion.go b/bp2build/conversion.go index e53f29e39..c43fbd86e 100644 --- a/bp2build/conversion.go +++ b/bp2build/conversion.go @@ -6,6 +6,7 @@ import ( "strings" "android/soong/android" + "android/soong/cc" cc_config "android/soong/cc/config" java_config "android/soong/java/config" @@ -28,7 +29,8 @@ func soongInjectionFiles(cfg android.Config, metrics CodegenMetrics) []BazelFile files = append(files, newFile("android", "constants.bzl", android.BazelCcToolchainVars(cfg))) files = append(files, newFile("cc_toolchain", GeneratedBuildFileName, "")) // Creates a //cc_toolchain package. - files = append(files, newFile("cc_toolchain", "constants.bzl", cc_config.BazelCcToolchainVars(cfg))) + files = append(files, newFile("cc_toolchain", "config_constants.bzl", cc_config.BazelCcToolchainVars(cfg))) + files = append(files, newFile("cc_toolchain", "sanitizer_constants.bzl", cc.BazelCcSanitizerToolchainVars(cfg))) files = append(files, newFile("java_toolchain", GeneratedBuildFileName, "")) // Creates a //java_toolchain package. files = append(files, newFile("java_toolchain", "constants.bzl", java_config.BazelJavaToolchainVars(cfg))) diff --git a/bp2build/conversion_test.go b/bp2build/conversion_test.go index 43daddc1a..b9c06bc04 100644 --- a/bp2build/conversion_test.go +++ b/bp2build/conversion_test.go @@ -101,7 +101,11 @@ func TestCreateBazelFiles_Bp2Build_CreatesDefaultFiles(t *testing.T) { }, { dir: "cc_toolchain", - basename: "constants.bzl", + basename: "config_constants.bzl", + }, + { + dir: "cc_toolchain", + basename: "sanitizer_constants.bzl", }, { dir: "java_toolchain", diff --git a/cc/sanitize.go b/cc/sanitize.go index 8e2d16183..c61e5e495 100644 --- a/cc/sanitize.go +++ b/cc/sanitize.go @@ -78,6 +78,9 @@ var ( hwasanGlobalOptions = []string{"heap_history_size=1023", "stack_history_size=512", "export_memory_stats=0", "max_malloc_fill_size=4096", "malloc_fill_byte=0"} memtagStackCommonFlags = []string{"-march=armv8-a+memtag"} + + hostOnlySanitizeFlags = []string{"-fno-sanitize-recover=all"} + deviceOnlySanitizeFlags = []string{"-fsanitize-trap=all", "-ftrap-function=abort"} ) type SanitizerType int @@ -379,7 +382,12 @@ func (t libraryDependencyTag) SkipApexAllowedDependenciesCheck() bool { var _ android.SkipApexAllowedDependenciesCheck = (*libraryDependencyTag)(nil) +var exportedVars = android.NewExportedVariables(pctx) + func init() { + exportedVars.ExportStringListStaticVariable("HostOnlySanitizeFlags", hostOnlySanitizeFlags) + exportedVars.ExportStringList("DeviceOnlySanitizeFlags", deviceOnlySanitizeFlags) + android.RegisterMakeVarsProvider(pctx, cfiMakeVarsProvider) android.RegisterMakeVarsProvider(pctx, hwasanMakeVarsProvider) } @@ -869,9 +877,9 @@ func (s *sanitize) flags(ctx ModuleContext, flags Flags) Flags { // When fuzzing, we wish to crash with diagnostics on any bug. flags.Local.CFlags = append(flags.Local.CFlags, "-fno-sanitize-trap=all", "-fno-sanitize-recover=all") } else if ctx.Host() { - flags.Local.CFlags = append(flags.Local.CFlags, "-fno-sanitize-recover=all") + flags.Local.CFlags = append(flags.Local.CFlags, hostOnlySanitizeFlags...) } else { - flags.Local.CFlags = append(flags.Local.CFlags, "-fsanitize-trap=all", "-ftrap-function=abort") + flags.Local.CFlags = append(flags.Local.CFlags, deviceOnlySanitizeFlags...) } if enableMinimalRuntime(s) { @@ -1787,3 +1795,7 @@ func cfiMakeVarsProvider(ctx android.MakeVarsContext) { func hwasanMakeVarsProvider(ctx android.MakeVarsContext) { hwasanStaticLibs(ctx.Config()).exportToMake(ctx) } + +func BazelCcSanitizerToolchainVars(config android.Config) string { + return android.BazelToolchainVars(config, exportedVars) +}