]> git.proxmox.com Git - rustc.git/blame - src/tools/compiletest/src/util.rs
New upstream version 1.69.0+dfsg1
[rustc.git] / src / tools / compiletest / src / util.rs
CommitLineData
dfeec247 1use crate::common::Config;
85aaf69f 2use std::env;
dfeec247 3use std::ffi::OsStr;
94b46f34 4use std::path::PathBuf;
487cf647 5use std::process::Command;
1a4d82fc 6
3dfed10e 7use tracing::*;
48663c56 8
416331ca
XL
9#[cfg(test)]
10mod tests;
11
3dfed10e 12pub const ASAN_SUPPORTED_TARGETS: &[&str] = &[
5869c6ff 13 "aarch64-apple-darwin",
9ffffee4
FG
14 "aarch64-apple-ios",
15 "aarch64-apple-ios-sim",
9c376795 16 "aarch64-unknown-fuchsia",
2b03887a 17 "aarch64-linux-android",
f035d41b 18 "aarch64-unknown-linux-gnu",
2b03887a
FG
19 "arm-linux-androideabi",
20 "armv7-linux-androideabi",
21 "i686-linux-android",
22 "i686-unknown-linux-gnu",
f035d41b 23 "x86_64-apple-darwin",
9ffffee4 24 "x86_64-apple-ios",
9c376795 25 "x86_64-unknown-fuchsia",
2b03887a 26 "x86_64-linux-android",
3dfed10e 27 "x86_64-unknown-freebsd",
f035d41b 28 "x86_64-unknown-linux-gnu",
9ffffee4 29 "s390x-unknown-linux-gnu",
f035d41b
XL
30];
31
064997fb
FG
32// FIXME(rcvalle): More targets are likely supported.
33pub const CFI_SUPPORTED_TARGETS: &[&str] = &[
34 "aarch64-apple-darwin",
9c376795 35 "aarch64-unknown-fuchsia",
064997fb
FG
36 "aarch64-linux-android",
37 "aarch64-unknown-freebsd",
38 "aarch64-unknown-linux-gnu",
39 "x86_64-apple-darwin",
9c376795 40 "x86_64-unknown-fuchsia",
064997fb
FG
41 "x86_64-pc-solaris",
42 "x86_64-unknown-freebsd",
43 "x86_64-unknown-illumos",
44 "x86_64-unknown-linux-gnu",
45 "x86_64-unknown-linux-musl",
46 "x86_64-unknown-netbsd",
47];
48
9c376795
FG
49pub const KCFI_SUPPORTED_TARGETS: &[&str] = &["aarch64-linux-none", "x86_64-linux-none"];
50
9ffffee4
FG
51pub const KASAN_SUPPORTED_TARGETS: &[&str] = &[
52 "aarch64-unknown-none",
53 "riscv64gc-unknown-none-elf",
54 "riscv64imac-unknown-none-elf",
55 "x86_64-unknown-none",
56];
57
5869c6ff 58pub const LSAN_SUPPORTED_TARGETS: &[&str] = &[
c295e0f8
XL
59 // FIXME: currently broken, see #88132
60 // "aarch64-apple-darwin",
5869c6ff
XL
61 "aarch64-unknown-linux-gnu",
62 "x86_64-apple-darwin",
63 "x86_64-unknown-linux-gnu",
9ffffee4 64 "s390x-unknown-linux-gnu",
5869c6ff 65];
f035d41b 66
9ffffee4
FG
67pub const MSAN_SUPPORTED_TARGETS: &[&str] = &[
68 "aarch64-unknown-linux-gnu",
69 "x86_64-unknown-freebsd",
70 "x86_64-unknown-linux-gnu",
71 "s390x-unknown-linux-gnu",
72];
f035d41b 73
3dfed10e 74pub const TSAN_SUPPORTED_TARGETS: &[&str] = &[
5869c6ff 75 "aarch64-apple-darwin",
9ffffee4
FG
76 "aarch64-apple-ios",
77 "aarch64-apple-ios-sim",
3dfed10e
XL
78 "aarch64-unknown-linux-gnu",
79 "x86_64-apple-darwin",
9ffffee4 80 "x86_64-apple-ios",
3dfed10e
XL
81 "x86_64-unknown-freebsd",
82 "x86_64-unknown-linux-gnu",
9ffffee4 83 "s390x-unknown-linux-gnu",
3dfed10e
XL
84];
85
6a06907d
XL
86pub const HWASAN_SUPPORTED_TARGETS: &[&str] =
87 &["aarch64-linux-android", "aarch64-unknown-linux-gnu"];
88
5099ac24
FG
89pub const MEMTAG_SUPPORTED_TARGETS: &[&str] =
90 &["aarch64-linux-android", "aarch64-unknown-linux-gnu"];
91
064997fb
FG
92pub const SHADOWCALLSTACK_SUPPORTED_TARGETS: &[&str] = &["aarch64-linux-android"];
93
9ffffee4
FG
94pub const XRAY_SUPPORTED_TARGETS: &[&str] = &[
95 "aarch64-linux-android",
96 "aarch64-unknown-linux-gnu",
97 "aarch64-unknown-linux-musl",
98 "x86_64-linux-android",
99 "x86_64-unknown-freebsd",
100 "x86_64-unknown-linux-gnu",
101 "x86_64-unknown-linux-musl",
102 "x86_64-unknown-netbsd",
103 "x86_64-unknown-none-linuxkernel",
104 "x86_64-unknown-openbsd",
105];
106
1a4d82fc 107pub fn make_new_path(path: &str) -> String {
c34b1796 108 assert!(cfg!(windows));
223e47cc
LB
109 // Windows just uses PATH as the library search path, so we have to
110 // maintain the current value while adding our own
85aaf69f 111 match env::var(lib_path_env_var()) {
5bcae85e
SL
112 Ok(curr) => format!("{}{}{}", path, path_div(), curr),
113 Err(..) => path.to_owned(),
223e47cc
LB
114 }
115}
116
5bcae85e
SL
117pub fn lib_path_env_var() -> &'static str {
118 "PATH"
119}
120fn path_div() -> &'static str {
121 ";"
122}
223e47cc 123
1a4d82fc
JJ
124pub fn logv(config: &Config, s: String) {
125 debug!("{}", s);
5bcae85e
SL
126 if config.verbose {
127 println!("{}", s);
128 }
223e47cc 129}
94b46f34
XL
130
131pub trait PathBufExt {
132 /// Append an extension to the path, even if it already has one.
133 fn with_extra_extension<S: AsRef<OsStr>>(&self, extension: S) -> PathBuf;
134}
135
136impl PathBufExt for PathBuf {
137 fn with_extra_extension<S: AsRef<OsStr>>(&self, extension: S) -> PathBuf {
3dfed10e 138 if extension.as_ref().is_empty() {
94b46f34
XL
139 self.clone()
140 } else {
141 let mut fname = self.file_name().unwrap().to_os_string();
3dfed10e 142 if !extension.as_ref().to_str().unwrap().starts_with('.') {
94b46f34
XL
143 fname.push(".");
144 }
145 fname.push(extension);
146 self.with_file_name(fname)
147 }
148 }
149}
487cf647
FG
150
151/// The name of the environment variable that holds dynamic library locations.
152pub fn dylib_env_var() -> &'static str {
153 if cfg!(windows) {
154 "PATH"
155 } else if cfg!(target_os = "macos") {
156 "DYLD_LIBRARY_PATH"
157 } else if cfg!(target_os = "haiku") {
158 "LIBRARY_PATH"
159 } else {
160 "LD_LIBRARY_PATH"
161 }
162}
163
164/// Adds a list of lookup paths to `cmd`'s dynamic library lookup path.
165/// If the dylib_path_var is already set for this cmd, the old value will be overwritten!
166pub fn add_dylib_path(cmd: &mut Command, paths: impl Iterator<Item = impl Into<PathBuf>>) {
167 let path_env = env::var_os(dylib_env_var());
168 let old_paths = path_env.as_ref().map(env::split_paths);
169 let new_paths = paths.map(Into::into).chain(old_paths.into_iter().flatten());
170 cmd.env(dylib_env_var(), env::join_paths(new_paths).unwrap());
171}