[ARM] Add or update a number of costmodel tests. NFC
[llvm-complete.git] / utils / gn / build / BUILD.gn
bloba20cdb1f5afdbb447ec3a25529d86f04fcdc38e3
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     cflags_cc = [
46       "-std=c++11",
47       "-fvisibility-inlines-hidden",
48     ]
49   } else {
50     if (is_debug) {
51       cflags += [
52         "/Zi",
53         "/FS",
54       ]
55       ldflags += [ "/DEBUG" ]
56     }
57     if (is_optimized) {
58       cflags += [
59         "/O2",
60         "/Zc:inline",
61       ]
62       ldflags += [
63         "/OPT:REF",
64         "/OPT:ICF",
65       ]
66     }
67     defines += [
68       "_CRT_SECURE_NO_DEPRECATE",
69       "_CRT_SECURE_NO_WARNINGS",
70       "_CRT_NONSTDC_NO_DEPRECATE",
71       "_CRT_NONSTDC_NO_WARNINGS",
72       "_SCL_SECURE_NO_DEPRECATE",
73       "_SCL_SECURE_NO_WARNINGS",
75       "_HAS_EXCEPTIONS=0",
76       "_UNICODE",
77       "UNICODE",
78     ]
79     cflags += [ "/EHs-c-" ]
81     # The MSVC default value (1 MB) is not enough for parsing recursive C++
82     # templates in Clang.
83     ldflags += [ "/STACK:10000000" ]
84   }
86   # Warning setup.
87   if (host_os == "win" && !is_clang) {
88     cflags += [
89       # Suppress ''modifier' : used more than once' (__forceinline and inline).
90       "-wd4141",
92       # Suppress 'conversion from 'type1' to 'type2', possible loss of data'.
93       "-wd4244",
95       # Suppress 'conversion from 'size_t' to 'type', possible loss of data'.
96       "-wd4267",
98       # Suppress 'no matching operator delete found'.
99       "-wd4291",
101       # Suppress 'noexcept used with no exception handling mode specified'.
102       "-wd4577",
104       # Suppress 'destructor was implicitly defined as deleted'.
105       "-wd4624",
107       # Suppress 'unsafe mix of type <type> and type <type> in operation'.
108       "-wd4805",
109     ]
110   } else {
111     if (host_os == "win") {
112       cflags += [ "/W4" ]
113     } else {
114       cflags += [
115         "-Wall",
116         "-Wextra",
117       ]
118     }
119     cflags += [ "-Wno-unused-parameter" ]
120     if (is_clang) {
121       cflags += [
122         "-Wdelete-non-virtual-dtor",
123         "-Wstring-conversion",
124       ]
125     } else {
126       cflags += [
127         # GCC's -Wcomment complains about // comments ending with '\' if the
128         # next line is also a // comment.
129         "-Wno-comment",
131         # Disable gcc's potentially uninitialized use analysis as it presents
132         # lots of false positives.
133         "-Wno-maybe-uninitialized",
134       ]
135       cflags_cc += [
136         # The LLVM libraries have no stable C++ API, so -Wnoexcept-type is not
137         # useful.
138         "-Wno-noexcept-type",
139       ]
140     }
141     if (is_clang && use_goma) {
142       # goma converts all paths to lowercase on the server, breaking this
143       # warning.
144       cflags += [ "-Wno-nonportable-include-path" ]
145     }
146   }
148   # On Windows, the linker is not invoked through the compiler driver.
149   if (use_lld && host_os != "win") {
150     ldflags += [ "-fuse-ld=lld" ]
151   }
153   if (llvm_build_instrumented_coverage) {
154     cflags += [
155       "-fcoverage-mapping",
157       # Using an absolute path here is lame, but it's used at test execution
158       # time to generate the profiles, and lit doesn't specify a fixed folder
159       # for test execution -- so this is the only way to get all profiles into
160       # a single folder like llvm/utils/prepare-code-coverage-artifact.py
161       # expects.
162       "-fprofile-instr-generate=" +
163           rebase_path("$root_build_dir/profiles/%4m.profraw"),
164     ]
165     ldflags += [ "-fprofile-instr-generate" ]
166   }
169 config("no_exceptions") {
170   if (host_os != "win") {
171     cflags_cc = [ "-fno-exceptions" ]
172   }
175 config("no_rtti") {
176   if (current_os == "win") {
177     cflags_cc = [ "/GR-" ]
178   } else {
179     cflags_cc = [ "-fno-rtti" ]
180   }
183 # To make an archive that can be distributed, you need to remove this config and
184 # set complete_static_lib.
185 config("thin_archive") {
186   if (current_os != "win" && current_os != "mac") {
187     arflags = [ "-T" ]
188   }
191 config("llvm_code") {
192   include_dirs = [
193     "//llvm/include",
194     "$root_gen_dir/llvm/include",
195   ]
198 config("lld_code") {
199   include_dirs = [
200     "//lld/include",
201     "$root_gen_dir/lld/include",
202   ]
205 config("clang_code") {
206   if (host_os != "win") {
207     cflags = [ "-fno-strict-aliasing" ]
208   }
209   include_dirs = [
210     "//clang/include",
211     "$root_gen_dir/clang/include",
212   ]
215 config("crt_code") {
216   include_dirs = [ "//compiler-rt/lib" ]
217   cflags = [
218     "-fPIC",
219     "-funwind-tables",
220     "-gline-tables-only",
221   ]
224 config("warn_covered_switch_default") {
225   if (is_clang) {
226     cflags = [ "-Wcovered-switch-default" ]
227   }