1use tracing::debug;
2
3use uv_pep508::MarkerEnvironment;
4use uv_platform_tags::{Arch, Os, Platform};
5use uv_static::EnvVars;
6
7#[derive(Debug, Clone, Copy, Eq, PartialEq, serde::Deserialize)]
12#[serde(deny_unknown_fields, rename_all = "kebab-case")]
13#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
14#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
15pub enum TargetTriple {
16 Windows,
18
19 Linux,
21
22 Macos,
24
25 #[cfg_attr(feature = "clap", value(name = "x86_64-pc-windows-msvc"))]
27 #[serde(rename = "x86_64-pc-windows-msvc")]
28 #[serde(alias = "x8664-pc-windows-msvc")]
29 X8664PcWindowsMsvc,
30
31 #[cfg_attr(feature = "clap", value(name = "aarch64-pc-windows-msvc"))]
33 #[serde(rename = "aarch64-pc-windows-msvc")]
34 #[serde(alias = "arm64-pc-windows-msvc")]
35 Aarch64PcWindowsMsvc,
36
37 #[cfg_attr(feature = "clap", value(name = "i686-pc-windows-msvc"))]
39 #[serde(rename = "i686-pc-windows-msvc")]
40 I686PcWindowsMsvc,
41
42 #[cfg_attr(feature = "clap", value(name = "x86_64-unknown-linux-gnu"))]
44 #[serde(rename = "x86_64-unknown-linux-gnu")]
45 #[serde(alias = "x8664-unknown-linux-gnu")]
46 X8664UnknownLinuxGnu,
47
48 #[cfg_attr(feature = "clap", value(name = "aarch64-apple-darwin"))]
53 #[serde(rename = "aarch64-apple-darwin")]
54 Aarch64AppleDarwin,
55
56 #[cfg_attr(feature = "clap", value(name = "x86_64-apple-darwin"))]
61 #[serde(rename = "x86_64-apple-darwin")]
62 #[serde(alias = "x8664-apple-darwin")]
63 X8664AppleDarwin,
64
65 #[cfg_attr(feature = "clap", value(name = "aarch64-unknown-linux-gnu"))]
67 #[serde(rename = "aarch64-unknown-linux-gnu")]
68 Aarch64UnknownLinuxGnu,
69
70 #[cfg_attr(feature = "clap", value(name = "aarch64-unknown-linux-musl"))]
72 #[serde(rename = "aarch64-unknown-linux-musl")]
73 Aarch64UnknownLinuxMusl,
74
75 #[cfg_attr(feature = "clap", value(name = "x86_64-unknown-linux-musl"))]
77 #[serde(rename = "x86_64-unknown-linux-musl")]
78 #[serde(alias = "x8664-unknown-linux-musl")]
79 X8664UnknownLinuxMusl,
80
81 #[cfg_attr(feature = "clap", value(name = "riscv64-unknown-linux"))]
83 #[serde(rename = "riscv64-unknown-linux")]
84 Riscv64UnknownLinuxGnu,
85
86 #[cfg_attr(feature = "clap", value(name = "x86_64-manylinux2014"))]
88 #[serde(rename = "x86_64-manylinux2014")]
89 #[serde(alias = "x8664-manylinux2014")]
90 X8664Manylinux2014,
91
92 #[cfg_attr(feature = "clap", value(name = "x86_64-manylinux_2_17"))]
94 #[serde(rename = "x86_64-manylinux_2_17")]
95 #[serde(alias = "x8664-manylinux217")]
96 X8664Manylinux217,
97
98 #[cfg_attr(feature = "clap", value(name = "x86_64-manylinux_2_28"))]
100 #[serde(rename = "x86_64-manylinux_2_28")]
101 #[serde(alias = "x8664-manylinux228")]
102 X8664Manylinux228,
103
104 #[cfg_attr(feature = "clap", value(name = "x86_64-manylinux_2_31"))]
106 #[serde(rename = "x86_64-manylinux_2_31")]
107 #[serde(alias = "x8664-manylinux231")]
108 X8664Manylinux231,
109
110 #[cfg_attr(feature = "clap", value(name = "x86_64-manylinux_2_32"))]
112 #[serde(rename = "x86_64-manylinux_2_32")]
113 #[serde(alias = "x8664-manylinux232")]
114 X8664Manylinux232,
115
116 #[cfg_attr(feature = "clap", value(name = "x86_64-manylinux_2_33"))]
118 #[serde(rename = "x86_64-manylinux_2_33")]
119 #[serde(alias = "x8664-manylinux233")]
120 X8664Manylinux233,
121
122 #[cfg_attr(feature = "clap", value(name = "x86_64-manylinux_2_34"))]
124 #[serde(rename = "x86_64-manylinux_2_34")]
125 #[serde(alias = "x8664-manylinux234")]
126 X8664Manylinux234,
127
128 #[cfg_attr(feature = "clap", value(name = "x86_64-manylinux_2_35"))]
130 #[serde(rename = "x86_64-manylinux_2_35")]
131 #[serde(alias = "x8664-manylinux235")]
132 X8664Manylinux235,
133
134 #[cfg_attr(feature = "clap", value(name = "x86_64-manylinux_2_36"))]
136 #[serde(rename = "x86_64-manylinux_2_36")]
137 #[serde(alias = "x8664-manylinux236")]
138 X8664Manylinux236,
139
140 #[cfg_attr(feature = "clap", value(name = "x86_64-manylinux_2_37"))]
142 #[serde(rename = "x86_64-manylinux_2_37")]
143 #[serde(alias = "x8664-manylinux237")]
144 X8664Manylinux237,
145
146 #[cfg_attr(feature = "clap", value(name = "x86_64-manylinux_2_38"))]
148 #[serde(rename = "x86_64-manylinux_2_38")]
149 #[serde(alias = "x8664-manylinux238")]
150 X8664Manylinux238,
151
152 #[cfg_attr(feature = "clap", value(name = "x86_64-manylinux_2_39"))]
154 #[serde(rename = "x86_64-manylinux_2_39")]
155 #[serde(alias = "x8664-manylinux239")]
156 X8664Manylinux239,
157
158 #[cfg_attr(feature = "clap", value(name = "x86_64-manylinux_2_40"))]
160 #[serde(rename = "x86_64-manylinux_2_40")]
161 #[serde(alias = "x8664-manylinux240")]
162 X8664Manylinux240,
163
164 #[cfg_attr(feature = "clap", value(name = "aarch64-manylinux2014"))]
166 #[serde(rename = "aarch64-manylinux2014")]
167 Aarch64Manylinux2014,
168
169 #[cfg_attr(feature = "clap", value(name = "aarch64-manylinux_2_17"))]
171 #[serde(rename = "aarch64-manylinux_2_17")]
172 #[serde(alias = "aarch64-manylinux217")]
173 Aarch64Manylinux217,
174
175 #[cfg_attr(feature = "clap", value(name = "aarch64-manylinux_2_28"))]
177 #[serde(rename = "aarch64-manylinux_2_28")]
178 #[serde(alias = "aarch64-manylinux228")]
179 Aarch64Manylinux228,
180
181 #[cfg_attr(feature = "clap", value(name = "aarch64-manylinux_2_31"))]
183 #[serde(rename = "aarch64-manylinux_2_31")]
184 #[serde(alias = "aarch64-manylinux231")]
185 Aarch64Manylinux231,
186
187 #[cfg_attr(feature = "clap", value(name = "aarch64-manylinux_2_32"))]
189 #[serde(rename = "aarch64-manylinux_2_32")]
190 #[serde(alias = "aarch64-manylinux232")]
191 Aarch64Manylinux232,
192
193 #[cfg_attr(feature = "clap", value(name = "aarch64-manylinux_2_33"))]
195 #[serde(rename = "aarch64-manylinux_2_33")]
196 #[serde(alias = "aarch64-manylinux233")]
197 Aarch64Manylinux233,
198
199 #[cfg_attr(feature = "clap", value(name = "aarch64-manylinux_2_34"))]
201 #[serde(rename = "aarch64-manylinux_2_34")]
202 #[serde(alias = "aarch64-manylinux234")]
203 Aarch64Manylinux234,
204
205 #[cfg_attr(feature = "clap", value(name = "aarch64-manylinux_2_35"))]
207 #[serde(rename = "aarch64-manylinux_2_35")]
208 #[serde(alias = "aarch64-manylinux235")]
209 Aarch64Manylinux235,
210
211 #[cfg_attr(feature = "clap", value(name = "aarch64-manylinux_2_36"))]
213 #[serde(rename = "aarch64-manylinux_2_36")]
214 #[serde(alias = "aarch64-manylinux236")]
215 Aarch64Manylinux236,
216
217 #[cfg_attr(feature = "clap", value(name = "aarch64-manylinux_2_37"))]
219 #[serde(rename = "aarch64-manylinux_2_37")]
220 #[serde(alias = "aarch64-manylinux237")]
221 Aarch64Manylinux237,
222
223 #[cfg_attr(feature = "clap", value(name = "aarch64-manylinux_2_38"))]
225 #[serde(rename = "aarch64-manylinux_2_38")]
226 #[serde(alias = "aarch64-manylinux238")]
227 Aarch64Manylinux238,
228
229 #[cfg_attr(feature = "clap", value(name = "aarch64-manylinux_2_39"))]
231 #[serde(rename = "aarch64-manylinux_2_39")]
232 #[serde(alias = "aarch64-manylinux239")]
233 Aarch64Manylinux239,
234
235 #[cfg_attr(feature = "clap", value(name = "aarch64-manylinux_2_40"))]
237 #[serde(rename = "aarch64-manylinux_2_40")]
238 #[serde(alias = "aarch64-manylinux240")]
239 Aarch64Manylinux240,
240
241 #[cfg_attr(feature = "clap", value(name = "aarch64-linux-android"))]
246 #[serde(rename = "aarch64-linux-android")]
247 Aarch64LinuxAndroid,
248
249 #[cfg_attr(feature = "clap", value(name = "x86_64-linux-android"))]
254 #[serde(rename = "x86_64-linux-android")]
255 X8664LinuxAndroid,
256
257 #[cfg_attr(feature = "clap", value(name = "wasm32-pyodide2024"))]
259 Wasm32Pyodide2024,
260
261 #[cfg_attr(feature = "clap", value(name = "arm64-apple-ios"))]
266 #[serde(rename = "arm64-apple-ios")]
267 Arm64Ios,
268
269 #[cfg_attr(feature = "clap", value(name = "arm64-apple-ios-simulator"))]
274 #[serde(rename = "arm64-apple-ios-simulator")]
275 Arm64IosSimulator,
276
277 #[cfg_attr(feature = "clap", value(name = "x86_64-apple-ios-simulator"))]
282 #[serde(rename = "x86_64-apple-ios-simulator")]
283 X8664IosSimulator,
284}
285
286impl TargetTriple {
287 pub fn platform(self) -> Platform {
289 match self {
290 Self::Windows | Self::X8664PcWindowsMsvc => Platform::new(Os::Windows, Arch::X86_64),
291 Self::Aarch64PcWindowsMsvc => Platform::new(Os::Windows, Arch::Aarch64),
292 Self::Linux | Self::X8664UnknownLinuxGnu => Platform::new(
293 Os::Manylinux {
294 major: 2,
295 minor: 28,
296 },
297 Arch::X86_64,
298 ),
299 Self::Macos | Self::Aarch64AppleDarwin => {
300 let (major, minor) = macos_deployment_target().map_or((13, 0), |(major, minor)| {
301 debug!("Found macOS deployment target: {}.{}", major, minor);
302 (major, minor)
303 });
304 Platform::new(Os::Macos { major, minor }, Arch::Aarch64)
305 }
306 Self::I686PcWindowsMsvc => Platform::new(Os::Windows, Arch::X86),
307 Self::X8664AppleDarwin => {
308 let (major, minor) = macos_deployment_target().map_or((13, 0), |(major, minor)| {
309 debug!("Found macOS deployment target: {}.{}", major, minor);
310 (major, minor)
311 });
312 Platform::new(Os::Macos { major, minor }, Arch::X86_64)
313 }
314 Self::Aarch64UnknownLinuxGnu => Platform::new(
315 Os::Manylinux {
316 major: 2,
317 minor: 28,
318 },
319 Arch::Aarch64,
320 ),
321 Self::Riscv64UnknownLinuxGnu => Platform::new(
322 Os::Manylinux {
323 major: 2,
324 minor: 39,
325 },
326 Arch::Riscv64,
327 ),
328 Self::Aarch64UnknownLinuxMusl => {
329 Platform::new(Os::Musllinux { major: 1, minor: 2 }, Arch::Aarch64)
330 }
331 Self::X8664UnknownLinuxMusl => {
332 Platform::new(Os::Musllinux { major: 1, minor: 2 }, Arch::X86_64)
333 }
334 Self::X8664Manylinux2014 => Platform::new(
335 Os::Manylinux {
336 major: 2,
337 minor: 17,
338 },
339 Arch::X86_64,
340 ),
341 Self::X8664Manylinux217 => Platform::new(
342 Os::Manylinux {
343 major: 2,
344 minor: 17,
345 },
346 Arch::X86_64,
347 ),
348 Self::X8664Manylinux228 => Platform::new(
349 Os::Manylinux {
350 major: 2,
351 minor: 28,
352 },
353 Arch::X86_64,
354 ),
355 Self::X8664Manylinux231 => Platform::new(
356 Os::Manylinux {
357 major: 2,
358 minor: 31,
359 },
360 Arch::X86_64,
361 ),
362 Self::X8664Manylinux232 => Platform::new(
363 Os::Manylinux {
364 major: 2,
365 minor: 32,
366 },
367 Arch::X86_64,
368 ),
369 Self::X8664Manylinux233 => Platform::new(
370 Os::Manylinux {
371 major: 2,
372 minor: 33,
373 },
374 Arch::X86_64,
375 ),
376 Self::X8664Manylinux234 => Platform::new(
377 Os::Manylinux {
378 major: 2,
379 minor: 34,
380 },
381 Arch::X86_64,
382 ),
383 Self::X8664Manylinux235 => Platform::new(
384 Os::Manylinux {
385 major: 2,
386 minor: 35,
387 },
388 Arch::X86_64,
389 ),
390 Self::X8664Manylinux236 => Platform::new(
391 Os::Manylinux {
392 major: 2,
393 minor: 36,
394 },
395 Arch::X86_64,
396 ),
397 Self::X8664Manylinux237 => Platform::new(
398 Os::Manylinux {
399 major: 2,
400 minor: 37,
401 },
402 Arch::X86_64,
403 ),
404 Self::X8664Manylinux238 => Platform::new(
405 Os::Manylinux {
406 major: 2,
407 minor: 38,
408 },
409 Arch::X86_64,
410 ),
411 Self::X8664Manylinux239 => Platform::new(
412 Os::Manylinux {
413 major: 2,
414 minor: 39,
415 },
416 Arch::X86_64,
417 ),
418 Self::X8664Manylinux240 => Platform::new(
419 Os::Manylinux {
420 major: 2,
421 minor: 40,
422 },
423 Arch::X86_64,
424 ),
425 Self::Aarch64Manylinux2014 => Platform::new(
426 Os::Manylinux {
427 major: 2,
428 minor: 17,
429 },
430 Arch::Aarch64,
431 ),
432 Self::Aarch64Manylinux217 => Platform::new(
433 Os::Manylinux {
434 major: 2,
435 minor: 17,
436 },
437 Arch::Aarch64,
438 ),
439 Self::Aarch64Manylinux228 => Platform::new(
440 Os::Manylinux {
441 major: 2,
442 minor: 28,
443 },
444 Arch::Aarch64,
445 ),
446 Self::Aarch64Manylinux231 => Platform::new(
447 Os::Manylinux {
448 major: 2,
449 minor: 31,
450 },
451 Arch::Aarch64,
452 ),
453 Self::Aarch64Manylinux232 => Platform::new(
454 Os::Manylinux {
455 major: 2,
456 minor: 32,
457 },
458 Arch::Aarch64,
459 ),
460 Self::Aarch64Manylinux233 => Platform::new(
461 Os::Manylinux {
462 major: 2,
463 minor: 33,
464 },
465 Arch::Aarch64,
466 ),
467 Self::Aarch64Manylinux234 => Platform::new(
468 Os::Manylinux {
469 major: 2,
470 minor: 34,
471 },
472 Arch::Aarch64,
473 ),
474 Self::Aarch64Manylinux235 => Platform::new(
475 Os::Manylinux {
476 major: 2,
477 minor: 35,
478 },
479 Arch::Aarch64,
480 ),
481 Self::Aarch64Manylinux236 => Platform::new(
482 Os::Manylinux {
483 major: 2,
484 minor: 36,
485 },
486 Arch::Aarch64,
487 ),
488 Self::Aarch64Manylinux237 => Platform::new(
489 Os::Manylinux {
490 major: 2,
491 minor: 37,
492 },
493 Arch::Aarch64,
494 ),
495 Self::Aarch64Manylinux238 => Platform::new(
496 Os::Manylinux {
497 major: 2,
498 minor: 38,
499 },
500 Arch::Aarch64,
501 ),
502 Self::Aarch64Manylinux239 => Platform::new(
503 Os::Manylinux {
504 major: 2,
505 minor: 39,
506 },
507 Arch::Aarch64,
508 ),
509 Self::Aarch64Manylinux240 => Platform::new(
510 Os::Manylinux {
511 major: 2,
512 minor: 40,
513 },
514 Arch::Aarch64,
515 ),
516 Self::Wasm32Pyodide2024 => Platform::new(
517 Os::Pyodide {
518 major: 2024,
519 minor: 0,
520 },
521 Arch::Wasm32,
522 ),
523 Self::Aarch64LinuxAndroid => {
524 let api_level = android_api_level().map_or(24, |api_level| {
525 debug!("Found Android API level: {}", api_level);
526 api_level
527 });
528 Platform::new(Os::Android { api_level }, Arch::Aarch64)
529 }
530 Self::X8664LinuxAndroid => {
531 let api_level = android_api_level().map_or(24, |api_level| {
532 debug!("Found Android API level: {}", api_level);
533 api_level
534 });
535 Platform::new(Os::Android { api_level }, Arch::X86_64)
536 }
537 Self::Arm64Ios => {
538 let (major, minor) = ios_deployment_target().map_or((13, 0), |(major, minor)| {
539 debug!("Found iOS deployment target: {}.{}", major, minor);
540 (major, minor)
541 });
542 Platform::new(
543 Os::Ios {
544 major,
545 minor,
546 simulator: false,
547 },
548 Arch::Aarch64,
549 )
550 }
551 Self::Arm64IosSimulator => {
552 let (major, minor) = ios_deployment_target().map_or((13, 0), |(major, minor)| {
553 debug!("Found iOS deployment target: {}.{}", major, minor);
554 (major, minor)
555 });
556 Platform::new(
557 Os::Ios {
558 major,
559 minor,
560 simulator: true,
561 },
562 Arch::Aarch64,
563 )
564 }
565 Self::X8664IosSimulator => {
566 let (major, minor) = ios_deployment_target().map_or((13, 0), |(major, minor)| {
567 debug!("Found iOS deployment target: {}.{}", major, minor);
568 (major, minor)
569 });
570 Platform::new(
571 Os::Ios {
572 major,
573 minor,
574 simulator: true,
575 },
576 Arch::X86_64,
577 )
578 }
579 }
580 }
581
582 pub fn platform_machine(self) -> &'static str {
584 match self {
585 Self::Windows | Self::X8664PcWindowsMsvc => "x86_64",
586 Self::Aarch64PcWindowsMsvc => "ARM64",
587 Self::Linux | Self::X8664UnknownLinuxGnu => "x86_64",
588 Self::Macos | Self::Aarch64AppleDarwin => "arm64",
589 Self::I686PcWindowsMsvc => "x86",
590 Self::X8664AppleDarwin => "x86_64",
591 Self::Aarch64UnknownLinuxGnu => "aarch64",
592 Self::Aarch64UnknownLinuxMusl => "aarch64",
593 Self::X8664UnknownLinuxMusl => "x86_64",
594 Self::Riscv64UnknownLinuxGnu => "riscv64",
595 Self::X8664Manylinux2014 => "x86_64",
596 Self::X8664Manylinux217 => "x86_64",
597 Self::X8664Manylinux228 => "x86_64",
598 Self::X8664Manylinux231 => "x86_64",
599 Self::X8664Manylinux232 => "x86_64",
600 Self::X8664Manylinux233 => "x86_64",
601 Self::X8664Manylinux234 => "x86_64",
602 Self::X8664Manylinux235 => "x86_64",
603 Self::X8664Manylinux236 => "x86_64",
604 Self::X8664Manylinux237 => "x86_64",
605 Self::X8664Manylinux238 => "x86_64",
606 Self::X8664Manylinux239 => "x86_64",
607 Self::X8664Manylinux240 => "x86_64",
608 Self::Aarch64Manylinux2014 => "aarch64",
609 Self::Aarch64Manylinux217 => "aarch64",
610 Self::Aarch64Manylinux228 => "aarch64",
611 Self::Aarch64Manylinux231 => "aarch64",
612 Self::Aarch64Manylinux232 => "aarch64",
613 Self::Aarch64Manylinux233 => "aarch64",
614 Self::Aarch64Manylinux234 => "aarch64",
615 Self::Aarch64Manylinux235 => "aarch64",
616 Self::Aarch64Manylinux236 => "aarch64",
617 Self::Aarch64Manylinux237 => "aarch64",
618 Self::Aarch64Manylinux238 => "aarch64",
619 Self::Aarch64Manylinux239 => "aarch64",
620 Self::Aarch64Manylinux240 => "aarch64",
621 Self::Aarch64LinuxAndroid => "aarch64",
622 Self::X8664LinuxAndroid => "x86_64",
623 Self::Wasm32Pyodide2024 => "wasm32",
624 Self::Arm64Ios => "arm64",
625 Self::Arm64IosSimulator => "arm64",
626 Self::X8664IosSimulator => "x86_64",
627 }
628 }
629
630 pub fn platform_system(self) -> &'static str {
632 match self {
633 Self::Windows | Self::X8664PcWindowsMsvc => "Windows",
634 Self::Aarch64PcWindowsMsvc => "Windows",
635 Self::Linux | Self::X8664UnknownLinuxGnu => "Linux",
636 Self::Macos | Self::Aarch64AppleDarwin => "Darwin",
637 Self::I686PcWindowsMsvc => "Windows",
638 Self::X8664AppleDarwin => "Darwin",
639 Self::Aarch64UnknownLinuxGnu => "Linux",
640 Self::Aarch64UnknownLinuxMusl => "Linux",
641 Self::X8664UnknownLinuxMusl => "Linux",
642 Self::Riscv64UnknownLinuxGnu => "Linux",
643 Self::X8664Manylinux2014 => "Linux",
644 Self::X8664Manylinux217 => "Linux",
645 Self::X8664Manylinux228 => "Linux",
646 Self::X8664Manylinux231 => "Linux",
647 Self::X8664Manylinux232 => "Linux",
648 Self::X8664Manylinux233 => "Linux",
649 Self::X8664Manylinux234 => "Linux",
650 Self::X8664Manylinux235 => "Linux",
651 Self::X8664Manylinux236 => "Linux",
652 Self::X8664Manylinux237 => "Linux",
653 Self::X8664Manylinux238 => "Linux",
654 Self::X8664Manylinux239 => "Linux",
655 Self::X8664Manylinux240 => "Linux",
656 Self::Aarch64Manylinux2014 => "Linux",
657 Self::Aarch64Manylinux217 => "Linux",
658 Self::Aarch64Manylinux228 => "Linux",
659 Self::Aarch64Manylinux231 => "Linux",
660 Self::Aarch64Manylinux232 => "Linux",
661 Self::Aarch64Manylinux233 => "Linux",
662 Self::Aarch64Manylinux234 => "Linux",
663 Self::Aarch64Manylinux235 => "Linux",
664 Self::Aarch64Manylinux236 => "Linux",
665 Self::Aarch64Manylinux237 => "Linux",
666 Self::Aarch64Manylinux238 => "Linux",
667 Self::Aarch64Manylinux239 => "Linux",
668 Self::Aarch64Manylinux240 => "Linux",
669 Self::Aarch64LinuxAndroid => "Android",
670 Self::X8664LinuxAndroid => "Android",
671 Self::Wasm32Pyodide2024 => "Emscripten",
672 Self::Arm64Ios => "iOS",
673 Self::Arm64IosSimulator => "iOS",
674 Self::X8664IosSimulator => "iOS",
675 }
676 }
677
678 pub fn platform_version(self) -> &'static str {
680 match self {
681 Self::Windows | Self::X8664PcWindowsMsvc => "",
682 Self::Aarch64PcWindowsMsvc => "",
683 Self::Linux | Self::X8664UnknownLinuxGnu => "",
684 Self::Macos | Self::Aarch64AppleDarwin => "",
685 Self::I686PcWindowsMsvc => "",
686 Self::X8664AppleDarwin => "",
687 Self::Aarch64UnknownLinuxGnu => "",
688 Self::Aarch64UnknownLinuxMusl => "",
689 Self::X8664UnknownLinuxMusl => "",
690 Self::Riscv64UnknownLinuxGnu => "",
691 Self::X8664Manylinux2014 => "",
692 Self::X8664Manylinux217 => "",
693 Self::X8664Manylinux228 => "",
694 Self::X8664Manylinux231 => "",
695 Self::X8664Manylinux232 => "",
696 Self::X8664Manylinux233 => "",
697 Self::X8664Manylinux234 => "",
698 Self::X8664Manylinux235 => "",
699 Self::X8664Manylinux236 => "",
700 Self::X8664Manylinux237 => "",
701 Self::X8664Manylinux238 => "",
702 Self::X8664Manylinux239 => "",
703 Self::X8664Manylinux240 => "",
704 Self::Aarch64Manylinux2014 => "",
705 Self::Aarch64Manylinux217 => "",
706 Self::Aarch64Manylinux228 => "",
707 Self::Aarch64Manylinux231 => "",
708 Self::Aarch64Manylinux232 => "",
709 Self::Aarch64Manylinux233 => "",
710 Self::Aarch64Manylinux234 => "",
711 Self::Aarch64Manylinux235 => "",
712 Self::Aarch64Manylinux236 => "",
713 Self::Aarch64Manylinux237 => "",
714 Self::Aarch64Manylinux238 => "",
715 Self::Aarch64Manylinux239 => "",
716 Self::Aarch64Manylinux240 => "",
717 Self::Aarch64LinuxAndroid => "",
718 Self::X8664LinuxAndroid => "",
719 Self::Wasm32Pyodide2024 => "#1",
723 Self::Arm64Ios => "",
724 Self::Arm64IosSimulator => "",
725 Self::X8664IosSimulator => "",
726 }
727 }
728
729 pub fn platform_release(self) -> &'static str {
731 match self {
732 Self::Windows | Self::X8664PcWindowsMsvc => "",
733 Self::Aarch64PcWindowsMsvc => "",
734 Self::Linux | Self::X8664UnknownLinuxGnu => "",
735 Self::Macos | Self::Aarch64AppleDarwin => "",
736 Self::I686PcWindowsMsvc => "",
737 Self::X8664AppleDarwin => "",
738 Self::Aarch64UnknownLinuxGnu => "",
739 Self::Aarch64UnknownLinuxMusl => "",
740 Self::X8664UnknownLinuxMusl => "",
741 Self::Riscv64UnknownLinuxGnu => "",
742 Self::X8664Manylinux2014 => "",
743 Self::X8664Manylinux217 => "",
744 Self::X8664Manylinux228 => "",
745 Self::X8664Manylinux231 => "",
746 Self::X8664Manylinux232 => "",
747 Self::X8664Manylinux233 => "",
748 Self::X8664Manylinux234 => "",
749 Self::X8664Manylinux235 => "",
750 Self::X8664Manylinux236 => "",
751 Self::X8664Manylinux237 => "",
752 Self::X8664Manylinux238 => "",
753 Self::X8664Manylinux239 => "",
754 Self::X8664Manylinux240 => "",
755 Self::Aarch64Manylinux2014 => "",
756 Self::Aarch64Manylinux217 => "",
757 Self::Aarch64Manylinux228 => "",
758 Self::Aarch64Manylinux231 => "",
759 Self::Aarch64Manylinux232 => "",
760 Self::Aarch64Manylinux233 => "",
761 Self::Aarch64Manylinux234 => "",
762 Self::Aarch64Manylinux235 => "",
763 Self::Aarch64Manylinux236 => "",
764 Self::Aarch64Manylinux237 => "",
765 Self::Aarch64Manylinux238 => "",
766 Self::Aarch64Manylinux239 => "",
767 Self::Aarch64Manylinux240 => "",
768 Self::Aarch64LinuxAndroid => "",
769 Self::X8664LinuxAndroid => "",
770 Self::Wasm32Pyodide2024 => "3.1.58",
773 Self::Arm64Ios => "",
774 Self::Arm64IosSimulator => "",
775 Self::X8664IosSimulator => "",
776 }
777 }
778
779 pub fn os_name(self) -> &'static str {
781 match self {
782 Self::Windows | Self::X8664PcWindowsMsvc => "nt",
783 Self::Aarch64PcWindowsMsvc => "nt",
784 Self::Linux | Self::X8664UnknownLinuxGnu => "posix",
785 Self::Macos | Self::Aarch64AppleDarwin => "posix",
786 Self::I686PcWindowsMsvc => "nt",
787 Self::X8664AppleDarwin => "posix",
788 Self::Aarch64UnknownLinuxGnu => "posix",
789 Self::Aarch64UnknownLinuxMusl => "posix",
790 Self::X8664UnknownLinuxMusl => "posix",
791 Self::Riscv64UnknownLinuxGnu => "posix",
792 Self::X8664Manylinux2014 => "posix",
793 Self::X8664Manylinux217 => "posix",
794 Self::X8664Manylinux228 => "posix",
795 Self::X8664Manylinux231 => "posix",
796 Self::X8664Manylinux232 => "posix",
797 Self::X8664Manylinux233 => "posix",
798 Self::X8664Manylinux234 => "posix",
799 Self::X8664Manylinux235 => "posix",
800 Self::X8664Manylinux236 => "posix",
801 Self::X8664Manylinux237 => "posix",
802 Self::X8664Manylinux238 => "posix",
803 Self::X8664Manylinux239 => "posix",
804 Self::X8664Manylinux240 => "posix",
805 Self::Aarch64Manylinux2014 => "posix",
806 Self::Aarch64Manylinux217 => "posix",
807 Self::Aarch64Manylinux228 => "posix",
808 Self::Aarch64Manylinux231 => "posix",
809 Self::Aarch64Manylinux232 => "posix",
810 Self::Aarch64Manylinux233 => "posix",
811 Self::Aarch64Manylinux234 => "posix",
812 Self::Aarch64Manylinux235 => "posix",
813 Self::Aarch64Manylinux236 => "posix",
814 Self::Aarch64Manylinux237 => "posix",
815 Self::Aarch64Manylinux238 => "posix",
816 Self::Aarch64Manylinux239 => "posix",
817 Self::Aarch64Manylinux240 => "posix",
818 Self::Aarch64LinuxAndroid => "posix",
819 Self::X8664LinuxAndroid => "posix",
820 Self::Wasm32Pyodide2024 => "posix",
821 Self::Arm64Ios => "posix",
822 Self::Arm64IosSimulator => "posix",
823 Self::X8664IosSimulator => "posix",
824 }
825 }
826
827 pub fn sys_platform(self) -> &'static str {
829 match self {
830 Self::Windows | Self::X8664PcWindowsMsvc => "win32",
831 Self::Aarch64PcWindowsMsvc => "win32",
832 Self::Linux | Self::X8664UnknownLinuxGnu => "linux",
833 Self::Macos | Self::Aarch64AppleDarwin => "darwin",
834 Self::I686PcWindowsMsvc => "win32",
835 Self::X8664AppleDarwin => "darwin",
836 Self::Aarch64UnknownLinuxGnu => "linux",
837 Self::Aarch64UnknownLinuxMusl => "linux",
838 Self::X8664UnknownLinuxMusl => "linux",
839 Self::Riscv64UnknownLinuxGnu => "linux",
840 Self::X8664Manylinux2014 => "linux",
841 Self::X8664Manylinux217 => "linux",
842 Self::X8664Manylinux228 => "linux",
843 Self::X8664Manylinux231 => "linux",
844 Self::X8664Manylinux232 => "linux",
845 Self::X8664Manylinux233 => "linux",
846 Self::X8664Manylinux234 => "linux",
847 Self::X8664Manylinux235 => "linux",
848 Self::X8664Manylinux236 => "linux",
849 Self::X8664Manylinux237 => "linux",
850 Self::X8664Manylinux238 => "linux",
851 Self::X8664Manylinux239 => "linux",
852 Self::X8664Manylinux240 => "linux",
853 Self::Aarch64Manylinux2014 => "linux",
854 Self::Aarch64Manylinux217 => "linux",
855 Self::Aarch64Manylinux228 => "linux",
856 Self::Aarch64Manylinux231 => "linux",
857 Self::Aarch64Manylinux232 => "linux",
858 Self::Aarch64Manylinux233 => "linux",
859 Self::Aarch64Manylinux234 => "linux",
860 Self::Aarch64Manylinux235 => "linux",
861 Self::Aarch64Manylinux236 => "linux",
862 Self::Aarch64Manylinux237 => "linux",
863 Self::Aarch64Manylinux238 => "linux",
864 Self::Aarch64Manylinux239 => "linux",
865 Self::Aarch64Manylinux240 => "linux",
866 Self::Aarch64LinuxAndroid => "android",
867 Self::X8664LinuxAndroid => "android",
868 Self::Wasm32Pyodide2024 => "emscripten",
869 Self::Arm64Ios => "ios",
870 Self::Arm64IosSimulator => "ios",
871 Self::X8664IosSimulator => "ios",
872 }
873 }
874
875 pub fn manylinux_compatible(self) -> bool {
877 match self {
878 Self::Windows | Self::X8664PcWindowsMsvc => false,
879 Self::Aarch64PcWindowsMsvc => false,
880 Self::Linux | Self::X8664UnknownLinuxGnu => true,
881 Self::Macos | Self::Aarch64AppleDarwin => false,
882 Self::I686PcWindowsMsvc => false,
883 Self::X8664AppleDarwin => false,
884 Self::Aarch64UnknownLinuxGnu => true,
885 Self::Aarch64UnknownLinuxMusl => true,
886 Self::X8664UnknownLinuxMusl => true,
887 Self::Riscv64UnknownLinuxGnu => true,
888 Self::X8664Manylinux2014 => true,
889 Self::X8664Manylinux217 => true,
890 Self::X8664Manylinux228 => true,
891 Self::X8664Manylinux231 => true,
892 Self::X8664Manylinux232 => true,
893 Self::X8664Manylinux233 => true,
894 Self::X8664Manylinux234 => true,
895 Self::X8664Manylinux235 => true,
896 Self::X8664Manylinux236 => true,
897 Self::X8664Manylinux237 => true,
898 Self::X8664Manylinux238 => true,
899 Self::X8664Manylinux239 => true,
900 Self::X8664Manylinux240 => true,
901 Self::Aarch64Manylinux2014 => true,
902 Self::Aarch64Manylinux217 => true,
903 Self::Aarch64Manylinux228 => true,
904 Self::Aarch64Manylinux231 => true,
905 Self::Aarch64Manylinux232 => true,
906 Self::Aarch64Manylinux233 => true,
907 Self::Aarch64Manylinux234 => true,
908 Self::Aarch64Manylinux235 => true,
909 Self::Aarch64Manylinux236 => true,
910 Self::Aarch64Manylinux237 => true,
911 Self::Aarch64Manylinux238 => true,
912 Self::Aarch64Manylinux239 => true,
913 Self::Aarch64Manylinux240 => true,
914 Self::Aarch64LinuxAndroid => false,
915 Self::X8664LinuxAndroid => false,
916 Self::Wasm32Pyodide2024 => false,
917 Self::Arm64Ios => false,
918 Self::Arm64IosSimulator => false,
919 Self::X8664IosSimulator => false,
920 }
921 }
922
923 pub fn markers(self, base: &MarkerEnvironment) -> MarkerEnvironment {
929 base.clone()
930 .with_os_name(self.os_name())
931 .with_platform_machine(self.platform_machine())
932 .with_platform_system(self.platform_system())
933 .with_sys_platform(self.sys_platform())
934 .with_platform_release(self.platform_release())
935 .with_platform_version(self.platform_version())
936 }
937}
938
939fn macos_deployment_target() -> Option<(u16, u16)> {
941 let version = std::env::var(EnvVars::MACOSX_DEPLOYMENT_TARGET).ok()?;
942 let mut parts = version.split('.');
943
944 let major = parts.next()?.parse::<u16>().ok()?;
946
947 let minor = parts.next().unwrap_or("0").parse::<u16>().ok()?;
949
950 Some((major, minor))
951}
952
953fn ios_deployment_target() -> Option<(u16, u16)> {
955 let version = std::env::var(EnvVars::IPHONEOS_DEPLOYMENT_TARGET).ok()?;
956 let mut parts = version.split('.');
957
958 let major = parts.next()?.parse::<u16>().ok()?;
960
961 let minor = parts.next().unwrap_or("0").parse::<u16>().ok()?;
963
964 Some((major, minor))
965}
966
967fn android_api_level() -> Option<u16> {
969 let api_level_str = std::env::var(EnvVars::ANDROID_API_LEVEL).ok()?;
970
971 let api_level = api_level_str.parse::<u16>().ok()?;
973
974 Some(api_level)
975}