[lit] Improve lit.Run class
[llvm-complete.git] / utils / gn / build / BUILD.gn
blob7ad429a50486cd66d38064ca8a38b0961e7f3be6
1 import("//llvm/utils/gn/build/buildflags.gni")
2 import("//llvm/utils/gn/build/mac_sdk.gni")
3 import("//llvm/utils/gn/build/toolchain/compiler.gni")
4 import("//llvm/utils/gn/build/toolchain/target_flags.gni")
6 declare_args() {
7   # Whether to build everything with coverage information.
8   # After building with this, run tests and then run
9   #    llvm/utils/prepare-code-coverage-artifact.py  \
10   #        .../llvm-profdata .../llvm-cov out/gn/profiles/ report/ \
11   #        out/gn/bin/llvm-undname ...`
12   # to generate a HTML report for the binaries passed in the last line.
13   llvm_build_instrumented_coverage = false
16 assert(!llvm_build_instrumented_coverage || is_clang,
17        "llvm_build_instrumented_coverage requires clang as host compiler")
19 config("compiler_defaults") {
20   defines = []
22   if (!llvm_enable_assertions) {
23     defines += [ "NDEBUG" ]
24   }
26   asmflags = target_flags
27   cflags = target_flags
28   ldflags = target_flags + target_ldflags
30   if (host_os == "mac" && clang_base_path != "") {
31     cflags += [
32       "-isysroot",
33       mac_sdk_path,
34     ]
35   }
37   if (host_os != "win") {
38     if (is_debug) {
39       cflags += [ "-g" ]
40     }
41     if (is_optimized) {
42       cflags += [ "-O3" ]
43     }
44     cflags += [ "-fdiagnostics-color" ]
45     if (use_lld) {
46       ldflags += [ "-Wl,--color-diagnostics" ]
47     }
48     cflags_cc = [
49       "-std=c++14",
50       "-fvisibility-inlines-hidden",
51     ]
52   } else {
53     if (is_debug) {
54       cflags += [
55         "/Zi",
56         "/FS",
57       ]
58       ldflags += [ "/DEBUG" ]
59     }
60     if (is_optimized) {
61       cflags += [
62         "/O2",
63         "/Zc:inline",
64       ]
65       ldflags += [
66         "/OPT:REF",
67         "/OPT:ICF",
68       ]
69     }
70     defines += [
71       "_CRT_SECURE_NO_DEPRECATE",
72       "_CRT_SECURE_NO_WARNINGS",
73       "_CRT_NONSTDC_NO_DEPRECATE",
74       "_CRT_NONSTDC_NO_WARNINGS",
75       "_SCL_SECURE_NO_DEPRECATE",
76       "_SCL_SECURE_NO_WARNINGS",
78       "_HAS_EXCEPTIONS=0",
79       "_UNICODE",
80       "UNICODE",
81     ]
82     cflags += [ "/EHs-c-" ]
84     # The MSVC default value (1 MB) is not enough for parsing recursive C++
85     # templates in Clang.
86     ldflags += [ "/STACK:10000000" ]
87   }
89   # Warning setup.
90   if (host_os == "win" && !is_clang) {
91     cflags += [
92       # Suppress ''modifier' : used more than once' (__forceinline and inline).
93       "-wd4141",
95       # Suppress 'conversion from 'type1' to 'type2', possible loss of data'.
96       "-wd4244",
98       # Suppress 'conversion from 'size_t' to 'type', possible loss of data'.
99       "-wd4267",
101       # Suppress 'no matching operator delete found'.
102       "-wd4291",
104       # Suppress 'noexcept used with no exception handling mode specified'.
105       "-wd4577",
107       # Suppress 'destructor was implicitly defined as deleted'.
108       "-wd4624",
110       # Suppress 'unsafe mix of type <type> and type <type> in operation'.
111       "-wd4805",
112     ]
113   } else {
114     if (host_os == "win") {
115       cflags += [ "/W4" ]
116     } else {
117       cflags += [
118         "-Wall",
119         "-Wextra",
120       ]
121     }
122     cflags += [ "-Wno-unused-parameter" ]
123     if (is_clang) {
124       cflags += [
125         "-Wdelete-non-virtual-dtor",
126         "-Wstring-conversion",
127       ]
128     } else {
129       cflags += [
130         # GCC's -Wcomment complains about // comments ending with '\' if the
131         # next line is also a // comment.
132         "-Wno-comment",
134         # Disable gcc's potentially uninitialized use analysis as it presents
135         # lots of false positives.
136         "-Wno-maybe-uninitialized",
137       ]
138       cflags_cc += [
139         # The LLVM libraries have no stable C++ API, so -Wnoexcept-type is not
140         # useful.
141         "-Wno-noexcept-type",
142       ]
143     }
144     if (is_clang && use_goma) {
145       # goma converts all paths to lowercase on the server, breaking this
146       # warning.
147       cflags += [ "-Wno-nonportable-include-path" ]
148     }
149   }
151   # On Windows, the linker is not invoked through the compiler driver.
152   if (use_lld && host_os != "win") {
153     ldflags += [ "-fuse-ld=lld" ]
154   }
156   if (llvm_build_instrumented_coverage) {
157     cflags += [
158       "-fcoverage-mapping",
160       # Using an absolute path here is lame, but it's used at test execution
161       # time to generate the profiles, and lit doesn't specify a fixed folder
162       # for test execution -- so this is the only way to get all profiles into
163       # a single folder like llvm/utils/prepare-code-coverage-artifact.py
164       # expects.
165       "-fprofile-instr-generate=" +
166           rebase_path("$root_build_dir/profiles/%4m.profraw"),
167     ]
168     ldflags += [ "-fprofile-instr-generate" ]
169   }
172 config("no_exceptions") {
173   if (host_os != "win") {
174     cflags_cc = [ "-fno-exceptions" ]
175   }
178 config("no_rtti") {
179   if (current_os == "win") {
180     cflags_cc = [ "/GR-" ]
181   } else {
182     cflags_cc = [ "-fno-rtti" ]
183   }
186 # To make an archive that can be distributed, you need to remove this config and
187 # set complete_static_lib.
188 config("thin_archive") {
189   if (current_os != "win" && current_os != "mac") {
190     arflags = [ "-T" ]
191   }
194 config("llvm_code") {
195   include_dirs = [
196     "//llvm/include",
197     "$root_gen_dir/llvm/include",
198   ]
201 config("lld_code") {
202   include_dirs = [
203     "//lld/include",
204     "$root_gen_dir/lld/include",
205   ]
208 config("clang_code") {
209   if (host_os != "win") {
210     cflags = [ "-fno-strict-aliasing" ]
211   }
212   include_dirs = [
213     "//clang/include",
214     "$root_gen_dir/clang/include",
215   ]
218 config("crt_code") {
219   include_dirs = [ "//compiler-rt/lib" ]
220   cflags = [
221     "-fPIC",
222     "-funwind-tables",
223     "-gline-tables-only",
224   ]
227 config("warn_covered_switch_default") {
228   if (is_clang) {
229     cflags = [ "-Wcovered-switch-default" ]
230   }