Revert "Split the x86 host toolchain into glibc and musl variants"
This reverts commit 4fb4ef22424162d73bb0473ff53dc557b3fec79f.
Reason for revert: crossed with aosp/1775072
Change-Id: Ied922850b810d82627ba4f9ee42f672cfe286c91
diff --git a/android/arch.go b/android/arch.go
index 7ca7336..583793e 100644
--- a/android/arch.go
+++ b/android/arch.go
@@ -255,7 +255,7 @@
// Linux returns true if the OS uses the Linux kernel, i.e. if the OS is Android or is Linux
// with or without the Bionic libc runtime.
func (os OsType) Linux() bool {
- return os == Android || os == Linux || os == LinuxBionic || os == LinuxMusl
+ return os == Android || os == Linux || os == LinuxBionic
}
// newOsType constructs an OsType and adds it to the global lists.
@@ -305,8 +305,6 @@
NoOsType OsType
// Linux is the OS for the Linux kernel plus the glibc runtime.
Linux = newOsType("linux_glibc", Host, false, X86, X86_64)
- // LinuxMusl is the OS for the Linux kernel plus the musl runtime.
- LinuxMusl = newOsType("linux_musl", Host, false, X86, X86_64)
// Darwin is the OS for MacOS/Darwin host machines.
Darwin = newOsType("darwin", Host, false, X86_64)
// LinuxBionic is the OS for the Linux kernel plus the Bionic libc runtime, but without the
@@ -865,8 +863,6 @@
"Android64",
"Android32",
"Bionic",
- "Glibc",
- "Musl",
"Linux",
"Not_windows",
"Arm_on_x86",
@@ -1112,30 +1108,6 @@
}
}
- if os == Linux {
- field := "Glibc"
- prefix := "target.glibc"
- if bionicProperties, ok := getChildPropertyStruct(ctx, targetProp, field, prefix); ok {
- mergePropertyStruct(ctx, genProps, bionicProperties)
- }
- }
-
- if os == LinuxMusl {
- field := "Musl"
- prefix := "target.musl"
- if bionicProperties, ok := getChildPropertyStruct(ctx, targetProp, field, prefix); ok {
- mergePropertyStruct(ctx, genProps, bionicProperties)
- }
-
- // Special case: to ease the transition from glibc to musl, apply linux_glibc
- // properties (which has historically mean host linux) to musl variants.
- field = "Linux_glibc"
- prefix = "target.linux_glibc"
- if bionicProperties, ok := getChildPropertyStruct(ctx, targetProp, field, prefix); ok {
- mergePropertyStruct(ctx, genProps, bionicProperties)
- }
- }
-
// Handle target OS properties in the form:
// target: {
// linux_glibc: {
@@ -1338,16 +1310,6 @@
if osArchProperties, ok := getChildPropertyStruct(ctx, targetProp, field, userFriendlyField); ok {
result = append(result, osArchProperties)
}
-
- if os == LinuxMusl {
- // Special case: to ease the transition from glibc to musl, apply linux_glibc
- // properties (which has historically mean host linux) to musl variants.
- field := "Linux_glibc_" + archType.Name
- userFriendlyField := "target.linux_glibc_" + archType.Name
- if osArchProperties, ok := getChildPropertyStruct(ctx, targetProp, field, userFriendlyField); ok {
- result = append(result, osArchProperties)
- }
- }
}
// Handle arm on x86 properties in the form:
@@ -1413,14 +1375,11 @@
}
// determineBuildOS stores the OS and architecture used for host targets used during the build into
-// config based on the runtime OS and architecture determined by Go and the product configuration.
+// config based on the runtime OS and architecture determined by Go.
func determineBuildOS(config *config) {
config.BuildOS = func() OsType {
switch runtime.GOOS {
case "linux":
- if Bool(config.productVariables.HostMusl) {
- return LinuxMusl
- }
return Linux
case "darwin":
return Darwin
diff --git a/android/arch_test.go b/android/arch_test.go
index a828321..2a2fd45 100644
--- a/android/arch_test.go
+++ b/android/arch_test.go
@@ -508,12 +508,9 @@
bionic: { a: ["bionic"] },
host: { a: ["host"] },
android: { a: ["android"] },
- glibc: { a: ["glibc"] },
- musl: { a: ["musl"] },
linux_bionic: { a: ["linux_bionic"] },
linux: { a: ["linux"] },
linux_glibc: { a: ["linux_glibc"] },
- linux_musl: { a: ["linux_musl"] },
windows: { a: ["windows"], enabled: true },
darwin: { a: ["darwin"] },
not_windows: { a: ["not_windows"] },
@@ -525,8 +522,6 @@
linux_x86_64: { a: ["linux_x86_64"] },
linux_glibc_x86: { a: ["linux_glibc_x86"] },
linux_glibc_x86_64: { a: ["linux_glibc_x86_64"] },
- linux_musl_x86: { a: ["linux_musl_x86"] },
- linux_musl_x86_64: { a: ["linux_musl_x86_64"] },
darwin_x86_64: { a: ["darwin_x86_64"] },
windows_x86: { a: ["windows_x86"] },
windows_x86_64: { a: ["windows_x86_64"] },
@@ -568,12 +563,12 @@
{
module: "foo",
variant: "linux_glibc_x86_64",
- property: []string{"root", "host", "linux", "glibc", "linux_glibc", "not_windows", "x86_64", "lib64", "linux_x86_64", "linux_glibc_x86_64"},
+ property: []string{"root", "host", "linux", "linux_glibc", "not_windows", "x86_64", "lib64", "linux_x86_64", "linux_glibc_x86_64"},
},
{
module: "foo",
variant: "linux_glibc_x86",
- property: []string{"root", "host", "linux", "glibc", "linux_glibc", "not_windows", "x86", "lib32", "linux_x86", "linux_glibc_x86"},
+ property: []string{"root", "host", "linux", "linux_glibc", "not_windows", "x86", "lib32", "linux_x86", "linux_glibc_x86"},
},
},
},
@@ -600,23 +595,6 @@
},
},
{
- name: "linux_musl",
- goOS: "linux",
- preparer: FixtureModifyConfig(modifyTestConfigForMusl),
- results: []result{
- {
- module: "foo",
- variant: "linux_musl_x86_64",
- property: []string{"root", "host", "linux", "musl", "linux_glibc", "linux_musl", "not_windows", "x86_64", "lib64", "linux_x86_64", "linux_musl_x86_64", "linux_glibc_x86_64"},
- },
- {
- module: "foo",
- variant: "linux_musl_x86",
- property: []string{"root", "host", "linux", "musl", "linux_glibc", "linux_musl", "not_windows", "x86", "lib32", "linux_x86", "linux_musl_x86", "linux_glibc_x86"},
- },
- },
- },
- {
name: "darwin",
goOS: "darwin",
results: []result{
diff --git a/android/config.go b/android/config.go
index 9addf5d..871986c 100644
--- a/android/config.go
+++ b/android/config.go
@@ -362,19 +362,6 @@
config.TestProductVariables.DeviceSecondaryArchVariant = proptools.StringPtr("armv7-a-neon")
}
-func modifyTestConfigForMusl(config Config) {
- delete(config.Targets, config.BuildOS)
- config.productVariables.HostMusl = boolPtr(true)
- determineBuildOS(config.config)
- config.Targets[config.BuildOS] = []Target{
- {config.BuildOS, Arch{ArchType: X86_64}, NativeBridgeDisabled, "", "", false},
- {config.BuildOS, Arch{ArchType: X86}, NativeBridgeDisabled, "", "", false},
- }
-
- config.BuildOSTarget = config.Targets[config.BuildOS][0]
- config.BuildOSCommonTarget = getCommonTargets(config.Targets[config.BuildOS])[0]
-}
-
// TestArchConfig returns a Config object suitable for using for tests that
// need to run the arch mutator.
func TestArchConfig(buildDir string, env map[string]string, bp string, fs map[string][]byte) Config {
diff --git a/android/paths.go b/android/paths.go
index 99db22f..bec8a51 100644
--- a/android/paths.go
+++ b/android/paths.go
@@ -1667,7 +1667,7 @@
partionPaths = []string{"target", "product", ctx.Config().DeviceName(), partition}
} else {
osName := os.String()
- if os == Linux || os == LinuxMusl {
+ if os == Linux {
// instead of linux_glibc
osName = "linux"
}
diff --git a/android/variable.go b/android/variable.go
index d32debe..d0a23aa 100644
--- a/android/variable.go
+++ b/android/variable.go
@@ -203,7 +203,6 @@
HostArch *string `json:",omitempty"`
HostSecondaryArch *string `json:",omitempty"`
- HostMusl *bool `json:",omitempty"`
CrossHost *string `json:",omitempty"`
CrossHostArch *string `json:",omitempty"`
diff --git a/bazel/configurability.go b/bazel/configurability.go
index f5f0913..3277bd0 100644
--- a/bazel/configurability.go
+++ b/bazel/configurability.go
@@ -30,7 +30,6 @@
osAndroid = "android"
osDarwin = "darwin"
osLinux = "linux_glibc"
- osLinuxMusl = "linux_musl"
osLinuxBionic = "linux_bionic"
osWindows = "windows"
@@ -42,8 +41,6 @@
osArchDarwinX86_64 = "darwin_x86_64"
osArchLinuxX86 = "linux_glibc_x86"
osArchLinuxX86_64 = "linux_glibc_x86_64"
- osArchLinuxMuslX86 = "linux_musl_x86"
- osArchLinuxMuslX86_64 = "linux_musl_x86_64"
osArchLinuxBionicArm64 = "linux_bionic_arm64"
osArchLinuxBionicX86_64 = "linux_bionic_x86_64"
osArchWindowsX86 = "windows_x86"
@@ -85,7 +82,6 @@
osAndroid: "//build/bazel/platforms/os:android",
osDarwin: "//build/bazel/platforms/os:darwin",
osLinux: "//build/bazel/platforms/os:linux",
- osLinuxMusl: "//build/bazel/platforms/os:linux_musl",
osLinuxBionic: "//build/bazel/platforms/os:linux_bionic",
osWindows: "//build/bazel/platforms/os:windows",
conditionsDefault: ConditionsDefaultSelectKey, // The default condition of an os select map.
@@ -104,8 +100,6 @@
osArchDarwinX86_64: "//build/bazel/platforms/os_arch:darwin_x86_64",
osArchLinuxX86: "//build/bazel/platforms/os_arch:linux_glibc_x86",
osArchLinuxX86_64: "//build/bazel/platforms/os_arch:linux_glibc_x86_64",
- osArchLinuxMuslX86: "//build/bazel/platforms/os_arch:linux_musl_x86",
- osArchLinuxMuslX86_64: "//build/bazel/platforms/os_arch:linux_musl_x86_64",
osArchLinuxBionicArm64: "//build/bazel/platforms/os_arch:linux_bionic_arm64",
osArchLinuxBionicX86_64: "//build/bazel/platforms/os_arch:linux_bionic_x86_64",
osArchWindowsX86: "//build/bazel/platforms/os_arch:windows_x86",
diff --git a/cc/binary.go b/cc/binary.go
index 763d2b9..c6d61ab 100644
--- a/cc/binary.go
+++ b/cc/binary.go
@@ -335,7 +335,7 @@
if flags.DynamicLinker != "" {
flags.Local.LdFlags = append(flags.Local.LdFlags, "-Wl,-dynamic-linker,"+flags.DynamicLinker)
- } else if (ctx.toolchain().Bionic() || ctx.toolchain().Musl()) && !binary.static() {
+ } else if ctx.toolchain().Bionic() && !binary.static() {
flags.Local.LdFlags = append(flags.Local.LdFlags, "-Wl,--no-dynamic-linker")
}
diff --git a/cc/config/toolchain.go b/cc/config/toolchain.go
index 20384a8..ff556f1 100644
--- a/cc/config/toolchain.go
+++ b/cc/config/toolchain.go
@@ -118,8 +118,6 @@
DefaultSharedLibraries() []string
Bionic() bool
- Glibc() bool
- Musl() bool
}
type toolchainBase struct {
@@ -196,14 +194,6 @@
return false
}
-func (toolchainBase) Glibc() bool {
- return false
-}
-
-func (toolchainBase) Musl() bool {
- return false
-}
-
func (t toolchainBase) ToolPath() string {
return ""
}
diff --git a/cc/config/x86_linux_host.go b/cc/config/x86_linux_host.go
index 1d66cb7..85d95d8 100644
--- a/cc/config/x86_linux_host.go
+++ b/cc/config/x86_linux_host.go
@@ -36,16 +36,8 @@
"-D__STDC_CONSTANT_MACROS",
"--gcc-toolchain=${LinuxGccRoot}",
- "-fstack-protector-strong",
- }
-
- linuxGlibcCflags = []string{
"--sysroot ${LinuxGccRoot}/sysroot",
- }
-
- linuxMuslCflags = []string{
- "-D_LIBCPP_HAS_MUSL_LIBC",
- "-nostdlibinc",
+ "-fstack-protector-strong",
}
linuxLdflags = []string{
@@ -55,17 +47,9 @@
"-Wl,--no-undefined-version",
"--gcc-toolchain=${LinuxGccRoot}",
- }
-
- linuxGlibcLdflags = []string{
"--sysroot ${LinuxGccRoot}/sysroot",
}
- linuxMuslLdflags = []string{
- "-nostdlib",
- "-lgcc", "-lgcc_eh",
- }
-
// Extended cflags
linuxX86Cflags = []string{
"-msse3",
@@ -105,12 +89,6 @@
"rt",
"util",
}, "-l")
-
- muslCrtBeginStaticBinary, muslCrtEndStaticBinary = []string{"libc_musl_crtbegin_static"}, []string{"crtend_android"}
- muslCrtBeginSharedBinary, muslCrtEndSharedBinary = []string{"libc_musl_crtbegin_dynamic", "musl_linker_script"}, []string{"libc_musl_crtend"}
- muslCrtBeginSharedLibrary, muslCrtEndSharedLibrary = []string{"libc_musl_crtbegin_so"}, []string{"libc_musl_crtend_so"}
-
- muslDefaultSharedLibraries = []string{"libjemalloc5", "libc_musl"}
)
const (
@@ -146,13 +124,6 @@
// Yasm flags
pctx.StaticVariable("LinuxX86YasmFlags", "-f elf32 -m x86")
pctx.StaticVariable("LinuxX8664YasmFlags", "-f elf64 -m amd64")
-
- pctx.StaticVariable("LinuxGlibcCflags", strings.Join(linuxGlibcCflags, " "))
- pctx.StaticVariable("LinuxGlibcLdflags", strings.Join(linuxGlibcLdflags, " "))
- pctx.StaticVariable("LinuxGlibcLldflags", strings.Join(linuxGlibcLdflags, " "))
- pctx.StaticVariable("LinuxMuslCflags", strings.Join(linuxMuslCflags, " "))
- pctx.StaticVariable("LinuxMuslLdflags", strings.Join(linuxMuslLdflags, " "))
- pctx.StaticVariable("LinuxMuslLldflags", strings.Join(linuxMuslLdflags, " "))
}
type toolchainLinux struct {
@@ -253,146 +224,18 @@
return linuxAvailableLibraries
}
-// glibc specialization of the linux toolchain
+var toolchainLinuxX86Singleton Toolchain = &toolchainLinuxX86{}
+var toolchainLinuxX8664Singleton Toolchain = &toolchainLinuxX8664{}
-type toolchainGlibc struct {
+func linuxX86ToolchainFactory(arch android.Arch) Toolchain {
+ return toolchainLinuxX86Singleton
}
-func (toolchainGlibc) Glibc() bool { return true }
-
-func (toolchainGlibc) Cflags() string {
- return "${config.LinuxGlibcCflags}"
-}
-
-func (toolchainGlibc) Ldflags() string {
- return "${config.LinuxGlibcLdflags}"
-}
-
-func (toolchainGlibc) Lldflags() string {
- return "${config.LinuxGlibcLldflags}"
-}
-
-type toolchainLinuxGlibcX86 struct {
- toolchainLinuxX86
- toolchainGlibc
-}
-
-type toolchainLinuxGlibcX8664 struct {
- toolchainLinuxX8664
- toolchainGlibc
-}
-
-func (t *toolchainLinuxGlibcX86) Cflags() string {
- return t.toolchainLinuxX86.Cflags() + " " + t.toolchainGlibc.Cflags()
-}
-
-func (t *toolchainLinuxGlibcX86) Ldflags() string {
- return t.toolchainLinuxX86.Ldflags() + " " + t.toolchainGlibc.Ldflags()
-}
-
-func (t *toolchainLinuxGlibcX86) Lldflags() string {
- return t.toolchainLinuxX86.Lldflags() + " " + t.toolchainGlibc.Lldflags()
-}
-
-func (t *toolchainLinuxGlibcX8664) Cflags() string {
- return t.toolchainLinuxX8664.Cflags() + " " + t.toolchainGlibc.Cflags()
-}
-
-func (t *toolchainLinuxGlibcX8664) Ldflags() string {
- return t.toolchainLinuxX8664.Ldflags() + " " + t.toolchainGlibc.Ldflags()
-}
-
-func (t *toolchainLinuxGlibcX8664) Lldflags() string {
- return t.toolchainLinuxX8664.Lldflags() + " " + t.toolchainGlibc.Lldflags()
-}
-
-var toolchainLinuxGlibcX86Singleton Toolchain = &toolchainLinuxGlibcX86{}
-var toolchainLinuxGlibcX8664Singleton Toolchain = &toolchainLinuxGlibcX8664{}
-
-func linuxGlibcX86ToolchainFactory(arch android.Arch) Toolchain {
- return toolchainLinuxGlibcX86Singleton
-}
-
-func linuxGlibcX8664ToolchainFactory(arch android.Arch) Toolchain {
- return toolchainLinuxGlibcX8664Singleton
-}
-
-// musl specialization of the linux toolchain
-
-type toolchainMusl struct {
-}
-
-func (toolchainMusl) Musl() bool { return true }
-
-func (toolchainMusl) CrtBeginStaticBinary() []string { return muslCrtBeginStaticBinary }
-func (toolchainMusl) CrtBeginSharedBinary() []string { return muslCrtBeginSharedBinary }
-func (toolchainMusl) CrtBeginSharedLibrary() []string { return muslCrtBeginSharedLibrary }
-func (toolchainMusl) CrtEndStaticBinary() []string { return muslCrtEndStaticBinary }
-func (toolchainMusl) CrtEndSharedBinary() []string { return muslCrtEndSharedBinary }
-func (toolchainMusl) CrtEndSharedLibrary() []string { return muslCrtEndSharedLibrary }
-
-func (toolchainMusl) DefaultSharedLibraries() []string { return muslDefaultSharedLibraries }
-
-func (toolchainMusl) Cflags() string {
- return "${config.LinuxMuslCflags}"
-}
-
-func (toolchainMusl) Ldflags() string {
- return "${config.LinuxMuslLdflags}"
-}
-
-func (toolchainMusl) Lldflags() string {
- return "${config.LinuxMuslLldflags}"
-}
-
-type toolchainLinuxMuslX86 struct {
- toolchainLinuxX86
- toolchainMusl
-}
-
-type toolchainLinuxMuslX8664 struct {
- toolchainLinuxX8664
- toolchainMusl
-}
-
-func (t *toolchainLinuxMuslX86) Cflags() string {
- return t.toolchainLinuxX86.Cflags() + " " + t.toolchainMusl.Cflags()
-}
-
-func (t *toolchainLinuxMuslX86) Ldflags() string {
- return t.toolchainLinuxX86.Ldflags() + " " + t.toolchainMusl.Ldflags()
-}
-
-func (t *toolchainLinuxMuslX86) Lldflags() string {
- return t.toolchainLinuxX86.Lldflags() + " " + t.toolchainMusl.Lldflags()
-}
-
-func (t *toolchainLinuxMuslX8664) Cflags() string {
- return t.toolchainLinuxX8664.Cflags() + " " + t.toolchainMusl.Cflags()
-}
-
-func (t *toolchainLinuxMuslX8664) Ldflags() string {
- return t.toolchainLinuxX8664.Ldflags() + " " + t.toolchainMusl.Ldflags()
-}
-
-func (t *toolchainLinuxMuslX8664) Lldflags() string {
- return t.toolchainLinuxX8664.Lldflags() + " " + t.toolchainMusl.Lldflags()
-}
-
-var toolchainLinuxMuslX86Singleton Toolchain = &toolchainLinuxMuslX86{}
-var toolchainLinuxMuslX8664Singleton Toolchain = &toolchainLinuxMuslX8664{}
-
-func linuxMuslX86ToolchainFactory(arch android.Arch) Toolchain {
- return toolchainLinuxMuslX86Singleton
-}
-
-func linuxMuslX8664ToolchainFactory(arch android.Arch) Toolchain {
- return toolchainLinuxMuslX8664Singleton
+func linuxX8664ToolchainFactory(arch android.Arch) Toolchain {
+ return toolchainLinuxX8664Singleton
}
func init() {
- registerToolchainFactory(android.Linux, android.X86, linuxGlibcX86ToolchainFactory)
- registerToolchainFactory(android.Linux, android.X86_64, linuxGlibcX8664ToolchainFactory)
- registerToolchainFactory(android.LinuxMusl, android.X86, linuxMuslX86ToolchainFactory)
- registerToolchainFactory(android.LinuxMusl, android.X86_64, linuxMuslX8664ToolchainFactory)
+ registerToolchainFactory(android.Linux, android.X86, linuxX86ToolchainFactory)
+ registerToolchainFactory(android.Linux, android.X86_64, linuxX8664ToolchainFactory)
}
diff --git a/cc/linker.go b/cc/linker.go
index c8fc431..82449a6 100644
--- a/cc/linker.go
+++ b/cc/linker.go
@@ -385,10 +385,6 @@
indexList("libdl", deps.SystemSharedLibs) < indexList("libc", deps.SystemSharedLibs) {
ctx.PropertyErrorf("system_shared_libs", "libdl must be after libc")
}
- } else if ctx.toolchain().Musl() {
- if !Bool(linker.Properties.No_libcrt) && !ctx.header() {
- deps.LateStaticLibs = append(deps.LateStaticLibs, config.BuiltinsRuntimeLibrary(ctx.toolchain()))
- }
}
deps.LateSharedLibs = append(deps.LateSharedLibs, deps.SystemSharedLibs...)
@@ -476,7 +472,7 @@
flags.Global.LdFlags = append(flags.Global.LdFlags, toolchain.Ldflags())
}
- if !ctx.toolchain().Bionic() && ctx.Os() != android.LinuxMusl {
+ if !ctx.toolchain().Bionic() {
CheckBadHostLdlibs(ctx, "host_ldlibs", linker.Properties.Host_ldlibs)
flags.Local.LdFlags = append(flags.Local.LdFlags, linker.Properties.Host_ldlibs...)
diff --git a/cc/sanitize.go b/cc/sanitize.go
index b244394..3911f48 100644
--- a/cc/sanitize.go
+++ b/cc/sanitize.go
@@ -472,8 +472,8 @@
s.Diag.Cfi = nil
}
- // Disable sanitizers that depend on the UBSan runtime for windows/darwin/musl builds.
- if !ctx.Os().Linux() || ctx.Os() == android.LinuxMusl {
+ // Disable sanitizers that depend on the UBSan runtime for windows/darwin builds.
+ if !ctx.Os().Linux() {
s.Cfi = nil
s.Diag.Cfi = nil
s.Misc_undefined = nil
diff --git a/cc/testing.go b/cc/testing.go
index 1795d63..19513e3 100644
--- a/cc/testing.go
+++ b/cc/testing.go
@@ -450,25 +450,6 @@
cc_library_static {
name: "note_memtag_heap_sync",
}
-
-
- cc_library {
- name: "libjemalloc5",
- host_supported: true,
- no_libcrt: true,
- nocrt: true,
- default_shared_libs: [],
- stl: "none",
- }
-
- cc_library {
- name: "libc_musl",
- host_supported: true,
- no_libcrt: true,
- nocrt: true,
- default_shared_libs: [],
- stl: "none",
- }
`
}
diff --git a/rust/config/x86_linux_host.go b/rust/config/x86_linux_host.go
index 0aa534f..a9fdaed 100644
--- a/rust/config/x86_linux_host.go
+++ b/rust/config/x86_linux_host.go
@@ -37,10 +37,6 @@
registerToolchainFactory(android.Linux, android.X86_64, linuxX8664ToolchainFactory)
registerToolchainFactory(android.Linux, android.X86, linuxX86ToolchainFactory)
- // TODO: musl rust support
- registerToolchainFactory(android.LinuxMusl, android.X86_64, linuxX8664ToolchainFactory)
- registerToolchainFactory(android.LinuxMusl, android.X86, linuxX86ToolchainFactory)
-
pctx.StaticVariable("LinuxToolchainRustFlags", strings.Join(LinuxRustFlags, " "))
pctx.StaticVariable("LinuxToolchainLinkFlags", strings.Join(LinuxRustLinkFlags, " "))
pctx.StaticVariable("LinuxToolchainX86RustFlags", strings.Join(linuxX86Rustflags, " "))