bp2build: export some cc toolchain flags into Starlark.
This CL exports common/global/device/host clang/ld/ldd flags
from their Ninja variable initialization locations in
cc/config/global.go and cc/config/clang.go to make Bazel's cc_toolchain
and Soong's cc actions more consistent with each other.
This does not handle env-dependent or arch-specific toolchain flags
yet (logic in compiler.go and linker.go).
Test: TH
Bug: 187086342
Bug: 187084737
Bug: 186628704
Bug: 187857770
Change-Id: Ie403d7cd23f35160897b9dd902c799cbf1bd7f0c
diff --git a/cc/config/global.go b/cc/config/global.go
index 23106ec..59fe8e1 100644
--- a/cc/config/global.go
+++ b/cc/config/global.go
@@ -165,13 +165,25 @@
commonGlobalCflags = append(commonGlobalCflags, "-fdebug-prefix-map=/proc/self/cwd=")
}
- pctx.StaticVariable("CommonGlobalConlyflags", strings.Join(commonGlobalConlyflags, " "))
- pctx.StaticVariable("DeviceGlobalCppflags", strings.Join(deviceGlobalCppflags, " "))
- pctx.StaticVariable("DeviceGlobalLdflags", strings.Join(deviceGlobalLdflags, " "))
- pctx.StaticVariable("DeviceGlobalLldflags", strings.Join(deviceGlobalLldflags, " "))
- pctx.StaticVariable("HostGlobalCppflags", strings.Join(hostGlobalCppflags, " "))
- pctx.StaticVariable("HostGlobalLdflags", strings.Join(hostGlobalLdflags, " "))
- pctx.StaticVariable("HostGlobalLldflags", strings.Join(hostGlobalLldflags, " "))
+ staticVariableExportedToBazel("CommonGlobalConlyflags", commonGlobalConlyflags)
+ staticVariableExportedToBazel("DeviceGlobalCppflags", deviceGlobalCppflags)
+ staticVariableExportedToBazel("DeviceGlobalLdflags", deviceGlobalLdflags)
+ staticVariableExportedToBazel("DeviceGlobalLldflags", deviceGlobalLldflags)
+ staticVariableExportedToBazel("HostGlobalCppflags", hostGlobalCppflags)
+ staticVariableExportedToBazel("HostGlobalLdflags", hostGlobalLdflags)
+ staticVariableExportedToBazel("HostGlobalLldflags", hostGlobalLldflags)
+
+ // Export the static default CommonClangGlobalCflags to Bazel.
+ // TODO(187086342): handle cflags that are set in VariableFuncs.
+ commonClangGlobalCFlags := append(
+ ClangFilterUnknownCflags(commonGlobalCflags),
+ []string{
+ "${ClangExtraCflags}",
+ // Default to zero initialization.
+ "-ftrivial-auto-var-init=zero",
+ "-enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang",
+ }...)
+ exportedVars.Set("CommonClangGlobalCflags", variableValue(commonClangGlobalCFlags))
pctx.VariableFunc("CommonClangGlobalCflags", func(ctx android.PackageVarContext) string {
flags := ClangFilterUnknownCflags(commonGlobalCflags)
@@ -190,26 +202,26 @@
// Default to zero initialization.
flags = append(flags, "-ftrivial-auto-var-init=zero -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang")
}
-
return strings.Join(flags, " ")
})
+ // Export the static default DeviceClangGlobalCflags to Bazel.
+ // TODO(187086342): handle cflags that are set in VariableFuncs.
+ deviceClangGlobalCflags := append(ClangFilterUnknownCflags(deviceGlobalCflags), "${ClangExtraTargetCflags}")
+ exportedVars.Set("DeviceClangGlobalCflags", variableValue(deviceClangGlobalCflags))
+
pctx.VariableFunc("DeviceClangGlobalCflags", func(ctx android.PackageVarContext) string {
if ctx.Config().Fuchsia() {
return strings.Join(ClangFilterUnknownCflags(deviceGlobalCflags), " ")
} else {
- return strings.Join(append(ClangFilterUnknownCflags(deviceGlobalCflags), "${ClangExtraTargetCflags}"), " ")
+ return strings.Join(deviceClangGlobalCflags, " ")
}
})
- pctx.StaticVariable("HostClangGlobalCflags",
- strings.Join(ClangFilterUnknownCflags(hostGlobalCflags), " "))
- pctx.StaticVariable("NoOverrideClangGlobalCflags",
- strings.Join(append(ClangFilterUnknownCflags(noOverrideGlobalCflags), "${ClangExtraNoOverrideCflags}"), " "))
- pctx.StaticVariable("CommonClangGlobalCppflags",
- strings.Join(append(ClangFilterUnknownCflags(commonGlobalCppflags), "${ClangExtraCppflags}"), " "))
-
- pctx.StaticVariable("ClangExternalCflags", "${ClangExtraExternalCflags}")
+ staticVariableExportedToBazel("HostClangGlobalCflags", ClangFilterUnknownCflags(hostGlobalCflags))
+ staticVariableExportedToBazel("NoOverrideClangGlobalCflags", append(ClangFilterUnknownCflags(noOverrideGlobalCflags), "${ClangExtraNoOverrideCflags}"))
+ staticVariableExportedToBazel("CommonClangGlobalCppflags", append(ClangFilterUnknownCflags(commonGlobalCppflags), "${ClangExtraCppflags}"))
+ staticVariableExportedToBazel("ClangExternalCflags", []string{"${ClangExtraExternalCflags}"})
// Everything in these lists is a crime against abstraction and dependency tracking.
// Do not add anything to this list.