run_make_support/external_deps/c_cxx_compiler/
extras.rs

1use crate::{is_arm64ec, is_win7, is_windows, is_windows_msvc, uname};
2
3fn get_windows_msvc_libs() -> Vec<&'static str> {
4    let mut libs =
5        vec!["ws2_32.lib", "userenv.lib", "bcrypt.lib", "ntdll.lib", "synchronization.lib"];
6    if is_win7() {
7        libs.push("advapi32.lib");
8    }
9    libs
10}
11
12/// `EXTRACFLAGS`
13pub fn extra_c_flags() -> Vec<&'static str> {
14    if is_windows() {
15        if is_windows_msvc() {
16            let mut args = get_windows_msvc_libs();
17            if is_arm64ec() {
18                args.push("/arm64EC");
19            }
20            args
21        } else {
22            vec!["-lws2_32", "-luserenv", "-lbcrypt", "-lntdll", "-lsynchronization"]
23        }
24    } else {
25        match uname() {
26            n if n.contains("Darwin") => vec!["-lresolv"],
27            n if n.contains("FreeBSD") => vec!["-lm", "-lpthread", "-lgcc_s"],
28            n if n.contains("SunOS") => {
29                vec!["-lm", "-lpthread", "-lposix4", "-lsocket", "-lresolv"]
30            }
31            n if n.contains("OpenBSD") => vec!["-lm", "-lpthread", "-lc++abi"],
32            _ => vec!["-lm", "-lrt", "-ldl", "-lpthread"],
33        }
34    }
35}
36
37pub fn extra_linker_flags() -> Vec<&'static str> {
38    if is_windows_msvc() {
39        let mut args = get_windows_msvc_libs();
40        if is_arm64ec() {
41            args.push("/MACHINE:ARM64EC");
42        }
43        args
44    } else {
45        vec![]
46    }
47}
48
49/// `EXTRACXXFLAGS`
50pub fn extra_cxx_flags() -> Vec<&'static str> {
51    if is_windows() {
52        if is_windows_msvc() { vec![] } else { vec!["-lstdc++"] }
53    } else {
54        match &uname()[..] {
55            "Darwin" => vec!["-lc++"],
56            "FreeBSD" | "SunOS" | "OpenBSD" => vec![],
57            _ => vec!["-lstdc++"],
58        }
59    }
60}