1fn is_second_coordinate(x: &str) -> bool {
4 matches!(x, "linux" | "darwin" | "netbsd" | "openbsd" | "freebsd")
5}
6
7pub fn llvm_triple_to_nix_double(llvm_triple: &str) -> String {
12 let parts: Vec<&str> = llvm_triple.split('-').collect();
13 let cpu = match parts[0] {
14 "armv6" => "armv6l", "armv7" => "armv7l", x => match x.as_bytes() {
17 [b'i', _, b'8', b'6'] => "i686", _ => x,
19 },
20 };
21 let os = match parts[1..] {
22 [_vendor, kernel, _environment] if is_second_coordinate(kernel) => kernel,
23 [_vendor, kernel] if is_second_coordinate(kernel) => kernel,
24 [kernel, _environment] if is_second_coordinate(kernel) => kernel,
25
26 ["unknown", "unknown"] if cpu == "wasm32" => "none",
35
36 _ => panic!("unrecognized triple {llvm_triple}"),
37 };
38 format!("{cpu}-{os}")
39}
40
41#[cfg(test)]
42mod tests {
43 use super::*;
44 #[test]
45 fn test_systems() {
46 assert_eq!(
47 llvm_triple_to_nix_double("aarch64-unknown-linux-gnu"),
48 "aarch64-linux"
49 );
50 assert_eq!(
51 llvm_triple_to_nix_double("i686-unknown-linux-gnu"),
52 "i686-linux"
53 );
54 assert_eq!(
55 llvm_triple_to_nix_double("x86_64-apple-darwin"),
56 "x86_64-darwin"
57 );
58 assert_eq!(
59 llvm_triple_to_nix_double("x86_64-unknown-linux-gnu"),
60 "x86_64-linux"
61 );
62 assert_eq!(
63 llvm_triple_to_nix_double("aarch64-apple-darwin"),
64 "aarch64-darwin"
65 );
66 assert_eq!(
67 llvm_triple_to_nix_double("aarch64-unknown-linux-musl"),
68 "aarch64-linux"
69 );
70 assert_eq!(
71 llvm_triple_to_nix_double("arm-unknown-linux-gnueabi"),
72 "arm-linux"
73 );
74 assert_eq!(
75 llvm_triple_to_nix_double("arm-unknown-linux-gnueabihf"),
76 "arm-linux"
77 );
78 assert_eq!(
79 llvm_triple_to_nix_double("armv7-unknown-linux-gnueabihf"),
80 "armv7l-linux"
81 );
82 assert_eq!(
83 llvm_triple_to_nix_double("mips-unknown-linux-gnu"),
84 "mips-linux"
85 );
86 assert_eq!(
87 llvm_triple_to_nix_double("mips64-unknown-linux-gnuabi64"),
88 "mips64-linux"
89 );
90 assert_eq!(
91 llvm_triple_to_nix_double("mips64-unknown-linux-gnuabin32"),
92 "mips64-linux"
93 );
94 assert_eq!(
95 llvm_triple_to_nix_double("mips64el-unknown-linux-gnuabi64"),
96 "mips64el-linux"
97 );
98 assert_eq!(
99 llvm_triple_to_nix_double("mips64el-unknown-linux-gnuabin32"),
100 "mips64el-linux"
101 );
102 assert_eq!(
103 llvm_triple_to_nix_double("mipsel-unknown-linux-gnu"),
104 "mipsel-linux"
105 );
106 assert_eq!(
107 llvm_triple_to_nix_double("powerpc-unknown-linux-gnu"),
108 "powerpc-linux"
109 );
110 assert_eq!(
111 llvm_triple_to_nix_double("powerpc64-unknown-linux-gnu"),
112 "powerpc64-linux"
113 );
114 assert_eq!(
115 llvm_triple_to_nix_double("powerpc64le-unknown-linux-gnu"),
116 "powerpc64le-linux"
117 );
118 assert_eq!(
119 llvm_triple_to_nix_double("s390x-unknown-linux-gnu"),
120 "s390x-linux"
121 );
122 assert_eq!(
123 llvm_triple_to_nix_double("x86_64-unknown-linux-musl"),
124 "x86_64-linux"
125 );
126 assert_eq!(
127 llvm_triple_to_nix_double("x86_64-unknown-netbsd"),
128 "x86_64-netbsd"
129 );
130 assert_eq!(
131 llvm_triple_to_nix_double("aarch64-linux-android"),
132 "aarch64-linux"
133 );
134 assert_eq!(
135 llvm_triple_to_nix_double("arm-linux-androideabi"),
136 "arm-linux"
137 );
138 assert_eq!(
139 llvm_triple_to_nix_double("arm-unknown-linux-musleabi"),
140 "arm-linux"
141 );
142 assert_eq!(
143 llvm_triple_to_nix_double("arm-unknown-linux-musleabihf"),
144 "arm-linux"
145 );
146 assert_eq!(
147 llvm_triple_to_nix_double("armv5te-unknown-linux-gnueabi"),
148 "armv5te-linux"
149 );
150 assert_eq!(
151 llvm_triple_to_nix_double("armv5te-unknown-linux-musleabi"),
152 "armv5te-linux"
153 );
154 assert_eq!(
155 llvm_triple_to_nix_double("armv7-linux-androideabi"),
156 "armv7l-linux"
157 );
158 assert_eq!(
159 llvm_triple_to_nix_double("armv7-unknown-linux-gnueabi"),
160 "armv7l-linux"
161 );
162 assert_eq!(
163 llvm_triple_to_nix_double("armv7-unknown-linux-musleabi"),
164 "armv7l-linux"
165 );
166 assert_eq!(
167 llvm_triple_to_nix_double("armv7-unknown-linux-musleabihf"),
168 "armv7l-linux"
169 );
170 assert_eq!(
171 llvm_triple_to_nix_double("i586-unknown-linux-gnu"),
172 "i686-linux"
173 );
174 assert_eq!(
175 llvm_triple_to_nix_double("i586-unknown-linux-musl"),
176 "i686-linux"
177 );
178 assert_eq!(
179 llvm_triple_to_nix_double("i686-linux-android"),
180 "i686-linux"
181 );
182 assert_eq!(
183 llvm_triple_to_nix_double("i686-unknown-linux-musl"),
184 "i686-linux"
185 );
186 assert_eq!(
187 llvm_triple_to_nix_double("mips-unknown-linux-musl"),
188 "mips-linux"
189 );
190 assert_eq!(
191 llvm_triple_to_nix_double("mips64-unknown-linux-muslabi64"),
192 "mips64-linux"
193 );
194 assert_eq!(
195 llvm_triple_to_nix_double("mips64el-unknown-linux-muslabi64"),
196 "mips64el-linux"
197 );
198 assert_eq!(
199 llvm_triple_to_nix_double("mipsel-unknown-linux-musl"),
200 "mipsel-linux"
201 );
202 assert_eq!(
203 llvm_triple_to_nix_double("sparc64-unknown-linux-gnu"),
204 "sparc64-linux"
205 );
206 assert_eq!(
207 llvm_triple_to_nix_double("thumbv7neon-linux-androideabi"),
208 "thumbv7neon-linux"
209 );
210 assert_eq!(
211 llvm_triple_to_nix_double("thumbv7neon-unknown-linux-gnueabihf"),
212 "thumbv7neon-linux"
213 );
214 assert_eq!(
215 llvm_triple_to_nix_double("x86_64-linux-android"),
216 "x86_64-linux"
217 );
218 assert_eq!(
219 llvm_triple_to_nix_double("x86_64-unknown-linux-gnux32"),
220 "x86_64-linux"
221 );
222 assert_eq!(
223 llvm_triple_to_nix_double("aarch64-unknown-linux-gnu_ilp32"),
224 "aarch64-linux"
225 );
226 assert_eq!(
227 llvm_triple_to_nix_double("aarch64-unknown-netbsd"),
228 "aarch64-netbsd"
229 );
230 assert_eq!(
231 llvm_triple_to_nix_double("aarch64_be-unknown-linux-gnu_ilp32"),
232 "aarch64_be-linux"
233 );
234 assert_eq!(
235 llvm_triple_to_nix_double("aarch64_be-unknown-linux-gnu"),
236 "aarch64_be-linux"
237 );
238 assert_eq!(
239 llvm_triple_to_nix_double("armeb-unknown-linux-gnueabi"),
240 "armeb-linux"
241 );
242 assert_eq!(
243 llvm_triple_to_nix_double("armv4t-unknown-linux-gnueabi"),
244 "armv4t-linux"
245 );
246 assert_eq!(
247 llvm_triple_to_nix_double("armv6-unknown-netbsd-eabihf"),
248 "armv6l-netbsd"
249 );
250 assert_eq!(
251 llvm_triple_to_nix_double("armv7-unknown-linux-uclibceabi"),
252 "armv7l-linux"
253 );
254 assert_eq!(
255 llvm_triple_to_nix_double("armv7-unknown-linux-uclibceabihf"),
256 "armv7l-linux"
257 );
258 assert_eq!(
259 llvm_triple_to_nix_double("armv7-unknown-netbsd-eabihf"),
260 "armv7l-netbsd"
261 );
262 assert_eq!(
263 llvm_triple_to_nix_double("hexagon-unknown-linux-musl"),
264 "hexagon-linux"
265 );
266 assert_eq!(
267 llvm_triple_to_nix_double("i686-unknown-netbsd"),
268 "i686-netbsd"
269 );
270 assert_eq!(
271 llvm_triple_to_nix_double("m68k-unknown-linux-gnu"),
272 "m68k-linux"
273 );
274 assert_eq!(
275 llvm_triple_to_nix_double("mips-unknown-linux-uclibc"),
276 "mips-linux"
277 );
278 assert_eq!(
279 llvm_triple_to_nix_double("mips64-openwrt-linux-musl"),
280 "mips64-linux"
281 );
282 assert_eq!(
283 llvm_triple_to_nix_double("mipsel-unknown-linux-uclibc"),
284 "mipsel-linux"
285 );
286 assert_eq!(
287 llvm_triple_to_nix_double("mipsisa32r6-unknown-linux-gnu"),
288 "mipsisa32r6-linux"
289 );
290 assert_eq!(
291 llvm_triple_to_nix_double("mipsisa32r6el-unknown-linux-gnu"),
292 "mipsisa32r6el-linux"
293 );
294 assert_eq!(
295 llvm_triple_to_nix_double("mipsisa64r6-unknown-linux-gnuabi64"),
296 "mipsisa64r6-linux"
297 );
298 assert_eq!(
299 llvm_triple_to_nix_double("mipsisa64r6el-unknown-linux-gnuabi64"),
300 "mipsisa64r6el-linux"
301 );
302 assert_eq!(
303 llvm_triple_to_nix_double("powerpc-unknown-linux-gnuspe"),
304 "powerpc-linux"
305 );
306 assert_eq!(
307 llvm_triple_to_nix_double("powerpc-unknown-linux-musl"),
308 "powerpc-linux"
309 );
310 assert_eq!(
311 llvm_triple_to_nix_double("powerpc-unknown-netbsd"),
312 "powerpc-netbsd"
313 );
314 assert_eq!(
315 llvm_triple_to_nix_double("powerpc64-unknown-linux-musl"),
316 "powerpc64-linux"
317 );
318 assert_eq!(
319 llvm_triple_to_nix_double("powerpc64le-unknown-linux-musl"),
320 "powerpc64le-linux"
321 );
322 assert_eq!(
323 llvm_triple_to_nix_double("riscv32gc-unknown-linux-gnu"),
324 "riscv32gc-linux"
325 );
326 assert_eq!(
327 llvm_triple_to_nix_double("riscv32gc-unknown-linux-musl"),
328 "riscv32gc-linux"
329 );
330 assert_eq!(
331 llvm_triple_to_nix_double("riscv64gc-unknown-linux-musl"),
332 "riscv64gc-linux"
333 );
334 assert_eq!(
335 llvm_triple_to_nix_double("s390x-unknown-linux-musl"),
336 "s390x-linux"
337 );
338 assert_eq!(
339 llvm_triple_to_nix_double("sparc-unknown-linux-gnu"),
340 "sparc-linux"
341 );
342 assert_eq!(
343 llvm_triple_to_nix_double("sparc64-unknown-netbsd"),
344 "sparc64-netbsd"
345 );
346 assert_eq!(
347 llvm_triple_to_nix_double("thumbv7neon-unknown-linux-musleabihf"),
348 "thumbv7neon-linux"
349 );
350 }
351}