blob: f48477a7bb66508ca367bc8197d156c1162fd004 [file] [log] [blame]
Yi Kongce81bb62020-08-31 01:21:33 +08001use std::env;
2use std::process::Command;
3use std::str::{self, FromStr};
4
5// The rustc-cfg strings below are *not* public API. Please let us know by
6// opening a GitHub issue if your build environment requires some way to enable
7// these cfgs other than by executing our build script.
8fn main() {
9 let minor = match rustc_minor_version() {
10 Some(minor) => minor,
11 None => return,
12 };
13
14 let target = env::var("TARGET").unwrap();
15 let emscripten = target == "asmjs-unknown-emscripten" || target == "wasm32-unknown-emscripten";
16
17 // 128-bit integers disabled on Emscripten targets as Emscripten doesn't
18 // currently support integers larger than 64 bits.
19 if !emscripten {
20 println!("cargo:rustc-cfg=integer128");
21 }
22
23 // MaybeUninit<T> stabilized in Rust 1.36:
24 // https://blog.rust-lang.org/2019/07/04/Rust-1.36.0.html
25 if minor >= 36 {
26 println!("cargo:rustc-cfg=maybe_uninit");
27 }
28}
29
30fn rustc_minor_version() -> Option<u32> {
31 let rustc = env::var_os("RUSTC")?;
32 let output = Command::new(rustc).arg("--version").output().ok()?;
33 let version = str::from_utf8(&output.stdout).ok()?;
34 let mut pieces = version.split('.');
35 if pieces.next() != Some("rustc 1") {
36 return None;
37 }
38 let next = pieces.next()?;
39 u32::from_str(next).ok()
40}