Skip to content

Commit 05c2305

Browse files
committed
Auto merge of rust-lang#140994 - onur-ozkan:cc2ar-removal, r=<try>
replace `cc_detect::cc2ar` with `cc::try_get_archiver` ~~Awaiting new release of [cc](https://crates.io/crates/cc) version with rust-lang/cc-rs#1456 to bump the version.~~ ~~Blocked by rust-lang/cc-rs#1456 Kind a self-explanatory. try-job: arm-android
2 parents 7068c8b + 53ca86c commit 05c2305

File tree

4 files changed

+37
-144
lines changed

4 files changed

+37
-144
lines changed

src/bootstrap/Cargo.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,9 @@ dependencies = [
8989

9090
[[package]]
9191
name = "cc"
92-
version = "1.2.17"
92+
version = "1.2.23"
9393
source = "registry+https://github.com/rust-lang/crates.io-index"
94-
checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a"
94+
checksum = "5f4ac86a9e5bc1e2b3449ab9d7d3a6a405e3d1bb28d7b9be8614f55846ae3766"
9595
dependencies = [
9696
"shlex",
9797
]

src/bootstrap/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ test = false
3232
# Most of the time updating these dependencies requires modifications to the
3333
# bootstrap codebase(e.g., https://github.com/rust-lang/rust/issues/124565);
3434
# otherwise, some targets will fail. That's why these dependencies are explicitly pinned.
35-
cc = "=1.2.17"
35+
cc = "=1.2.23"
3636
cmake = "=0.1.54"
3737

3838
build_helper = { path = "../build_helper" }

src/bootstrap/src/utils/cc_detect.rs

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,33 @@ use crate::core::config::TargetSelection;
2929
use crate::utils::exec::{BootstrapCommand, command};
3030
use crate::{Build, CLang, GitRepo};
3131

32+
/// Creates and configures a new [`cc::Build`] instance for the given target.
33+
fn new_cc_build(build: &Build, target: TargetSelection) -> cc::Build {
34+
let mut cfg = cc::Build::new();
35+
cfg.cargo_metadata(false)
36+
.opt_level(2)
37+
.warnings(false)
38+
.debug(false)
39+
// Compress debuginfo
40+
.flag_if_supported("-gz")
41+
.target(&target.triple)
42+
.host(&build.build.triple);
43+
match build.crt_static(target) {
44+
Some(a) => {
45+
cfg.static_crt(a);
46+
}
47+
None => {
48+
if target.is_msvc() {
49+
cfg.static_crt(true);
50+
}
51+
if target.contains("musl") {
52+
cfg.static_flag(true);
53+
}
54+
}
55+
}
56+
cfg
57+
}
58+
3259
/// Finds archiver tool for the given target if possible.
3360
/// FIXME(onur-ozkan): This logic should be replaced by calling into the `cc` crate.
3461
fn cc2ar(cc: &Path, target: TargetSelection, default_ar: PathBuf) -> Option<PathBuf> {
@@ -59,33 +86,6 @@ fn cc2ar(cc: &Path, target: TargetSelection, default_ar: PathBuf) -> Option<Path
5986
}
6087
}
6188

62-
/// Creates and configures a new [`cc::Build`] instance for the given target.
63-
fn new_cc_build(build: &Build, target: TargetSelection) -> cc::Build {
64-
let mut cfg = cc::Build::new();
65-
cfg.cargo_metadata(false)
66-
.opt_level(2)
67-
.warnings(false)
68-
.debug(false)
69-
// Compress debuginfo
70-
.flag_if_supported("-gz")
71-
.target(&target.triple)
72-
.host(&build.build.triple);
73-
match build.crt_static(target) {
74-
Some(a) => {
75-
cfg.static_crt(a);
76-
}
77-
None => {
78-
if target.is_msvc() {
79-
cfg.static_crt(true);
80-
}
81-
if target.contains("musl") {
82-
cfg.static_flag(true);
83-
}
84-
}
85-
}
86-
cfg
87-
}
88-
8989
/// Probes for C and C++ compilers and configures the corresponding entries in the [`Build`]
9090
/// structure.
9191
///
@@ -140,7 +140,13 @@ pub fn find_target(build: &Build, target: TargetSelection) {
140140
let ar = if let ar @ Some(..) = config.and_then(|c| c.ar.clone()) {
141141
ar
142142
} else {
143-
cc2ar(compiler.path(), target, PathBuf::from(cfg.get_archiver().get_program()))
143+
dbg!(compiler.path());
144+
let old = cc2ar(compiler.path(), target, PathBuf::from(cfg.get_archiver().get_program()));
145+
dbg!(old);
146+
let new = cfg.try_get_archiver().map(|c| PathBuf::from(c.get_program())).ok();
147+
dbg!(&new);
148+
149+
new
144150
};
145151

146152
build.cc.borrow_mut().insert(target, compiler.clone());

src/bootstrap/src/utils/cc_detect/tests.rs

Lines changed: 0 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -5,119 +5,6 @@ use super::*;
55
use crate::core::config::{Target, TargetSelection};
66
use crate::{Build, Config, Flags};
77

8-
#[test]
9-
fn test_cc2ar_env_specific() {
10-
let triple = "x86_64-unknown-linux-gnu";
11-
let key = "AR_x86_64_unknown_linux_gnu";
12-
// SAFETY: bootstrap tests run on a single thread
13-
unsafe { env::set_var(key, "custom-ar") };
14-
let target = TargetSelection::from_user(triple);
15-
let cc = Path::new("/usr/bin/clang");
16-
let default_ar = PathBuf::from("default-ar");
17-
let result = cc2ar(cc, target, default_ar);
18-
// SAFETY: bootstrap tests run on a single thread
19-
unsafe { env::remove_var(key) };
20-
assert_eq!(result, Some(PathBuf::from("custom-ar")));
21-
}
22-
23-
#[test]
24-
fn test_cc2ar_musl() {
25-
let triple = "x86_64-unknown-linux-musl";
26-
// SAFETY: bootstrap tests run on a single thread
27-
unsafe { env::remove_var("AR_x86_64_unknown_linux_musl") };
28-
// SAFETY: bootstrap tests run on a single thread
29-
unsafe { env::remove_var("AR") };
30-
let target = TargetSelection::from_user(triple);
31-
let cc = Path::new("/usr/bin/clang");
32-
let default_ar = PathBuf::from("default-ar");
33-
let result = cc2ar(cc, target, default_ar);
34-
assert_eq!(result, Some(PathBuf::from("ar")));
35-
}
36-
37-
#[test]
38-
fn test_cc2ar_openbsd() {
39-
let triple = "x86_64-unknown-openbsd";
40-
// SAFETY: bootstrap tests run on a single thread
41-
unsafe { env::remove_var("AR_x86_64_unknown_openbsd") };
42-
// SAFETY: bootstrap tests run on a single thread
43-
unsafe { env::remove_var("AR") };
44-
let target = TargetSelection::from_user(triple);
45-
let cc = Path::new("/usr/bin/cc");
46-
let default_ar = PathBuf::from("default-ar");
47-
let result = cc2ar(cc, target, default_ar);
48-
assert_eq!(result, Some(PathBuf::from("ar")));
49-
}
50-
51-
#[test]
52-
fn test_cc2ar_vxworks() {
53-
let triple = "armv7-wrs-vxworks";
54-
// SAFETY: bootstrap tests run on a single thread
55-
unsafe { env::remove_var("AR_armv7_wrs_vxworks") };
56-
// SAFETY: bootstrap tests run on a single thread
57-
unsafe { env::remove_var("AR") };
58-
let target = TargetSelection::from_user(triple);
59-
let cc = Path::new("/usr/bin/clang");
60-
let default_ar = PathBuf::from("default-ar");
61-
let result = cc2ar(cc, target, default_ar);
62-
assert_eq!(result, Some(PathBuf::from("wr-ar")));
63-
}
64-
65-
#[test]
66-
fn test_cc2ar_nto_i586() {
67-
let triple = "i586-unknown-nto-something";
68-
// SAFETY: bootstrap tests run on a single thread
69-
unsafe { env::remove_var("AR_i586_unknown_nto_something") };
70-
// SAFETY: bootstrap tests run on a single thread
71-
unsafe { env::remove_var("AR") };
72-
let target = TargetSelection::from_user(triple);
73-
let cc = Path::new("/usr/bin/clang");
74-
let default_ar = PathBuf::from("default-ar");
75-
let result = cc2ar(cc, target, default_ar);
76-
assert_eq!(result, Some(PathBuf::from("ntox86-ar")));
77-
}
78-
79-
#[test]
80-
fn test_cc2ar_nto_aarch64() {
81-
let triple = "aarch64-unknown-nto-something";
82-
// SAFETY: bootstrap tests run on a single thread
83-
unsafe { env::remove_var("AR_aarch64_unknown_nto_something") };
84-
// SAFETY: bootstrap tests run on a single thread
85-
unsafe { env::remove_var("AR") };
86-
let target = TargetSelection::from_user(triple);
87-
let cc = Path::new("/usr/bin/clang");
88-
let default_ar = PathBuf::from("default-ar");
89-
let result = cc2ar(cc, target, default_ar);
90-
assert_eq!(result, Some(PathBuf::from("ntoaarch64-ar")));
91-
}
92-
93-
#[test]
94-
fn test_cc2ar_nto_x86_64() {
95-
let triple = "x86_64-unknown-nto-something";
96-
// SAFETY: bootstrap tests run on a single thread
97-
unsafe { env::remove_var("AR_x86_64_unknown_nto_something") };
98-
// SAFETY: bootstrap tests run on a single thread
99-
unsafe { env::remove_var("AR") };
100-
let target = TargetSelection::from_user(triple);
101-
let cc = Path::new("/usr/bin/clang");
102-
let default_ar = PathBuf::from("default-ar");
103-
let result = cc2ar(cc, target, default_ar);
104-
assert_eq!(result, Some(PathBuf::from("ntox86_64-ar")));
105-
}
106-
107-
#[test]
108-
#[should_panic(expected = "Unknown architecture, cannot determine archiver for Neutrino QNX")]
109-
fn test_cc2ar_nto_unknown() {
110-
let triple = "powerpc-unknown-nto-something";
111-
// SAFETY: bootstrap tests run on a single thread
112-
unsafe { env::remove_var("AR_powerpc_unknown_nto_something") };
113-
// SAFETY: bootstrap tests run on a single thread
114-
unsafe { env::remove_var("AR") };
115-
let target = TargetSelection::from_user(triple);
116-
let cc = Path::new("/usr/bin/clang");
117-
let default_ar = PathBuf::from("default-ar");
118-
let _ = cc2ar(cc, target, default_ar);
119-
}
120-
1218
#[test]
1229
fn test_ndk_compiler_c() {
12310
let ndk_path = PathBuf::from("/ndk");

0 commit comments

Comments
 (0)