summaryrefslogtreecommitdiffstats
path: root/src/bootstrap/cc_detect.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:57:31 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:57:31 +0000
commitdc0db358abe19481e475e10c32149b53370f1a1c (patch)
treeab8ce99c4b255ce46f99ef402c27916055b899ee /src/bootstrap/cc_detect.rs
parentReleasing progress-linux version 1.71.1+dfsg1-2~progress7.99u1. (diff)
downloadrustc-dc0db358abe19481e475e10c32149b53370f1a1c.tar.xz
rustc-dc0db358abe19481e475e10c32149b53370f1a1c.zip
Merging upstream version 1.72.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/bootstrap/cc_detect.rs')
-rw-r--r--src/bootstrap/cc_detect.rs104
1 files changed, 55 insertions, 49 deletions
diff --git a/src/bootstrap/cc_detect.rs b/src/bootstrap/cc_detect.rs
index 65c882fb8..ade3bfed1 100644
--- a/src/bootstrap/cc_detect.rs
+++ b/src/bootstrap/cc_detect.rs
@@ -69,6 +69,8 @@ fn new_cc_build(build: &Build, target: TargetSelection) -> cc::Build {
.opt_level(2)
.warnings(false)
.debug(false)
+ // Compress debuginfo
+ .flag_if_supported("-gz")
.target(&target.triple)
.host(&build.build.triple);
match build.crt_static(target) {
@@ -87,7 +89,7 @@ fn new_cc_build(build: &Build, target: TargetSelection) -> cc::Build {
cfg
}
-pub fn find(build: &mut Build) {
+pub fn find(build: &Build) {
// For all targets we're going to need a C compiler for building some shims
// and such as well as for being a linker for Rust code.
let targets = build
@@ -98,60 +100,64 @@ pub fn find(build: &mut Build) {
.chain(iter::once(build.build))
.collect::<HashSet<_>>();
for target in targets.into_iter() {
- let mut cfg = new_cc_build(build, target);
- let config = build.config.target_config.get(&target);
- if let Some(cc) = config.and_then(|c| c.cc.as_ref()) {
- cfg.compiler(cc);
- } else {
- set_compiler(&mut cfg, Language::C, target, config, build);
- }
+ find_target(build, target);
+ }
+}
- let compiler = cfg.get_compiler();
- let ar = if let ar @ Some(..) = config.and_then(|c| c.ar.clone()) {
- ar
- } else {
- cc2ar(compiler.path(), target)
- };
+pub fn find_target(build: &Build, target: TargetSelection) {
+ let mut cfg = new_cc_build(build, target);
+ let config = build.config.target_config.get(&target);
+ if let Some(cc) = config.and_then(|c| c.cc.as_ref()) {
+ cfg.compiler(cc);
+ } else {
+ set_compiler(&mut cfg, Language::C, target, config, build);
+ }
- build.cc.insert(target, compiler.clone());
- let cflags = build.cflags(target, GitRepo::Rustc, CLang::C);
+ let compiler = cfg.get_compiler();
+ let ar = if let ar @ Some(..) = config.and_then(|c| c.ar.clone()) {
+ ar
+ } else {
+ cc2ar(compiler.path(), target)
+ };
- // If we use llvm-libunwind, we will need a C++ compiler as well for all targets
- // We'll need one anyways if the target triple is also a host triple
- let mut cfg = new_cc_build(build, target);
- cfg.cpp(true);
- let cxx_configured = if let Some(cxx) = config.and_then(|c| c.cxx.as_ref()) {
- cfg.compiler(cxx);
- true
- } else if build.hosts.contains(&target) || build.build == target {
- set_compiler(&mut cfg, Language::CPlusPlus, target, config, build);
- true
- } else {
- // Use an auto-detected compiler (or one configured via `CXX_target_triple` env vars).
- cfg.try_get_compiler().is_ok()
- };
+ build.cc.borrow_mut().insert(target, compiler.clone());
+ let cflags = build.cflags(target, GitRepo::Rustc, CLang::C);
- // for VxWorks, record CXX compiler which will be used in lib.rs:linker()
- if cxx_configured || target.contains("vxworks") {
- let compiler = cfg.get_compiler();
- build.cxx.insert(target, compiler);
- }
+ // If we use llvm-libunwind, we will need a C++ compiler as well for all targets
+ // We'll need one anyways if the target triple is also a host triple
+ let mut cfg = new_cc_build(build, target);
+ cfg.cpp(true);
+ let cxx_configured = if let Some(cxx) = config.and_then(|c| c.cxx.as_ref()) {
+ cfg.compiler(cxx);
+ true
+ } else if build.hosts.contains(&target) || build.build == target {
+ set_compiler(&mut cfg, Language::CPlusPlus, target, config, build);
+ true
+ } else {
+ // Use an auto-detected compiler (or one configured via `CXX_target_triple` env vars).
+ cfg.try_get_compiler().is_ok()
+ };
- build.verbose(&format!("CC_{} = {:?}", &target.triple, build.cc(target)));
- build.verbose(&format!("CFLAGS_{} = {:?}", &target.triple, cflags));
- if let Ok(cxx) = build.cxx(target) {
- let cxxflags = build.cflags(target, GitRepo::Rustc, CLang::Cxx);
- build.verbose(&format!("CXX_{} = {:?}", &target.triple, cxx));
- build.verbose(&format!("CXXFLAGS_{} = {:?}", &target.triple, cxxflags));
- }
- if let Some(ar) = ar {
- build.verbose(&format!("AR_{} = {:?}", &target.triple, ar));
- build.ar.insert(target, ar);
- }
+ // for VxWorks, record CXX compiler which will be used in lib.rs:linker()
+ if cxx_configured || target.contains("vxworks") {
+ let compiler = cfg.get_compiler();
+ build.cxx.borrow_mut().insert(target, compiler);
+ }
- if let Some(ranlib) = config.and_then(|c| c.ranlib.clone()) {
- build.ranlib.insert(target, ranlib);
- }
+ build.verbose(&format!("CC_{} = {:?}", &target.triple, build.cc(target)));
+ build.verbose(&format!("CFLAGS_{} = {:?}", &target.triple, cflags));
+ if let Ok(cxx) = build.cxx(target) {
+ let cxxflags = build.cflags(target, GitRepo::Rustc, CLang::Cxx);
+ build.verbose(&format!("CXX_{} = {:?}", &target.triple, cxx));
+ build.verbose(&format!("CXXFLAGS_{} = {:?}", &target.triple, cxxflags));
+ }
+ if let Some(ar) = ar {
+ build.verbose(&format!("AR_{} = {:?}", &target.triple, ar));
+ build.ar.borrow_mut().insert(target, ar);
+ }
+
+ if let Some(ranlib) = config.and_then(|c| c.ranlib.clone()) {
+ build.ranlib.borrow_mut().insert(target, ranlib);
}
}