]> git.proxmox.com Git - rustc.git/blob - compiler/rustc_codegen_cranelift/scripts/cargo-clif.rs
New upstream version 1.72.1+dfsg1
[rustc.git] / compiler / rustc_codegen_cranelift / scripts / cargo-clif.rs
1 use std::env;
2 #[cfg(unix)]
3 use std::os::unix::process::CommandExt;
4 use std::process::Command;
5
6 fn main() {
7 let current_exe = env::current_exe().unwrap();
8 let mut sysroot = current_exe.parent().unwrap();
9 if sysroot.file_name().unwrap().to_str().unwrap() == "bin" {
10 sysroot = sysroot.parent().unwrap();
11 }
12
13 let mut rustflags = String::new();
14 rustflags.push_str(" -Cpanic=abort -Zpanic-abort-tests -Zcodegen-backend=");
15 if let Some(name) = option_env!("BUILTIN_BACKEND") {
16 rustflags.push_str(name);
17 } else {
18 rustflags.push_str(
19 sysroot
20 .join(if cfg!(windows) { "bin" } else { "lib" })
21 .join(
22 env::consts::DLL_PREFIX.to_string()
23 + "rustc_codegen_cranelift"
24 + env::consts::DLL_SUFFIX,
25 )
26 .to_str()
27 .unwrap(),
28 );
29 }
30 rustflags.push_str(" --sysroot ");
31 rustflags.push_str(sysroot.to_str().unwrap());
32 env::set_var("RUSTFLAGS", env::var("RUSTFLAGS").unwrap_or(String::new()) + &rustflags);
33 env::set_var("RUSTDOCFLAGS", env::var("RUSTDOCFLAGS").unwrap_or(String::new()) + &rustflags);
34
35 let cargo = if let Some(cargo) = option_env!("CARGO") {
36 cargo
37 } else {
38 // Ensure that the right toolchain is used
39 env::set_var("RUSTUP_TOOLCHAIN", option_env!("TOOLCHAIN_NAME").expect("TOOLCHAIN_NAME"));
40 "cargo"
41 };
42
43 let args: Vec<_> = match env::args().nth(1).as_deref() {
44 Some("jit") => {
45 env::set_var(
46 "RUSTFLAGS",
47 env::var("RUSTFLAGS").unwrap_or(String::new()) + " -Cprefer-dynamic",
48 );
49 IntoIterator::into_iter(["rustc".to_string()])
50 .chain(env::args().skip(2))
51 .chain([
52 "--".to_string(),
53 "-Zunstable-options".to_string(),
54 "-Cllvm-args=mode=jit".to_string(),
55 ])
56 .collect()
57 }
58 Some("lazy-jit") => {
59 env::set_var(
60 "RUSTFLAGS",
61 env::var("RUSTFLAGS").unwrap_or(String::new()) + " -Cprefer-dynamic",
62 );
63 IntoIterator::into_iter(["rustc".to_string()])
64 .chain(env::args().skip(2))
65 .chain([
66 "--".to_string(),
67 "-Zunstable-options".to_string(),
68 "-Cllvm-args=mode=jit-lazy".to_string(),
69 ])
70 .collect()
71 }
72 _ => env::args().skip(1).collect(),
73 };
74
75 #[cfg(unix)]
76 panic!("Failed to spawn cargo: {}", Command::new(cargo).args(args).exec());
77
78 #[cfg(not(unix))]
79 std::process::exit(
80 Command::new(cargo).args(args).spawn().unwrap().wait().unwrap().code().unwrap_or(1),
81 );
82 }