1 use crate::common::Config;
4 use std::path::PathBuf;
11 pub const ASAN_SUPPORTED_TARGETS: &[&str] = &[
12 "aarch64-apple-darwin",
14 "aarch64-linux-android",
15 "aarch64-unknown-linux-gnu",
16 "arm-linux-androideabi",
17 "armv7-linux-androideabi",
19 "i686-unknown-linux-gnu",
20 "x86_64-apple-darwin",
22 "x86_64-linux-android",
23 "x86_64-unknown-freebsd",
24 "x86_64-unknown-linux-gnu",
27 // FIXME(rcvalle): More targets are likely supported.
28 pub const CFI_SUPPORTED_TARGETS: &[&str] = &[
29 "aarch64-apple-darwin",
31 "aarch64-linux-android",
32 "aarch64-unknown-freebsd",
33 "aarch64-unknown-linux-gnu",
34 "x86_64-apple-darwin",
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",
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",
52 pub const MSAN_SUPPORTED_TARGETS: &[&str] =
53 &["aarch64-unknown-linux-gnu", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"];
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",
63 pub const HWASAN_SUPPORTED_TARGETS: &[&str] =
64 &["aarch64-linux-android", "aarch64-unknown-linux-gnu"];
66 pub const MEMTAG_SUPPORTED_TARGETS: &[&str] =
67 &["aarch64-linux-android", "aarch64-unknown-linux-gnu"];
69 pub const SHADOWCALLSTACK_SUPPORTED_TARGETS: &[&str] = &["aarch64-linux-android"];
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(),
81 pub fn lib_path_env_var() -> &'static str {
84 fn path_div() -> &'static str {
88 pub fn logv(config: &Config, s: String) {
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;
100 impl PathBufExt for PathBuf {
101 fn with_extra_extension<S: AsRef<OsStr>>(&self, extension: S) -> PathBuf {
102 if extension.as_ref().is_empty() {
105 let mut fname = self.file_name().unwrap().to_os_string();
106 if !extension.as_ref().to_str().unwrap().starts_with('.') {
109 fname.push(extension);
110 self.with_file_name(fname)