diff options
Diffstat (limited to 'build.rs')
-rw-r--r-- | build.rs | 185 |
1 files changed, 0 insertions, 185 deletions
diff --git a/build.rs b/build.rs deleted file mode 100644 index ddade28..0000000 --- a/build.rs +++ /dev/null @@ -1,185 +0,0 @@ -use autocfg::AutoCfg; - -const CONST_THREAD_LOCAL_PROBE: &str = r#" -{ - thread_local! { - static MY_PROBE: usize = const { 10 }; - } - - MY_PROBE.with(|val| *val) -} -"#; - -const ADDR_OF_PROBE: &str = r#" -{ - let my_var = 10; - ::std::ptr::addr_of!(my_var) -} -"#; - -const CONST_MUTEX_NEW_PROBE: &str = r#" -{ - static MY_MUTEX: ::std::sync::Mutex<i32> = ::std::sync::Mutex::new(1); - *MY_MUTEX.lock().unwrap() -} -"#; - -const TARGET_HAS_ATOMIC_PROBE: &str = r#" -{ - #[cfg(target_has_atomic = "ptr")] - let _ = (); -} -"#; - -const TARGET_ATOMIC_U64_PROBE: &str = r#" -{ - #[allow(unused_imports)] - use std::sync::atomic::AtomicU64 as _; -} -"#; - -fn main() { - let mut enable_const_thread_local = false; - let mut enable_addr_of = false; - let mut enable_target_has_atomic = false; - let mut enable_const_mutex_new = false; - let mut target_needs_atomic_u64_fallback = false; - - match AutoCfg::new() { - Ok(ac) => { - // These checks prefer to call only `probe_rustc_version` if that is - // enough to determine whether the feature is supported. This is - // because the `probe_expression` call involves a call to rustc, - // which the `probe_rustc_version` call avoids. - - // Const-initialized thread locals were stabilized in 1.59. - if ac.probe_rustc_version(1, 60) { - enable_const_thread_local = true; - } else if ac.probe_rustc_version(1, 59) { - // This compiler claims to be 1.59, but there are some nightly - // compilers that claim to be 1.59 without supporting the - // feature. Explicitly probe to check if code using them - // compiles. - // - // The oldest nightly that supports the feature is 2021-12-06. - if ac.probe_expression(CONST_THREAD_LOCAL_PROBE) { - enable_const_thread_local = true; - } - } - - // The `addr_of` and `addr_of_mut` macros were stabilized in 1.51. - if ac.probe_rustc_version(1, 52) { - enable_addr_of = true; - } else if ac.probe_rustc_version(1, 51) { - // This compiler claims to be 1.51, but there are some nightly - // compilers that claim to be 1.51 without supporting the - // feature. Explicitly probe to check if code using them - // compiles. - // - // The oldest nightly that supports the feature is 2021-01-31. - if ac.probe_expression(ADDR_OF_PROBE) { - enable_addr_of = true; - } - } - - // The `target_has_atomic` cfg was stabilized in 1.60. - if ac.probe_rustc_version(1, 61) { - enable_target_has_atomic = true; - } else if ac.probe_rustc_version(1, 60) { - // This compiler claims to be 1.60, but there are some nightly - // compilers that claim to be 1.60 without supporting the - // feature. Explicitly probe to check if code using them - // compiles. - // - // The oldest nightly that supports the feature is 2022-02-11. - if ac.probe_expression(TARGET_HAS_ATOMIC_PROBE) { - enable_target_has_atomic = true; - } - } - - // If we can't tell using `target_has_atomic`, tell if the target - // has `AtomicU64` by trying to use it. - if !enable_target_has_atomic && !ac.probe_expression(TARGET_ATOMIC_U64_PROBE) { - target_needs_atomic_u64_fallback = true; - } - - // The `Mutex::new` method was made const in 1.63. - if ac.probe_rustc_version(1, 64) { - enable_const_mutex_new = true; - } else if ac.probe_rustc_version(1, 63) { - // This compiler claims to be 1.63, but there are some nightly - // compilers that claim to be 1.63 without supporting the - // feature. Explicitly probe to check if code using them - // compiles. - // - // The oldest nightly that supports the feature is 2022-06-20. - if ac.probe_expression(CONST_MUTEX_NEW_PROBE) { - enable_const_mutex_new = true; - } - } - } - - Err(e) => { - // If we couldn't detect the compiler version and features, just - // print a warning. This isn't a fatal error: we can still build - // Tokio, we just can't enable cfgs automatically. - println!( - "cargo:warning=tokio: failed to detect compiler features: {}", - e - ); - } - } - - if !enable_const_thread_local { - // To disable this feature on compilers that support it, you can - // explicitly pass this flag with the following environment variable: - // - // RUSTFLAGS="--cfg tokio_no_const_thread_local" - autocfg::emit("tokio_no_const_thread_local") - } - - if !enable_addr_of { - // To disable this feature on compilers that support it, you can - // explicitly pass this flag with the following environment variable: - // - // RUSTFLAGS="--cfg tokio_no_addr_of" - autocfg::emit("tokio_no_addr_of") - } - - if !enable_target_has_atomic { - // To disable this feature on compilers that support it, you can - // explicitly pass this flag with the following environment variable: - // - // RUSTFLAGS="--cfg tokio_no_target_has_atomic" - autocfg::emit("tokio_no_target_has_atomic") - } - - if !enable_const_mutex_new { - // To disable this feature on compilers that support it, you can - // explicitly pass this flag with the following environment variable: - // - // RUSTFLAGS="--cfg tokio_no_const_mutex_new" - autocfg::emit("tokio_no_const_mutex_new") - } - - if target_needs_atomic_u64_fallback { - // To disable this feature on compilers that support it, you can - // explicitly pass this flag with the following environment variable: - // - // RUSTFLAGS="--cfg tokio_no_atomic_u64" - autocfg::emit("tokio_no_atomic_u64") - } - - let target = ::std::env::var("TARGET").unwrap_or_default(); - - // We emit cfgs instead of using `target_family = "wasm"` that requires Rust 1.54. - // Note that these cfgs are unavailable in `Cargo.toml`. - if target.starts_with("wasm") { - autocfg::emit("tokio_wasm"); - if target.contains("wasi") { - autocfg::emit("tokio_wasi"); - } else { - autocfg::emit("tokio_wasm_not_wasi"); - } - } -} |