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}