1 | //! Platform-dependent platform abstraction. |
2 | //! |
3 | //! The `std::sys` module is the abstracted interface through which |
4 | //! `std` talks to the underlying operating system. It has different |
5 | //! implementations for different operating system families, today |
6 | //! just Unix and Windows, and initial support for Redox. |
7 | //! |
8 | //! The centralization of platform-specific code in this module is |
9 | //! enforced by the "platform abstraction layer" tidy script in |
10 | //! `tools/tidy/src/pal.rs`. |
11 | //! |
12 | //! This module is closely related to the platform-independent system |
13 | //! integration code in `std::sys_common`. See that module's |
14 | //! documentation for details. |
15 | //! |
16 | //! In the future it would be desirable for the independent |
17 | //! implementations of this module to be extracted to their own crates |
18 | //! that `std` can link to, thus enabling their implementation |
19 | //! out-of-tree via crate replacement. Though due to the complex |
20 | //! inter-dependencies within `std` that will be a challenging goal to |
21 | //! achieve. |
22 | |
23 | #![allow (missing_debug_implementations)] |
24 | |
25 | pub mod common; |
26 | |
27 | cfg_if::cfg_if! { |
28 | if #[cfg(unix)] { |
29 | mod unix; |
30 | pub use self::unix::*; |
31 | } else if #[cfg(windows)] { |
32 | mod windows; |
33 | pub use self::windows::*; |
34 | } else if #[cfg(target_os = "solid_asp3" )] { |
35 | mod solid; |
36 | pub use self::solid::*; |
37 | } else if #[cfg(target_os = "hermit" )] { |
38 | mod hermit; |
39 | pub use self::hermit::*; |
40 | } else if #[cfg(target_os = "trusty" )] { |
41 | mod trusty; |
42 | pub use self::trusty::*; |
43 | } else if #[cfg(all(target_os = "wasi" , target_env = "p2" ))] { |
44 | mod wasip2; |
45 | pub use self::wasip2::*; |
46 | } else if #[cfg(target_os = "wasi" )] { |
47 | mod wasi; |
48 | pub use self::wasi::*; |
49 | } else if #[cfg(target_family = "wasm" )] { |
50 | mod wasm; |
51 | pub use self::wasm::*; |
52 | } else if #[cfg(target_os = "xous" )] { |
53 | mod xous; |
54 | pub use self::xous::*; |
55 | } else if #[cfg(target_os = "uefi" )] { |
56 | mod uefi; |
57 | pub use self::uefi::*; |
58 | } else if #[cfg(all(target_vendor = "fortanix" , target_env = "sgx" ))] { |
59 | mod sgx; |
60 | pub use self::sgx::*; |
61 | } else if #[cfg(target_os = "teeos" )] { |
62 | mod teeos; |
63 | pub use self::teeos::*; |
64 | } else if #[cfg(target_os = "zkvm" )] { |
65 | mod zkvm; |
66 | pub use self::zkvm::*; |
67 | } else { |
68 | mod unsupported; |
69 | pub use self::unsupported::*; |
70 | } |
71 | } |
72 | |
73 | cfg_if::cfg_if! { |
74 | // Fuchsia components default to full backtrace. |
75 | if #[cfg(target_os = "fuchsia" )] { |
76 | pub const FULL_BACKTRACE_DEFAULT: bool = true; |
77 | } else { |
78 | pub const FULL_BACKTRACE_DEFAULT: bool = false; |
79 | } |
80 | } |
81 | |
82 | #[cfg (not(target_os = "uefi" ))] |
83 | pub type RawOsError = i32; |
84 | |