run_make_support/external_deps/c_cxx_compiler/extras.rs
1use crate::{is_msvc, is_windows, uname};
2
3/// `EXTRACFLAGS`
4pub fn extra_c_flags() -> Vec<&'static str> {
5 // Adapted from tools.mk (trimmed):
6 //
7 // ```makefile
8 // ifdef IS_WINDOWS
9 // ifdef IS_MSVC
10 // EXTRACFLAGS := ws2_32.lib userenv.lib advapi32.lib bcrypt.lib ntdll.lib synchronization.lib
11 // else
12 // EXTRACFLAGS := -lws2_32 -luserenv -lbcrypt -lntdll -lsynchronization
13 // endif
14 // else
15 // ifeq ($(UNAME),Darwin)
16 // EXTRACFLAGS := -lresolv
17 // else
18 // ifeq ($(UNAME),FreeBSD)
19 // EXTRACFLAGS := -lm -lpthread -lgcc_s
20 // else
21 // ifeq ($(UNAME),SunOS)
22 // EXTRACFLAGS := -lm -lpthread -lposix4 -lsocket -lresolv
23 // else
24 // ifeq ($(UNAME),OpenBSD)
25 // EXTRACFLAGS := -lm -lpthread -lc++abi
26 // else
27 // EXTRACFLAGS := -lm -lrt -ldl -lpthread
28 // endif
29 // endif
30 // endif
31 // endif
32 // endif
33 // ```
34
35 if is_windows() {
36 if is_msvc() {
37 vec![
38 "ws2_32.lib",
39 "userenv.lib",
40 "advapi32.lib",
41 "bcrypt.lib",
42 "ntdll.lib",
43 "synchronization.lib",
44 ]
45 } else {
46 vec!["-lws2_32", "-luserenv", "-lbcrypt", "-lntdll", "-lsynchronization"]
47 }
48 } else {
49 match uname() {
50 n if n.contains("Darwin") => vec!["-lresolv"],
51 n if n.contains("FreeBSD") => vec!["-lm", "-lpthread", "-lgcc_s"],
52 n if n.contains("SunOS") => {
53 vec!["-lm", "-lpthread", "-lposix4", "-lsocket", "-lresolv"]
54 }
55 n if n.contains("OpenBSD") => vec!["-lm", "-lpthread", "-lc++abi"],
56 _ => vec!["-lm", "-lrt", "-ldl", "-lpthread"],
57 }
58 }
59}
60
61/// `EXTRACXXFLAGS`
62pub fn extra_cxx_flags() -> Vec<&'static str> {
63 // Adapted from tools.mk (trimmed):
64 //
65 // ```makefile
66 // ifdef IS_WINDOWS
67 // ifdef IS_MSVC
68 // else
69 // EXTRACXXFLAGS := -lstdc++
70 // endif
71 // else
72 // ifeq ($(UNAME),Darwin)
73 // EXTRACXXFLAGS := -lc++
74 // else
75 // ifeq ($(UNAME),FreeBSD)
76 // else
77 // ifeq ($(UNAME),SunOS)
78 // else
79 // ifeq ($(UNAME),OpenBSD)
80 // else
81 // EXTRACXXFLAGS := -lstdc++
82 // endif
83 // endif
84 // endif
85 // endif
86 // endif
87 // ```
88 if is_windows() {
89 if is_msvc() { vec![] } else { vec!["-lstdc++"] }
90 } else {
91 match &uname()[..] {
92 "Darwin" => vec!["-lc++"],
93 "FreeBSD" | "SunOS" | "OpenBSD" => vec![],
94 _ => vec!["-lstdc++"],
95 }
96 }
97}