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(
88 feature = "clap",
89 value(name = "x86_64-manylinux2014", alias = "manylinux2014_x86_64")
90 )]
91 #[serde(rename = "x86_64-manylinux2014")]
92 #[serde(alias = "x8664-manylinux2014")]
93 #[serde(alias = "manylinux2014_x86_64")]
94 X8664Manylinux2014,
95
96 #[cfg_attr(
98 feature = "clap",
99 value(name = "x86_64-manylinux_2_17", alias = "manylinux_2_17_x86_64")
100 )]
101 #[serde(rename = "x86_64-manylinux_2_17")]
102 #[serde(alias = "x8664-manylinux217")]
103 #[serde(alias = "manylinux_2_17_x86_64")]
104 X8664Manylinux217,
105
106 #[cfg_attr(
108 feature = "clap",
109 value(name = "x86_64-manylinux_2_28", alias = "manylinux_2_28_x86_64")
110 )]
111 #[serde(rename = "x86_64-manylinux_2_28")]
112 #[serde(alias = "x8664-manylinux228")]
113 #[serde(alias = "manylinux_2_28_x86_64")]
114 X8664Manylinux228,
115
116 #[cfg_attr(
118 feature = "clap",
119 value(name = "x86_64-manylinux_2_31", alias = "manylinux_2_31_x86_64")
120 )]
121 #[serde(rename = "x86_64-manylinux_2_31")]
122 #[serde(alias = "x8664-manylinux231")]
123 #[serde(alias = "manylinux_2_31_x86_64")]
124 X8664Manylinux231,
125
126 #[cfg_attr(
128 feature = "clap",
129 value(name = "x86_64-manylinux_2_32", alias = "manylinux_2_32_x86_64")
130 )]
131 #[serde(rename = "x86_64-manylinux_2_32")]
132 #[serde(alias = "x8664-manylinux232")]
133 #[serde(alias = "manylinux_2_32_x86_64")]
134 X8664Manylinux232,
135
136 #[cfg_attr(
138 feature = "clap",
139 value(name = "x86_64-manylinux_2_33", alias = "manylinux_2_33_x86_64")
140 )]
141 #[serde(rename = "x86_64-manylinux_2_33")]
142 #[serde(alias = "x8664-manylinux233")]
143 #[serde(alias = "manylinux_2_33_x86_64")]
144 X8664Manylinux233,
145
146 #[cfg_attr(
148 feature = "clap",
149 value(name = "x86_64-manylinux_2_34", alias = "manylinux_2_34_x86_64")
150 )]
151 #[serde(rename = "x86_64-manylinux_2_34")]
152 #[serde(alias = "x8664-manylinux234")]
153 #[serde(alias = "manylinux_2_34_x86_64")]
154 X8664Manylinux234,
155
156 #[cfg_attr(
158 feature = "clap",
159 value(name = "x86_64-manylinux_2_35", alias = "manylinux_2_35_x86_64")
160 )]
161 #[serde(rename = "x86_64-manylinux_2_35")]
162 #[serde(alias = "x8664-manylinux235")]
163 #[serde(alias = "manylinux_2_35_x86_64")]
164 X8664Manylinux235,
165
166 #[cfg_attr(
168 feature = "clap",
169 value(name = "x86_64-manylinux_2_36", alias = "manylinux_2_36_x86_64")
170 )]
171 #[serde(rename = "x86_64-manylinux_2_36")]
172 #[serde(alias = "x8664-manylinux236")]
173 #[serde(alias = "manylinux_2_36_x86_64")]
174 X8664Manylinux236,
175
176 #[cfg_attr(
178 feature = "clap",
179 value(name = "x86_64-manylinux_2_37", alias = "manylinux_2_37_x86_64")
180 )]
181 #[serde(rename = "x86_64-manylinux_2_37")]
182 #[serde(alias = "x8664-manylinux237")]
183 #[serde(alias = "manylinux_2_37_x86_64")]
184 X8664Manylinux237,
185
186 #[cfg_attr(
188 feature = "clap",
189 value(name = "x86_64-manylinux_2_38", alias = "manylinux_2_38_x86_64")
190 )]
191 #[serde(rename = "x86_64-manylinux_2_38")]
192 #[serde(alias = "x8664-manylinux238")]
193 #[serde(alias = "manylinux_2_38_x86_64")]
194 X8664Manylinux238,
195
196 #[cfg_attr(
198 feature = "clap",
199 value(name = "x86_64-manylinux_2_39", alias = "manylinux_2_39_x86_64")
200 )]
201 #[serde(rename = "x86_64-manylinux_2_39")]
202 #[serde(alias = "x8664-manylinux239")]
203 #[serde(alias = "manylinux_2_39_x86_64")]
204 X8664Manylinux239,
205
206 #[cfg_attr(
208 feature = "clap",
209 value(name = "x86_64-manylinux_2_40", alias = "manylinux_2_40_x86_64")
210 )]
211 #[serde(rename = "x86_64-manylinux_2_40")]
212 #[serde(alias = "x8664-manylinux240")]
213 #[serde(alias = "manylinux_2_40_x86_64")]
214 X8664Manylinux240,
215
216 #[cfg_attr(
218 feature = "clap",
219 value(name = "aarch64-manylinux2014", alias = "manylinux2014_aarch64")
220 )]
221 #[serde(rename = "aarch64-manylinux2014")]
222 #[serde(alias = "manylinux2014_aarch64")]
223 Aarch64Manylinux2014,
224
225 #[cfg_attr(
227 feature = "clap",
228 value(name = "aarch64-manylinux_2_17", alias = "manylinux_2_17_aarch64")
229 )]
230 #[serde(rename = "aarch64-manylinux_2_17")]
231 #[serde(alias = "aarch64-manylinux217")]
232 #[serde(alias = "manylinux_2_17_aarch64")]
233 Aarch64Manylinux217,
234
235 #[cfg_attr(
237 feature = "clap",
238 value(name = "aarch64-manylinux_2_28", alias = "manylinux_2_28_aarch64")
239 )]
240 #[serde(rename = "aarch64-manylinux_2_28")]
241 #[serde(alias = "aarch64-manylinux228")]
242 #[serde(alias = "manylinux_2_28_aarch64")]
243 Aarch64Manylinux228,
244
245 #[cfg_attr(
247 feature = "clap",
248 value(name = "aarch64-manylinux_2_31", alias = "manylinux_2_31_aarch64")
249 )]
250 #[serde(rename = "aarch64-manylinux_2_31")]
251 #[serde(alias = "aarch64-manylinux231")]
252 #[serde(alias = "manylinux_2_31_aarch64")]
253 Aarch64Manylinux231,
254
255 #[cfg_attr(
257 feature = "clap",
258 value(name = "aarch64-manylinux_2_32", alias = "manylinux_2_32_aarch64")
259 )]
260 #[serde(rename = "aarch64-manylinux_2_32")]
261 #[serde(alias = "aarch64-manylinux232")]
262 #[serde(alias = "manylinux_2_32_aarch64")]
263 Aarch64Manylinux232,
264
265 #[cfg_attr(
267 feature = "clap",
268 value(name = "aarch64-manylinux_2_33", alias = "manylinux_2_33_aarch64")
269 )]
270 #[serde(rename = "aarch64-manylinux_2_33")]
271 #[serde(alias = "aarch64-manylinux233")]
272 #[serde(alias = "manylinux_2_33_aarch64")]
273 Aarch64Manylinux233,
274
275 #[cfg_attr(
277 feature = "clap",
278 value(name = "aarch64-manylinux_2_34", alias = "manylinux_2_34_aarch64")
279 )]
280 #[serde(rename = "aarch64-manylinux_2_34")]
281 #[serde(alias = "aarch64-manylinux234")]
282 #[serde(alias = "manylinux_2_34_aarch64")]
283 Aarch64Manylinux234,
284
285 #[cfg_attr(
287 feature = "clap",
288 value(name = "aarch64-manylinux_2_35", alias = "manylinux_2_35_aarch64")
289 )]
290 #[serde(rename = "aarch64-manylinux_2_35")]
291 #[serde(alias = "aarch64-manylinux235")]
292 #[serde(alias = "manylinux_2_35_aarch64")]
293 Aarch64Manylinux235,
294
295 #[cfg_attr(
297 feature = "clap",
298 value(name = "aarch64-manylinux_2_36", alias = "manylinux_2_36_aarch64")
299 )]
300 #[serde(rename = "aarch64-manylinux_2_36")]
301 #[serde(alias = "aarch64-manylinux236")]
302 #[serde(alias = "manylinux_2_36_aarch64")]
303 Aarch64Manylinux236,
304
305 #[cfg_attr(
307 feature = "clap",
308 value(name = "aarch64-manylinux_2_37", alias = "manylinux_2_37_aarch64")
309 )]
310 #[serde(rename = "aarch64-manylinux_2_37")]
311 #[serde(alias = "aarch64-manylinux237")]
312 #[serde(alias = "manylinux_2_37_aarch64")]
313 Aarch64Manylinux237,
314
315 #[cfg_attr(
317 feature = "clap",
318 value(name = "aarch64-manylinux_2_38", alias = "manylinux_2_38_aarch64")
319 )]
320 #[serde(rename = "aarch64-manylinux_2_38")]
321 #[serde(alias = "aarch64-manylinux238")]
322 #[serde(alias = "manylinux_2_38_aarch64")]
323 Aarch64Manylinux238,
324
325 #[cfg_attr(
327 feature = "clap",
328 value(name = "aarch64-manylinux_2_39", alias = "manylinux_2_39_aarch64")
329 )]
330 #[serde(rename = "aarch64-manylinux_2_39")]
331 #[serde(alias = "aarch64-manylinux239")]
332 #[serde(alias = "manylinux_2_39_aarch64")]
333 Aarch64Manylinux239,
334
335 #[cfg_attr(
337 feature = "clap",
338 value(name = "aarch64-manylinux_2_40", alias = "manylinux_2_40_aarch64")
339 )]
340 #[serde(rename = "aarch64-manylinux_2_40")]
341 #[serde(alias = "aarch64-manylinux240")]
342 #[serde(alias = "manylinux_2_40_aarch64")]
343 Aarch64Manylinux240,
344
345 #[cfg_attr(feature = "clap", value(name = "aarch64-linux-android"))]
350 #[serde(rename = "aarch64-linux-android")]
351 Aarch64LinuxAndroid,
352
353 #[cfg_attr(feature = "clap", value(name = "x86_64-linux-android"))]
358 #[serde(rename = "x86_64-linux-android")]
359 X8664LinuxAndroid,
360
361 #[cfg_attr(feature = "clap", value(name = "wasm32-pyodide2024"))]
363 Wasm32Pyodide2024,
364
365 #[cfg_attr(feature = "clap", value(name = "arm64-apple-ios"))]
370 #[serde(rename = "arm64-apple-ios")]
371 Arm64Ios,
372
373 #[cfg_attr(feature = "clap", value(name = "arm64-apple-ios-simulator"))]
378 #[serde(rename = "arm64-apple-ios-simulator")]
379 Arm64IosSimulator,
380
381 #[cfg_attr(feature = "clap", value(name = "x86_64-apple-ios-simulator"))]
386 #[serde(rename = "x86_64-apple-ios-simulator")]
387 X8664IosSimulator,
388}
389
390impl TargetTriple {
391 pub fn platform(self) -> Platform {
393 match self {
394 Self::Windows | Self::X8664PcWindowsMsvc => Platform::new(Os::Windows, Arch::X86_64),
395 Self::Aarch64PcWindowsMsvc => Platform::new(Os::Windows, Arch::Aarch64),
396 Self::Linux | Self::X8664UnknownLinuxGnu => Platform::new(
397 Os::Manylinux {
398 major: 2,
399 minor: 28,
400 },
401 Arch::X86_64,
402 ),
403 Self::Macos | Self::Aarch64AppleDarwin => {
404 let (major, minor) = macos_deployment_target().map_or((13, 0), |(major, minor)| {
405 debug!("Found macOS deployment target: {}.{}", major, minor);
406 (major, minor)
407 });
408 Platform::new(Os::Macos { major, minor }, Arch::Aarch64)
409 }
410 Self::I686PcWindowsMsvc => Platform::new(Os::Windows, Arch::X86),
411 Self::X8664AppleDarwin => {
412 let (major, minor) = macos_deployment_target().map_or((13, 0), |(major, minor)| {
413 debug!("Found macOS deployment target: {}.{}", major, minor);
414 (major, minor)
415 });
416 Platform::new(Os::Macos { major, minor }, Arch::X86_64)
417 }
418 Self::Aarch64UnknownLinuxGnu => Platform::new(
419 Os::Manylinux {
420 major: 2,
421 minor: 28,
422 },
423 Arch::Aarch64,
424 ),
425 Self::Riscv64UnknownLinuxGnu => Platform::new(
426 Os::Manylinux {
427 major: 2,
428 minor: 39,
429 },
430 Arch::Riscv64,
431 ),
432 Self::Aarch64UnknownLinuxMusl => {
433 Platform::new(Os::Musllinux { major: 1, minor: 2 }, Arch::Aarch64)
434 }
435 Self::X8664UnknownLinuxMusl => {
436 Platform::new(Os::Musllinux { major: 1, minor: 2 }, Arch::X86_64)
437 }
438 Self::X8664Manylinux2014 => Platform::new(
439 Os::Manylinux {
440 major: 2,
441 minor: 17,
442 },
443 Arch::X86_64,
444 ),
445 Self::X8664Manylinux217 => Platform::new(
446 Os::Manylinux {
447 major: 2,
448 minor: 17,
449 },
450 Arch::X86_64,
451 ),
452 Self::X8664Manylinux228 => Platform::new(
453 Os::Manylinux {
454 major: 2,
455 minor: 28,
456 },
457 Arch::X86_64,
458 ),
459 Self::X8664Manylinux231 => Platform::new(
460 Os::Manylinux {
461 major: 2,
462 minor: 31,
463 },
464 Arch::X86_64,
465 ),
466 Self::X8664Manylinux232 => Platform::new(
467 Os::Manylinux {
468 major: 2,
469 minor: 32,
470 },
471 Arch::X86_64,
472 ),
473 Self::X8664Manylinux233 => Platform::new(
474 Os::Manylinux {
475 major: 2,
476 minor: 33,
477 },
478 Arch::X86_64,
479 ),
480 Self::X8664Manylinux234 => Platform::new(
481 Os::Manylinux {
482 major: 2,
483 minor: 34,
484 },
485 Arch::X86_64,
486 ),
487 Self::X8664Manylinux235 => Platform::new(
488 Os::Manylinux {
489 major: 2,
490 minor: 35,
491 },
492 Arch::X86_64,
493 ),
494 Self::X8664Manylinux236 => Platform::new(
495 Os::Manylinux {
496 major: 2,
497 minor: 36,
498 },
499 Arch::X86_64,
500 ),
501 Self::X8664Manylinux237 => Platform::new(
502 Os::Manylinux {
503 major: 2,
504 minor: 37,
505 },
506 Arch::X86_64,
507 ),
508 Self::X8664Manylinux238 => Platform::new(
509 Os::Manylinux {
510 major: 2,
511 minor: 38,
512 },
513 Arch::X86_64,
514 ),
515 Self::X8664Manylinux239 => Platform::new(
516 Os::Manylinux {
517 major: 2,
518 minor: 39,
519 },
520 Arch::X86_64,
521 ),
522 Self::X8664Manylinux240 => Platform::new(
523 Os::Manylinux {
524 major: 2,
525 minor: 40,
526 },
527 Arch::X86_64,
528 ),
529 Self::Aarch64Manylinux2014 => Platform::new(
530 Os::Manylinux {
531 major: 2,
532 minor: 17,
533 },
534 Arch::Aarch64,
535 ),
536 Self::Aarch64Manylinux217 => Platform::new(
537 Os::Manylinux {
538 major: 2,
539 minor: 17,
540 },
541 Arch::Aarch64,
542 ),
543 Self::Aarch64Manylinux228 => Platform::new(
544 Os::Manylinux {
545 major: 2,
546 minor: 28,
547 },
548 Arch::Aarch64,
549 ),
550 Self::Aarch64Manylinux231 => Platform::new(
551 Os::Manylinux {
552 major: 2,
553 minor: 31,
554 },
555 Arch::Aarch64,
556 ),
557 Self::Aarch64Manylinux232 => Platform::new(
558 Os::Manylinux {
559 major: 2,
560 minor: 32,
561 },
562 Arch::Aarch64,
563 ),
564 Self::Aarch64Manylinux233 => Platform::new(
565 Os::Manylinux {
566 major: 2,
567 minor: 33,
568 },
569 Arch::Aarch64,
570 ),
571 Self::Aarch64Manylinux234 => Platform::new(
572 Os::Manylinux {
573 major: 2,
574 minor: 34,
575 },
576 Arch::Aarch64,
577 ),
578 Self::Aarch64Manylinux235 => Platform::new(
579 Os::Manylinux {
580 major: 2,
581 minor: 35,
582 },
583 Arch::Aarch64,
584 ),
585 Self::Aarch64Manylinux236 => Platform::new(
586 Os::Manylinux {
587 major: 2,
588 minor: 36,
589 },
590 Arch::Aarch64,
591 ),
592 Self::Aarch64Manylinux237 => Platform::new(
593 Os::Manylinux {
594 major: 2,
595 minor: 37,
596 },
597 Arch::Aarch64,
598 ),
599 Self::Aarch64Manylinux238 => Platform::new(
600 Os::Manylinux {
601 major: 2,
602 minor: 38,
603 },
604 Arch::Aarch64,
605 ),
606 Self::Aarch64Manylinux239 => Platform::new(
607 Os::Manylinux {
608 major: 2,
609 minor: 39,
610 },
611 Arch::Aarch64,
612 ),
613 Self::Aarch64Manylinux240 => Platform::new(
614 Os::Manylinux {
615 major: 2,
616 minor: 40,
617 },
618 Arch::Aarch64,
619 ),
620 Self::Wasm32Pyodide2024 => Platform::new(
621 Os::Pyodide {
622 major: 2024,
623 minor: 0,
624 },
625 Arch::Wasm32,
626 ),
627 Self::Aarch64LinuxAndroid => {
628 let api_level = android_api_level().map_or(24, |api_level| {
629 debug!("Found Android API level: {}", api_level);
630 api_level
631 });
632 Platform::new(Os::Android { api_level }, Arch::Aarch64)
633 }
634 Self::X8664LinuxAndroid => {
635 let api_level = android_api_level().map_or(24, |api_level| {
636 debug!("Found Android API level: {}", api_level);
637 api_level
638 });
639 Platform::new(Os::Android { api_level }, Arch::X86_64)
640 }
641 Self::Arm64Ios => {
642 let (major, minor) = ios_deployment_target().map_or((13, 0), |(major, minor)| {
643 debug!("Found iOS deployment target: {}.{}", major, minor);
644 (major, minor)
645 });
646 Platform::new(
647 Os::Ios {
648 major,
649 minor,
650 simulator: false,
651 },
652 Arch::Aarch64,
653 )
654 }
655 Self::Arm64IosSimulator => {
656 let (major, minor) = ios_deployment_target().map_or((13, 0), |(major, minor)| {
657 debug!("Found iOS deployment target: {}.{}", major, minor);
658 (major, minor)
659 });
660 Platform::new(
661 Os::Ios {
662 major,
663 minor,
664 simulator: true,
665 },
666 Arch::Aarch64,
667 )
668 }
669 Self::X8664IosSimulator => {
670 let (major, minor) = ios_deployment_target().map_or((13, 0), |(major, minor)| {
671 debug!("Found iOS deployment target: {}.{}", major, minor);
672 (major, minor)
673 });
674 Platform::new(
675 Os::Ios {
676 major,
677 minor,
678 simulator: true,
679 },
680 Arch::X86_64,
681 )
682 }
683 }
684 }
685
686 pub fn platform_machine(self) -> &'static str {
688 match self {
689 Self::Windows | Self::X8664PcWindowsMsvc => "x86_64",
690 Self::Aarch64PcWindowsMsvc => "ARM64",
691 Self::Linux | Self::X8664UnknownLinuxGnu => "x86_64",
692 Self::Macos | Self::Aarch64AppleDarwin => "arm64",
693 Self::I686PcWindowsMsvc => "x86",
694 Self::X8664AppleDarwin => "x86_64",
695 Self::Aarch64UnknownLinuxGnu => "aarch64",
696 Self::Aarch64UnknownLinuxMusl => "aarch64",
697 Self::X8664UnknownLinuxMusl => "x86_64",
698 Self::Riscv64UnknownLinuxGnu => "riscv64",
699 Self::X8664Manylinux2014 => "x86_64",
700 Self::X8664Manylinux217 => "x86_64",
701 Self::X8664Manylinux228 => "x86_64",
702 Self::X8664Manylinux231 => "x86_64",
703 Self::X8664Manylinux232 => "x86_64",
704 Self::X8664Manylinux233 => "x86_64",
705 Self::X8664Manylinux234 => "x86_64",
706 Self::X8664Manylinux235 => "x86_64",
707 Self::X8664Manylinux236 => "x86_64",
708 Self::X8664Manylinux237 => "x86_64",
709 Self::X8664Manylinux238 => "x86_64",
710 Self::X8664Manylinux239 => "x86_64",
711 Self::X8664Manylinux240 => "x86_64",
712 Self::Aarch64Manylinux2014 => "aarch64",
713 Self::Aarch64Manylinux217 => "aarch64",
714 Self::Aarch64Manylinux228 => "aarch64",
715 Self::Aarch64Manylinux231 => "aarch64",
716 Self::Aarch64Manylinux232 => "aarch64",
717 Self::Aarch64Manylinux233 => "aarch64",
718 Self::Aarch64Manylinux234 => "aarch64",
719 Self::Aarch64Manylinux235 => "aarch64",
720 Self::Aarch64Manylinux236 => "aarch64",
721 Self::Aarch64Manylinux237 => "aarch64",
722 Self::Aarch64Manylinux238 => "aarch64",
723 Self::Aarch64Manylinux239 => "aarch64",
724 Self::Aarch64Manylinux240 => "aarch64",
725 Self::Aarch64LinuxAndroid => "aarch64",
726 Self::X8664LinuxAndroid => "x86_64",
727 Self::Wasm32Pyodide2024 => "wasm32",
728 Self::Arm64Ios => "arm64",
729 Self::Arm64IosSimulator => "arm64",
730 Self::X8664IosSimulator => "x86_64",
731 }
732 }
733
734 pub fn platform_system(self) -> &'static str {
736 match self {
737 Self::Windows | Self::X8664PcWindowsMsvc => "Windows",
738 Self::Aarch64PcWindowsMsvc => "Windows",
739 Self::Linux | Self::X8664UnknownLinuxGnu => "Linux",
740 Self::Macos | Self::Aarch64AppleDarwin => "Darwin",
741 Self::I686PcWindowsMsvc => "Windows",
742 Self::X8664AppleDarwin => "Darwin",
743 Self::Aarch64UnknownLinuxGnu => "Linux",
744 Self::Aarch64UnknownLinuxMusl => "Linux",
745 Self::X8664UnknownLinuxMusl => "Linux",
746 Self::Riscv64UnknownLinuxGnu => "Linux",
747 Self::X8664Manylinux2014 => "Linux",
748 Self::X8664Manylinux217 => "Linux",
749 Self::X8664Manylinux228 => "Linux",
750 Self::X8664Manylinux231 => "Linux",
751 Self::X8664Manylinux232 => "Linux",
752 Self::X8664Manylinux233 => "Linux",
753 Self::X8664Manylinux234 => "Linux",
754 Self::X8664Manylinux235 => "Linux",
755 Self::X8664Manylinux236 => "Linux",
756 Self::X8664Manylinux237 => "Linux",
757 Self::X8664Manylinux238 => "Linux",
758 Self::X8664Manylinux239 => "Linux",
759 Self::X8664Manylinux240 => "Linux",
760 Self::Aarch64Manylinux2014 => "Linux",
761 Self::Aarch64Manylinux217 => "Linux",
762 Self::Aarch64Manylinux228 => "Linux",
763 Self::Aarch64Manylinux231 => "Linux",
764 Self::Aarch64Manylinux232 => "Linux",
765 Self::Aarch64Manylinux233 => "Linux",
766 Self::Aarch64Manylinux234 => "Linux",
767 Self::Aarch64Manylinux235 => "Linux",
768 Self::Aarch64Manylinux236 => "Linux",
769 Self::Aarch64Manylinux237 => "Linux",
770 Self::Aarch64Manylinux238 => "Linux",
771 Self::Aarch64Manylinux239 => "Linux",
772 Self::Aarch64Manylinux240 => "Linux",
773 Self::Aarch64LinuxAndroid => "Android",
774 Self::X8664LinuxAndroid => "Android",
775 Self::Wasm32Pyodide2024 => "Emscripten",
776 Self::Arm64Ios => "iOS",
777 Self::Arm64IosSimulator => "iOS",
778 Self::X8664IosSimulator => "iOS",
779 }
780 }
781
782 pub fn platform_version(self) -> &'static str {
784 match self {
785 Self::Windows | Self::X8664PcWindowsMsvc => "",
786 Self::Aarch64PcWindowsMsvc => "",
787 Self::Linux | Self::X8664UnknownLinuxGnu => "",
788 Self::Macos | Self::Aarch64AppleDarwin => "",
789 Self::I686PcWindowsMsvc => "",
790 Self::X8664AppleDarwin => "",
791 Self::Aarch64UnknownLinuxGnu => "",
792 Self::Aarch64UnknownLinuxMusl => "",
793 Self::X8664UnknownLinuxMusl => "",
794 Self::Riscv64UnknownLinuxGnu => "",
795 Self::X8664Manylinux2014 => "",
796 Self::X8664Manylinux217 => "",
797 Self::X8664Manylinux228 => "",
798 Self::X8664Manylinux231 => "",
799 Self::X8664Manylinux232 => "",
800 Self::X8664Manylinux233 => "",
801 Self::X8664Manylinux234 => "",
802 Self::X8664Manylinux235 => "",
803 Self::X8664Manylinux236 => "",
804 Self::X8664Manylinux237 => "",
805 Self::X8664Manylinux238 => "",
806 Self::X8664Manylinux239 => "",
807 Self::X8664Manylinux240 => "",
808 Self::Aarch64Manylinux2014 => "",
809 Self::Aarch64Manylinux217 => "",
810 Self::Aarch64Manylinux228 => "",
811 Self::Aarch64Manylinux231 => "",
812 Self::Aarch64Manylinux232 => "",
813 Self::Aarch64Manylinux233 => "",
814 Self::Aarch64Manylinux234 => "",
815 Self::Aarch64Manylinux235 => "",
816 Self::Aarch64Manylinux236 => "",
817 Self::Aarch64Manylinux237 => "",
818 Self::Aarch64Manylinux238 => "",
819 Self::Aarch64Manylinux239 => "",
820 Self::Aarch64Manylinux240 => "",
821 Self::Aarch64LinuxAndroid => "",
822 Self::X8664LinuxAndroid => "",
823 Self::Wasm32Pyodide2024 => "#1",
827 Self::Arm64Ios => "",
828 Self::Arm64IosSimulator => "",
829 Self::X8664IosSimulator => "",
830 }
831 }
832
833 pub fn platform_release(self) -> &'static str {
835 match self {
836 Self::Windows | Self::X8664PcWindowsMsvc => "",
837 Self::Aarch64PcWindowsMsvc => "",
838 Self::Linux | Self::X8664UnknownLinuxGnu => "",
839 Self::Macos | Self::Aarch64AppleDarwin => "",
840 Self::I686PcWindowsMsvc => "",
841 Self::X8664AppleDarwin => "",
842 Self::Aarch64UnknownLinuxGnu => "",
843 Self::Aarch64UnknownLinuxMusl => "",
844 Self::X8664UnknownLinuxMusl => "",
845 Self::Riscv64UnknownLinuxGnu => "",
846 Self::X8664Manylinux2014 => "",
847 Self::X8664Manylinux217 => "",
848 Self::X8664Manylinux228 => "",
849 Self::X8664Manylinux231 => "",
850 Self::X8664Manylinux232 => "",
851 Self::X8664Manylinux233 => "",
852 Self::X8664Manylinux234 => "",
853 Self::X8664Manylinux235 => "",
854 Self::X8664Manylinux236 => "",
855 Self::X8664Manylinux237 => "",
856 Self::X8664Manylinux238 => "",
857 Self::X8664Manylinux239 => "",
858 Self::X8664Manylinux240 => "",
859 Self::Aarch64Manylinux2014 => "",
860 Self::Aarch64Manylinux217 => "",
861 Self::Aarch64Manylinux228 => "",
862 Self::Aarch64Manylinux231 => "",
863 Self::Aarch64Manylinux232 => "",
864 Self::Aarch64Manylinux233 => "",
865 Self::Aarch64Manylinux234 => "",
866 Self::Aarch64Manylinux235 => "",
867 Self::Aarch64Manylinux236 => "",
868 Self::Aarch64Manylinux237 => "",
869 Self::Aarch64Manylinux238 => "",
870 Self::Aarch64Manylinux239 => "",
871 Self::Aarch64Manylinux240 => "",
872 Self::Aarch64LinuxAndroid => "",
873 Self::X8664LinuxAndroid => "",
874 Self::Wasm32Pyodide2024 => "3.1.58",
877 Self::Arm64Ios => "",
878 Self::Arm64IosSimulator => "",
879 Self::X8664IosSimulator => "",
880 }
881 }
882
883 pub fn os_name(self) -> &'static str {
885 match self {
886 Self::Windows | Self::X8664PcWindowsMsvc => "nt",
887 Self::Aarch64PcWindowsMsvc => "nt",
888 Self::Linux | Self::X8664UnknownLinuxGnu => "posix",
889 Self::Macos | Self::Aarch64AppleDarwin => "posix",
890 Self::I686PcWindowsMsvc => "nt",
891 Self::X8664AppleDarwin => "posix",
892 Self::Aarch64UnknownLinuxGnu => "posix",
893 Self::Aarch64UnknownLinuxMusl => "posix",
894 Self::X8664UnknownLinuxMusl => "posix",
895 Self::Riscv64UnknownLinuxGnu => "posix",
896 Self::X8664Manylinux2014 => "posix",
897 Self::X8664Manylinux217 => "posix",
898 Self::X8664Manylinux228 => "posix",
899 Self::X8664Manylinux231 => "posix",
900 Self::X8664Manylinux232 => "posix",
901 Self::X8664Manylinux233 => "posix",
902 Self::X8664Manylinux234 => "posix",
903 Self::X8664Manylinux235 => "posix",
904 Self::X8664Manylinux236 => "posix",
905 Self::X8664Manylinux237 => "posix",
906 Self::X8664Manylinux238 => "posix",
907 Self::X8664Manylinux239 => "posix",
908 Self::X8664Manylinux240 => "posix",
909 Self::Aarch64Manylinux2014 => "posix",
910 Self::Aarch64Manylinux217 => "posix",
911 Self::Aarch64Manylinux228 => "posix",
912 Self::Aarch64Manylinux231 => "posix",
913 Self::Aarch64Manylinux232 => "posix",
914 Self::Aarch64Manylinux233 => "posix",
915 Self::Aarch64Manylinux234 => "posix",
916 Self::Aarch64Manylinux235 => "posix",
917 Self::Aarch64Manylinux236 => "posix",
918 Self::Aarch64Manylinux237 => "posix",
919 Self::Aarch64Manylinux238 => "posix",
920 Self::Aarch64Manylinux239 => "posix",
921 Self::Aarch64Manylinux240 => "posix",
922 Self::Aarch64LinuxAndroid => "posix",
923 Self::X8664LinuxAndroid => "posix",
924 Self::Wasm32Pyodide2024 => "posix",
925 Self::Arm64Ios => "posix",
926 Self::Arm64IosSimulator => "posix",
927 Self::X8664IosSimulator => "posix",
928 }
929 }
930
931 pub fn sys_platform(self) -> &'static str {
933 match self {
934 Self::Windows | Self::X8664PcWindowsMsvc => "win32",
935 Self::Aarch64PcWindowsMsvc => "win32",
936 Self::Linux | Self::X8664UnknownLinuxGnu => "linux",
937 Self::Macos | Self::Aarch64AppleDarwin => "darwin",
938 Self::I686PcWindowsMsvc => "win32",
939 Self::X8664AppleDarwin => "darwin",
940 Self::Aarch64UnknownLinuxGnu => "linux",
941 Self::Aarch64UnknownLinuxMusl => "linux",
942 Self::X8664UnknownLinuxMusl => "linux",
943 Self::Riscv64UnknownLinuxGnu => "linux",
944 Self::X8664Manylinux2014 => "linux",
945 Self::X8664Manylinux217 => "linux",
946 Self::X8664Manylinux228 => "linux",
947 Self::X8664Manylinux231 => "linux",
948 Self::X8664Manylinux232 => "linux",
949 Self::X8664Manylinux233 => "linux",
950 Self::X8664Manylinux234 => "linux",
951 Self::X8664Manylinux235 => "linux",
952 Self::X8664Manylinux236 => "linux",
953 Self::X8664Manylinux237 => "linux",
954 Self::X8664Manylinux238 => "linux",
955 Self::X8664Manylinux239 => "linux",
956 Self::X8664Manylinux240 => "linux",
957 Self::Aarch64Manylinux2014 => "linux",
958 Self::Aarch64Manylinux217 => "linux",
959 Self::Aarch64Manylinux228 => "linux",
960 Self::Aarch64Manylinux231 => "linux",
961 Self::Aarch64Manylinux232 => "linux",
962 Self::Aarch64Manylinux233 => "linux",
963 Self::Aarch64Manylinux234 => "linux",
964 Self::Aarch64Manylinux235 => "linux",
965 Self::Aarch64Manylinux236 => "linux",
966 Self::Aarch64Manylinux237 => "linux",
967 Self::Aarch64Manylinux238 => "linux",
968 Self::Aarch64Manylinux239 => "linux",
969 Self::Aarch64Manylinux240 => "linux",
970 Self::Aarch64LinuxAndroid => "android",
971 Self::X8664LinuxAndroid => "android",
972 Self::Wasm32Pyodide2024 => "emscripten",
973 Self::Arm64Ios => "ios",
974 Self::Arm64IosSimulator => "ios",
975 Self::X8664IosSimulator => "ios",
976 }
977 }
978
979 pub fn manylinux_compatible(self) -> bool {
981 match self {
982 Self::Windows | Self::X8664PcWindowsMsvc => false,
983 Self::Aarch64PcWindowsMsvc => false,
984 Self::Linux | Self::X8664UnknownLinuxGnu => true,
985 Self::Macos | Self::Aarch64AppleDarwin => false,
986 Self::I686PcWindowsMsvc => false,
987 Self::X8664AppleDarwin => false,
988 Self::Aarch64UnknownLinuxGnu => true,
989 Self::Aarch64UnknownLinuxMusl => true,
990 Self::X8664UnknownLinuxMusl => true,
991 Self::Riscv64UnknownLinuxGnu => true,
992 Self::X8664Manylinux2014 => true,
993 Self::X8664Manylinux217 => true,
994 Self::X8664Manylinux228 => true,
995 Self::X8664Manylinux231 => true,
996 Self::X8664Manylinux232 => true,
997 Self::X8664Manylinux233 => true,
998 Self::X8664Manylinux234 => true,
999 Self::X8664Manylinux235 => true,
1000 Self::X8664Manylinux236 => true,
1001 Self::X8664Manylinux237 => true,
1002 Self::X8664Manylinux238 => true,
1003 Self::X8664Manylinux239 => true,
1004 Self::X8664Manylinux240 => true,
1005 Self::Aarch64Manylinux2014 => true,
1006 Self::Aarch64Manylinux217 => true,
1007 Self::Aarch64Manylinux228 => true,
1008 Self::Aarch64Manylinux231 => true,
1009 Self::Aarch64Manylinux232 => true,
1010 Self::Aarch64Manylinux233 => true,
1011 Self::Aarch64Manylinux234 => true,
1012 Self::Aarch64Manylinux235 => true,
1013 Self::Aarch64Manylinux236 => true,
1014 Self::Aarch64Manylinux237 => true,
1015 Self::Aarch64Manylinux238 => true,
1016 Self::Aarch64Manylinux239 => true,
1017 Self::Aarch64Manylinux240 => true,
1018 Self::Aarch64LinuxAndroid => false,
1019 Self::X8664LinuxAndroid => false,
1020 Self::Wasm32Pyodide2024 => false,
1021 Self::Arm64Ios => false,
1022 Self::Arm64IosSimulator => false,
1023 Self::X8664IosSimulator => false,
1024 }
1025 }
1026
1027 pub fn markers(self, base: &MarkerEnvironment) -> MarkerEnvironment {
1033 base.clone()
1034 .with_os_name(self.os_name())
1035 .with_platform_machine(self.platform_machine())
1036 .with_platform_system(self.platform_system())
1037 .with_sys_platform(self.sys_platform())
1038 .with_platform_release(self.platform_release())
1039 .with_platform_version(self.platform_version())
1040 }
1041}
1042
1043fn macos_deployment_target() -> Option<(u16, u16)> {
1045 let version = std::env::var(EnvVars::MACOSX_DEPLOYMENT_TARGET).ok()?;
1046 let mut parts = version.split('.');
1047
1048 let major = parts.next()?.parse::<u16>().ok()?;
1050
1051 let minor = parts.next().unwrap_or("0").parse::<u16>().ok()?;
1053
1054 Some((major, minor))
1055}
1056
1057fn ios_deployment_target() -> Option<(u16, u16)> {
1059 let version = std::env::var(EnvVars::IPHONEOS_DEPLOYMENT_TARGET).ok()?;
1060 let mut parts = version.split('.');
1061
1062 let major = parts.next()?.parse::<u16>().ok()?;
1064
1065 let minor = parts.next().unwrap_or("0").parse::<u16>().ok()?;
1067
1068 Some((major, minor))
1069}
1070
1071fn android_api_level() -> Option<u16> {
1073 let api_level_str = std::env::var(EnvVars::ANDROID_API_LEVEL).ok()?;
1074
1075 let api_level = api_level_str.parse::<u16>().ok()?;
1077
1078 Some(api_level)
1079}