]>
Commit | Line | Data |
---|---|---|
dfeec247 | 1 | use crate::common::Config; |
85aaf69f | 2 | use std::env; |
dfeec247 | 3 | use std::ffi::OsStr; |
94b46f34 | 4 | use std::path::PathBuf; |
487cf647 | 5 | use std::process::Command; |
1a4d82fc | 6 | |
3dfed10e | 7 | use tracing::*; |
48663c56 | 8 | |
416331ca XL |
9 | #[cfg(test)] |
10 | mod tests; | |
11 | ||
3dfed10e | 12 | pub 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. |
33 | pub 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 |
49 | pub const KCFI_SUPPORTED_TARGETS: &[&str] = &["aarch64-linux-none", "x86_64-linux-none"]; |
50 | ||
9ffffee4 FG |
51 | pub 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 | 58 | pub 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 |
67 | pub 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 | 74 | pub 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 |
86 | pub const HWASAN_SUPPORTED_TARGETS: &[&str] = |
87 | &["aarch64-linux-android", "aarch64-unknown-linux-gnu"]; | |
88 | ||
5099ac24 FG |
89 | pub const MEMTAG_SUPPORTED_TARGETS: &[&str] = |
90 | &["aarch64-linux-android", "aarch64-unknown-linux-gnu"]; | |
91 | ||
064997fb FG |
92 | pub const SHADOWCALLSTACK_SUPPORTED_TARGETS: &[&str] = &["aarch64-linux-android"]; |
93 | ||
9ffffee4 FG |
94 | pub 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 | 107 | pub 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 |
117 | pub fn lib_path_env_var() -> &'static str { |
118 | "PATH" | |
119 | } | |
120 | fn path_div() -> &'static str { | |
121 | ";" | |
122 | } | |
223e47cc | 123 | |
1a4d82fc JJ |
124 | pub fn logv(config: &Config, s: String) { |
125 | debug!("{}", s); | |
5bcae85e SL |
126 | if config.verbose { |
127 | println!("{}", s); | |
128 | } | |
223e47cc | 129 | } |
94b46f34 XL |
130 | |
131 | pub 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 | ||
136 | impl 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. | |
152 | pub 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! | |
166 | pub 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 | } |