run_make_support/external_deps/c_cxx_compiler/
extras.rs1use 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
12pub 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
49pub 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}