351 lines
15 KiB
Diff
351 lines
15 KiB
Diff
From 7219ba1c9accbad9b530d312fd9a9f69330c93da Mon Sep 17 00:00:00 2001
|
|
From: Samuel Holland <samuel@sholland.org>
|
|
Date: Sun, 3 May 2020 17:53:33 +0200
|
|
Subject: [PATCH 02/15] Remove -nostdlib and musl_root from musl targets
|
|
|
|
extended by various void contributors to match our musl setup
|
|
|
|
diff --git a/compiler/rustc_target/src/spec/base/linux_musl.rs b/compiler/rustc_target/src/spec/base/linux_musl.rs
|
|
index 5117cadbe..c7d0433bb 100644
|
|
--- a/compiler/rustc_target/src/spec/base/linux_musl.rs
|
|
+++ b/compiler/rustc_target/src/spec/base/linux_musl.rs
|
|
@@ -1,16 +1,9 @@
|
|
-use crate::spec::crt_objects;
|
|
-use crate::spec::{base, LinkSelfContainedDefault, TargetOptions};
|
|
+use crate::spec::{base, TargetOptions};
|
|
|
|
pub fn opts() -> TargetOptions {
|
|
let mut base = base::linux::opts();
|
|
|
|
base.env = "musl".into();
|
|
- base.pre_link_objects_self_contained = crt_objects::pre_musl_self_contained();
|
|
- base.post_link_objects_self_contained = crt_objects::post_musl_self_contained();
|
|
- base.link_self_contained = LinkSelfContainedDefault::InferredForMusl;
|
|
-
|
|
- // These targets statically link libc by default
|
|
- base.crt_static_default = true;
|
|
|
|
base
|
|
}
|
|
diff --git a/compiler/rustc_target/src/spec/crt_objects.rs b/compiler/rustc_target/src/spec/crt_objects.rs
|
|
index 53f710b8f..2a4eec15f 100644
|
|
--- a/compiler/rustc_target/src/spec/crt_objects.rs
|
|
+++ b/compiler/rustc_target/src/spec/crt_objects.rs
|
|
@@ -61,28 +61,6 @@ pub(super) fn all(obj: &'static str) -> CrtObjects {
|
|
])
|
|
}
|
|
|
|
-pub(super) fn pre_musl_self_contained() -> CrtObjects {
|
|
- new(&[
|
|
- (LinkOutputKind::DynamicNoPicExe, &["crt1.o", "crti.o", "crtbegin.o"]),
|
|
- (LinkOutputKind::DynamicPicExe, &["Scrt1.o", "crti.o", "crtbeginS.o"]),
|
|
- (LinkOutputKind::StaticNoPicExe, &["crt1.o", "crti.o", "crtbegin.o"]),
|
|
- (LinkOutputKind::StaticPicExe, &["rcrt1.o", "crti.o", "crtbeginS.o"]),
|
|
- (LinkOutputKind::DynamicDylib, &["crti.o", "crtbeginS.o"]),
|
|
- (LinkOutputKind::StaticDylib, &["crti.o", "crtbeginS.o"]),
|
|
- ])
|
|
-}
|
|
-
|
|
-pub(super) fn post_musl_self_contained() -> CrtObjects {
|
|
- new(&[
|
|
- (LinkOutputKind::DynamicNoPicExe, &["crtend.o", "crtn.o"]),
|
|
- (LinkOutputKind::DynamicPicExe, &["crtendS.o", "crtn.o"]),
|
|
- (LinkOutputKind::StaticNoPicExe, &["crtend.o", "crtn.o"]),
|
|
- (LinkOutputKind::StaticPicExe, &["crtendS.o", "crtn.o"]),
|
|
- (LinkOutputKind::DynamicDylib, &["crtendS.o", "crtn.o"]),
|
|
- (LinkOutputKind::StaticDylib, &["crtendS.o", "crtn.o"]),
|
|
- ])
|
|
-}
|
|
-
|
|
pub(super) fn pre_mingw_self_contained() -> CrtObjects {
|
|
new(&[
|
|
(LinkOutputKind::DynamicNoPicExe, &["crt2.o", "rsbegin.o"]),
|
|
diff --git a/config.example.toml b/config.example.toml
|
|
index 5c1fac767..a95c9aa88 100644
|
|
--- a/config.example.toml
|
|
+++ b/config.example.toml
|
|
@@ -588,14 +588,6 @@
|
|
# behavior -- this may lead to miscompilations or other bugs.
|
|
#description = ""
|
|
|
|
-# The root location of the musl installation directory. The library directory
|
|
-# will also need to contain libunwind.a for an unwinding implementation. Note
|
|
-# that this option only makes sense for musl targets that produce statically
|
|
-# linked binaries.
|
|
-#
|
|
-# Defaults to /usr on musl hosts. Has no default otherwise.
|
|
-#musl-root = <platform specific> (path)
|
|
-
|
|
# By default the `rustc` executable is built with `-Wl,-rpath` flags on Unix
|
|
# platforms to ensure that the compiler is usable by default from the build
|
|
# directory (as it links to a number of dynamic libraries). This may not be
|
|
diff --git a/src/bootstrap/configure.py b/src/bootstrap/configure.py
|
|
index 768aac912..6aebd9189 100755
|
|
--- a/src/bootstrap/configure.py
|
|
+++ b/src/bootstrap/configure.py
|
|
@@ -99,34 +99,6 @@ v("llvm-config", None, "set path to llvm-config")
|
|
v("llvm-filecheck", None, "set path to LLVM's FileCheck utility")
|
|
v("python", "build.python", "set path to python")
|
|
v("android-ndk", "build.android-ndk", "set path to Android NDK")
|
|
-v("musl-root", "target.x86_64-unknown-linux-musl.musl-root",
|
|
- "MUSL root installation directory (deprecated)")
|
|
-v("musl-root-x86_64", "target.x86_64-unknown-linux-musl.musl-root",
|
|
- "x86_64-unknown-linux-musl install directory")
|
|
-v("musl-root-i586", "target.i586-unknown-linux-musl.musl-root",
|
|
- "i586-unknown-linux-musl install directory")
|
|
-v("musl-root-i686", "target.i686-unknown-linux-musl.musl-root",
|
|
- "i686-unknown-linux-musl install directory")
|
|
-v("musl-root-arm", "target.arm-unknown-linux-musleabi.musl-root",
|
|
- "arm-unknown-linux-musleabi install directory")
|
|
-v("musl-root-armhf", "target.arm-unknown-linux-musleabihf.musl-root",
|
|
- "arm-unknown-linux-musleabihf install directory")
|
|
-v("musl-root-armv5te", "target.armv5te-unknown-linux-musleabi.musl-root",
|
|
- "armv5te-unknown-linux-musleabi install directory")
|
|
-v("musl-root-armv7", "target.armv7-unknown-linux-musleabi.musl-root",
|
|
- "armv7-unknown-linux-musleabi install directory")
|
|
-v("musl-root-armv7hf", "target.armv7-unknown-linux-musleabihf.musl-root",
|
|
- "armv7-unknown-linux-musleabihf install directory")
|
|
-v("musl-root-aarch64", "target.aarch64-unknown-linux-musl.musl-root",
|
|
- "aarch64-unknown-linux-musl install directory")
|
|
-v("musl-root-mips", "target.mips-unknown-linux-musl.musl-root",
|
|
- "mips-unknown-linux-musl install directory")
|
|
-v("musl-root-mipsel", "target.mipsel-unknown-linux-musl.musl-root",
|
|
- "mipsel-unknown-linux-musl install directory")
|
|
-v("musl-root-mips64", "target.mips64-unknown-linux-muslabi64.musl-root",
|
|
- "mips64-unknown-linux-muslabi64 install directory")
|
|
-v("musl-root-mips64el", "target.mips64el-unknown-linux-muslabi64.musl-root",
|
|
- "mips64el-unknown-linux-muslabi64 install directory")
|
|
v("musl-root-riscv32gc", "target.riscv32gc-unknown-linux-musl.musl-root",
|
|
"riscv32gc-unknown-linux-musl install directory")
|
|
v("musl-root-riscv64gc", "target.riscv64gc-unknown-linux-musl.musl-root",
|
|
diff --git a/src/bootstrap/src/core/build_steps/compile.rs b/src/bootstrap/src/core/build_steps/compile.rs
|
|
index 1d46a158f..b9a6dd981 100644
|
|
--- a/src/bootstrap/src/core/build_steps/compile.rs
|
|
+++ b/src/bootstrap/src/core/build_steps/compile.rs
|
|
@@ -361,39 +361,7 @@ fn copy_self_contained_objects(
|
|
let mut target_deps = vec![];
|
|
|
|
// Copies the libc and CRT objects.
|
|
- //
|
|
- // rustc historically provides a more self-contained installation for musl targets
|
|
- // not requiring the presence of a native musl toolchain. For example, it can fall back
|
|
- // to using gcc from a glibc-targeting toolchain for linking.
|
|
- // To do that we have to distribute musl startup objects as a part of Rust toolchain
|
|
- // and link with them manually in the self-contained mode.
|
|
- if target.contains("musl") && !target.contains("unikraft") {
|
|
- let srcdir = builder.musl_libdir(target).unwrap_or_else(|| {
|
|
- panic!("Target {:?} does not have a \"musl-libdir\" key", target.triple)
|
|
- });
|
|
- for &obj in &["libc.a", "crt1.o", "Scrt1.o", "rcrt1.o", "crti.o", "crtn.o"] {
|
|
- copy_and_stamp(
|
|
- builder,
|
|
- &libdir_self_contained,
|
|
- &srcdir,
|
|
- obj,
|
|
- &mut target_deps,
|
|
- DependencyType::TargetSelfContained,
|
|
- );
|
|
- }
|
|
- let crt_path = builder.ensure(llvm::CrtBeginEnd { target });
|
|
- for &obj in &["crtbegin.o", "crtbeginS.o", "crtend.o", "crtendS.o"] {
|
|
- let src = crt_path.join(obj);
|
|
- let target = libdir_self_contained.join(obj);
|
|
- builder.copy_link(&src, &target);
|
|
- target_deps.push((target, DependencyType::TargetSelfContained));
|
|
- }
|
|
-
|
|
- if !target.starts_with("s390x") {
|
|
- let libunwind_path = copy_llvm_libunwind(builder, target, &libdir_self_contained);
|
|
- target_deps.push((libunwind_path, DependencyType::TargetSelfContained));
|
|
- }
|
|
- } else if target.contains("-wasi") {
|
|
+ if target.contains("-wasi") {
|
|
let srcdir = builder.wasi_libdir(target).unwrap_or_else(|| {
|
|
panic!(
|
|
"Target {:?} does not have a \"wasi-root\" key in Config.toml \
|
|
@@ -501,15 +469,6 @@ pub fn std_cargo(builder: &Builder<'_>, target: TargetSelection, stage: u32, car
|
|
.arg("--manifest-path")
|
|
.arg(builder.src.join("library/sysroot/Cargo.toml"));
|
|
|
|
- // Help the libc crate compile by assisting it in finding various
|
|
- // sysroot native libraries.
|
|
- if target.contains("musl") {
|
|
- if let Some(p) = builder.musl_libdir(target) {
|
|
- let root = format!("native={}", p.to_str().unwrap());
|
|
- cargo.rustflag("-L").rustflag(&root);
|
|
- }
|
|
- }
|
|
-
|
|
if target.contains("-wasi") {
|
|
if let Some(dir) = builder.wasi_libdir(target) {
|
|
let root = format!("native={}", dir.to_str().unwrap());
|
|
diff --git a/src/bootstrap/src/core/config/config.rs b/src/bootstrap/src/core/config/config.rs
|
|
index 149a62f88..53b1b97be 100644
|
|
--- a/src/bootstrap/src/core/config/config.rs
|
|
+++ b/src/bootstrap/src/core/config/config.rs
|
|
@@ -317,7 +317,6 @@ pub struct Config {
|
|
pub missing_tools: bool, // FIXME: Deprecated field. Remove it at 2024.
|
|
|
|
// Fallback musl-root for all targets
|
|
- pub musl_root: Option<PathBuf>,
|
|
pub prefix: Option<PathBuf>,
|
|
pub sysconfdir: Option<PathBuf>,
|
|
pub datadir: Option<PathBuf>,
|
|
@@ -588,8 +587,6 @@ pub struct Target {
|
|
pub profiler: Option<StringOrBool>,
|
|
pub rpath: Option<bool>,
|
|
pub crt_static: Option<bool>,
|
|
- pub musl_root: Option<PathBuf>,
|
|
- pub musl_libdir: Option<PathBuf>,
|
|
pub wasi_root: Option<PathBuf>,
|
|
pub qemu_rootfs: Option<PathBuf>,
|
|
pub runner: Option<String>,
|
|
@@ -1097,7 +1094,6 @@ define_config! {
|
|
default_linker: Option<String> = "default-linker",
|
|
channel: Option<String> = "channel",
|
|
description: Option<String> = "description",
|
|
- musl_root: Option<String> = "musl-root",
|
|
rpath: Option<bool> = "rpath",
|
|
strip: Option<bool> = "strip",
|
|
frame_pointers: Option<bool> = "frame-pointers",
|
|
@@ -1151,8 +1147,6 @@ define_config! {
|
|
profiler: Option<StringOrBool> = "profiler",
|
|
rpath: Option<bool> = "rpath",
|
|
crt_static: Option<bool> = "crt-static",
|
|
- musl_root: Option<String> = "musl-root",
|
|
- musl_libdir: Option<String> = "musl-libdir",
|
|
wasi_root: Option<String> = "wasi-root",
|
|
qemu_rootfs: Option<String> = "qemu-rootfs",
|
|
no_std: Option<bool> = "no-std",
|
|
@@ -1582,7 +1576,6 @@ impl Config {
|
|
default_linker,
|
|
channel,
|
|
description,
|
|
- musl_root,
|
|
rpath,
|
|
verbose_tests,
|
|
optimize_tests,
|
|
@@ -1695,7 +1688,6 @@ impl Config {
|
|
config.rustc_parallel =
|
|
parallel_compiler.unwrap_or(config.channel == "dev" || config.channel == "nightly");
|
|
config.rustc_default_linker = default_linker;
|
|
- config.musl_root = musl_root.map(PathBuf::from);
|
|
config.save_toolstates = save_toolstates.map(PathBuf::from);
|
|
set(
|
|
&mut config.deny_warnings,
|
|
@@ -1894,8 +1886,6 @@ impl Config {
|
|
target.ranlib = cfg.ranlib.map(PathBuf::from);
|
|
target.linker = cfg.linker.map(PathBuf::from);
|
|
target.crt_static = cfg.crt_static;
|
|
- target.musl_root = cfg.musl_root.map(PathBuf::from);
|
|
- target.musl_libdir = cfg.musl_libdir.map(PathBuf::from);
|
|
target.wasi_root = cfg.wasi_root.map(PathBuf::from);
|
|
target.qemu_rootfs = cfg.qemu_rootfs.map(PathBuf::from);
|
|
target.runner = cfg.runner;
|
|
diff --git a/src/bootstrap/src/core/sanity.rs b/src/bootstrap/src/core/sanity.rs
|
|
index e03b1e179..e61335d9b 100644
|
|
--- a/src/bootstrap/src/core/sanity.rs
|
|
+++ b/src/bootstrap/src/core/sanity.rs
|
|
@@ -11,7 +11,6 @@
|
|
use std::collections::HashMap;
|
|
use std::env;
|
|
use std::ffi::{OsStr, OsString};
|
|
-use std::fs;
|
|
use std::path::PathBuf;
|
|
use std::process::Command;
|
|
|
|
@@ -220,28 +219,6 @@ than building it.
|
|
continue;
|
|
}
|
|
|
|
- // Make sure musl-root is valid.
|
|
- if target.contains("musl") && !target.contains("unikraft") {
|
|
- // If this is a native target (host is also musl) and no musl-root is given,
|
|
- // fall back to the system toolchain in /usr before giving up
|
|
- if build.musl_root(*target).is_none() && build.config.build == *target {
|
|
- let target = build.config.target_config.entry(*target).or_default();
|
|
- target.musl_root = Some("/usr".into());
|
|
- }
|
|
- match build.musl_libdir(*target) {
|
|
- Some(libdir) => {
|
|
- if fs::metadata(libdir.join("libc.a")).is_err() {
|
|
- panic!("couldn't find libc.a in musl libdir: {}", libdir.display());
|
|
- }
|
|
- }
|
|
- None => panic!(
|
|
- "when targeting MUSL either the rust.musl-root \
|
|
- option or the target.$TARGET.musl-root option must \
|
|
- be specified in config.toml"
|
|
- ),
|
|
- }
|
|
- }
|
|
-
|
|
if need_cmake && target.is_msvc() {
|
|
// There are three builds of cmake on windows: MSVC, MinGW, and
|
|
// Cygwin. The Cygwin build does not have generators for Visual
|
|
diff --git a/src/bootstrap/src/lib.rs b/src/bootstrap/src/lib.rs
|
|
index 663a2d8e1..d2345a54f 100644
|
|
--- a/src/bootstrap/src/lib.rs
|
|
+++ b/src/bootstrap/src/lib.rs
|
|
@@ -1355,25 +1355,6 @@ impl Build {
|
|
}
|
|
}
|
|
|
|
- /// Returns the "musl root" for this `target`, if defined
|
|
- fn musl_root(&self, target: TargetSelection) -> Option<&Path> {
|
|
- self.config
|
|
- .target_config
|
|
- .get(&target)
|
|
- .and_then(|t| t.musl_root.as_ref())
|
|
- .or(self.config.musl_root.as_ref())
|
|
- .map(|p| &**p)
|
|
- }
|
|
-
|
|
- /// Returns the "musl libdir" for this `target`.
|
|
- fn musl_libdir(&self, target: TargetSelection) -> Option<PathBuf> {
|
|
- let t = self.config.target_config.get(&target)?;
|
|
- if let libdir @ Some(_) = &t.musl_libdir {
|
|
- return libdir.clone();
|
|
- }
|
|
- self.musl_root(target).map(|root| root.join("lib"))
|
|
- }
|
|
-
|
|
/// Returns the `lib` directory for the WASI target specified, if
|
|
/// configured.
|
|
///
|
|
diff --git a/src/bootstrap/src/utils/cc_detect.rs b/src/bootstrap/src/utils/cc_detect.rs
|
|
index 540b86713..f01c87085 100644
|
|
--- a/src/bootstrap/src/utils/cc_detect.rs
|
|
+++ b/src/bootstrap/src/utils/cc_detect.rs
|
|
@@ -197,30 +197,6 @@ fn default_compiler(
|
|
}
|
|
}
|
|
|
|
- "mips-unknown-linux-musl" if compiler == Language::C => {
|
|
- if cfg.get_compiler().path().to_str() == Some("gcc") {
|
|
- Some(PathBuf::from("mips-linux-musl-gcc"))
|
|
- } else {
|
|
- None
|
|
- }
|
|
- }
|
|
- "mipsel-unknown-linux-musl" if compiler == Language::C => {
|
|
- if cfg.get_compiler().path().to_str() == Some("gcc") {
|
|
- Some(PathBuf::from("mipsel-linux-musl-gcc"))
|
|
- } else {
|
|
- None
|
|
- }
|
|
- }
|
|
-
|
|
- t if t.contains("musl") && compiler == Language::C => {
|
|
- if let Some(root) = build.musl_root(target) {
|
|
- let guess = root.join("bin/musl-gcc");
|
|
- if guess.exists() { Some(guess) } else { None }
|
|
- } else {
|
|
- None
|
|
- }
|
|
- }
|
|
-
|
|
t if t.contains("-wasi") => {
|
|
let root = PathBuf::from(std::env::var_os("WASI_SDK_PATH")?);
|
|
let compiler = match compiler {
|