]> git.lizzy.rs Git - rust.git/blob - src/tools/compiletest/src/util.rs
Rollup merge of #101428 - JakobDegen:build-tests, r=oli-obk
[rust.git] / src / tools / compiletest / src / util.rs
1 use crate::common::Config;
2 use std::env;
3 use std::ffi::OsStr;
4 use std::path::PathBuf;
5
6 use tracing::*;
7
8 #[cfg(test)]
9 mod tests;
10
11 pub const ASAN_SUPPORTED_TARGETS: &[&str] = &[
12     "aarch64-apple-darwin",
13     "aarch64-fuchsia",
14     "aarch64-linux-android",
15     "aarch64-unknown-linux-gnu",
16     "arm-linux-androideabi",
17     "armv7-linux-androideabi",
18     "i686-linux-android",
19     "i686-unknown-linux-gnu",
20     "x86_64-apple-darwin",
21     "x86_64-fuchsia",
22     "x86_64-linux-android",
23     "x86_64-unknown-freebsd",
24     "x86_64-unknown-linux-gnu",
25 ];
26
27 // FIXME(rcvalle): More targets are likely supported.
28 pub const CFI_SUPPORTED_TARGETS: &[&str] = &[
29     "aarch64-apple-darwin",
30     "aarch64-fuchsia",
31     "aarch64-linux-android",
32     "aarch64-unknown-freebsd",
33     "aarch64-unknown-linux-gnu",
34     "x86_64-apple-darwin",
35     "x86_64-fuchsia",
36     "x86_64-pc-solaris",
37     "x86_64-unknown-freebsd",
38     "x86_64-unknown-illumos",
39     "x86_64-unknown-linux-gnu",
40     "x86_64-unknown-linux-musl",
41     "x86_64-unknown-netbsd",
42 ];
43
44 pub const LSAN_SUPPORTED_TARGETS: &[&str] = &[
45     // FIXME: currently broken, see #88132
46     // "aarch64-apple-darwin",
47     "aarch64-unknown-linux-gnu",
48     "x86_64-apple-darwin",
49     "x86_64-unknown-linux-gnu",
50 ];
51
52 pub const MSAN_SUPPORTED_TARGETS: &[&str] =
53     &["aarch64-unknown-linux-gnu", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"];
54
55 pub const TSAN_SUPPORTED_TARGETS: &[&str] = &[
56     "aarch64-apple-darwin",
57     "aarch64-unknown-linux-gnu",
58     "x86_64-apple-darwin",
59     "x86_64-unknown-freebsd",
60     "x86_64-unknown-linux-gnu",
61 ];
62
63 pub const HWASAN_SUPPORTED_TARGETS: &[&str] =
64     &["aarch64-linux-android", "aarch64-unknown-linux-gnu"];
65
66 pub const MEMTAG_SUPPORTED_TARGETS: &[&str] =
67     &["aarch64-linux-android", "aarch64-unknown-linux-gnu"];
68
69 pub const SHADOWCALLSTACK_SUPPORTED_TARGETS: &[&str] = &["aarch64-linux-android"];
70
71 pub fn make_new_path(path: &str) -> String {
72     assert!(cfg!(windows));
73     // Windows just uses PATH as the library search path, so we have to
74     // maintain the current value while adding our own
75     match env::var(lib_path_env_var()) {
76         Ok(curr) => format!("{}{}{}", path, path_div(), curr),
77         Err(..) => path.to_owned(),
78     }
79 }
80
81 pub fn lib_path_env_var() -> &'static str {
82     "PATH"
83 }
84 fn path_div() -> &'static str {
85     ";"
86 }
87
88 pub fn logv(config: &Config, s: String) {
89     debug!("{}", s);
90     if config.verbose {
91         println!("{}", s);
92     }
93 }
94
95 pub trait PathBufExt {
96     /// Append an extension to the path, even if it already has one.
97     fn with_extra_extension<S: AsRef<OsStr>>(&self, extension: S) -> PathBuf;
98 }
99
100 impl PathBufExt for PathBuf {
101     fn with_extra_extension<S: AsRef<OsStr>>(&self, extension: S) -> PathBuf {
102         if extension.as_ref().is_empty() {
103             self.clone()
104         } else {
105             let mut fname = self.file_name().unwrap().to_os_string();
106             if !extension.as_ref().to_str().unwrap().starts_with('.') {
107                 fname.push(".");
108             }
109             fname.push(extension);
110             self.with_file_name(fname)
111         }
112     }
113 }