[InstCombine] Signed saturation patterns
[llvm-complete.git] / utils / gn / secondary / libcxx / src / BUILD.gn
blobf96e4e07246a70de2a410b5009b2e14a8d0e0eb0
1 import("//clang/runtimes.gni")
2 import("//llvm/utils/gn/build/symlink_or_copy.gni")
4 declare_args() {
5   # Build libc++ with definitions for operator new/delete.
6   libcxx_enable_new_delete_definitions = true
8   # Build libc++ as a shared library.
9   libcxx_enable_shared = true
11   # Build libc++ as a static library.
12   libcxx_enable_static = true
14   # Build filesystem as part of libc++fs.a.
15   libcxx_enable_filesystem = target_os != "win"
17   # Build libc++experimental.a.
18   libcxx_enable_experimental = true
20   # Use compiler-rt builtins.
21   libcxx_use_compiler_rt = true
23   # Use exceptions.
24   libcxx_enable_exceptions = true
26   # Use run time type information.
27   libcxx_enable_rtti = true
29   # Do not export any symbols from the static library.
30   libcxx_hermetic_static_library = true
32   # Use and install a linker script for the given ABI library.
33   libcxx_enable_abi_linker_script = true
36 config("cxx_config") {
37   include_dirs = [
38     "//libcxxabi/include",
39     "//libcxx/include",
40   ]
41   cflags = [
42     "-Wall",
43     "-Wextra",
44     "-W",
45     "-Wwrite-strings",
46     "-Wno-unused-parameter",
47     "-Wno-long-long",
48     "-Werror=return-type",
49     "-Wextra-semi",
50     "-Wno-user-defined-literals",
51     "-Wno-covered-switch-default",
52   ]
53   cflags_cc = [ "-nostdinc++" ]
54   if (target_os == "win") {
55     cflags_cc += [ "/std:c++11" ]
56   } else {
57     cflags_cc += [ "-std=c++11" ]
58   }
59   defines = [ "_LIBCPP_BUILDING_LIBRARY" ]
60   if (target_os == "win") {
61     cflags += [ "/Zl" ]
62     defines += [
63       # Ignore the -MSC_VER mismatch, as we may build
64       # with a different compatibility version.
65       "_ALLOW_MSC_VER_MISMATCH",
67       # Don't check the msvcprt iterator debug levels
68       # as we will define the iterator types; libc++
69       # uses a different macro to identify the debug
70       # level.
71       "_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH",
73       # We are building the c++ runtime, don't pull in
74       # msvcprt.
75       "_CRTBLD",
77       # Don't warn on the use of "deprecated"
78       # "insecure" functions which are standards
79       # specified.
80       "_CRT_SECURE_NO_WARNINGS",
82       # Use the ISO conforming behaviour for conversion
83       # in printf, scanf.
84       "_CRT_STDIO_ISO_WIDE_SPECIFIERS",
85     ]
86   }
87   if (!libcxx_enable_new_delete_definitions) {
88     defines += [ "_LIBCPP_DISABLE_NEW_DELETE_DEFINITIONS" ]
89   }
90   if (libcxx_enable_exceptions) {
91     if (current_os == "win") {
92       cflags_cc += [ "/EHsc" ]
93     }
94   } else {
95     if (current_os == "win") {
96       cflags_cc += [
97         "/EHs-",
98         "/EHa-",
99       ]
100     } else {
101       cflags_cc += [ "-fno-exceptions" ]
102     }
103     defines += [ "_LIBCPP_NO_EXCEPTIONS" ]
104   }
105   if (!libcxx_enable_rtti) {
106     if (current_os == "win") {
107       cflags_cc += [ "/GR-" ]
108     } else {
109       cflags_cc += [ "-fno-rtti" ]
110     }
111     defines += [ "_LIBCPP_NO_RTTI" ]
112   }
115 cxx_sources = [
116   "algorithm.cpp",
117   "any.cpp",
118   "bind.cpp",
119   "charconv.cpp",
120   "chrono.cpp",
121   "condition_variable.cpp",
122   "condition_variable_destructor.cpp",
123   "debug.cpp",
124   "exception.cpp",
125   "functional.cpp",
126   "future.cpp",
127   "hash.cpp",
128   "include/apple_availability.h",
129   "include/atomic_support.h",
130   "include/config_elast.h",
131   "include/refstring.h",
132   "ios.cpp",
133   "iostream.cpp",
134   "locale.cpp",
135   "memory.cpp",
136   "mutex.cpp",
137   "mutex_destructor.cpp",
138   "new.cpp",
139   "optional.cpp",
140   "random.cpp",
141   "regex.cpp",
142   "shared_mutex.cpp",
143   "stdexcept.cpp",
144   "string.cpp",
145   "strstream.cpp",
146   "support/runtime/exception_fallback.ipp",
147   "support/runtime/exception_glibcxx.ipp",
148   "support/runtime/exception_libcxxabi.ipp",
149   "support/runtime/exception_libcxxrt.ipp",
150   "support/runtime/exception_msvc.ipp",
151   "support/runtime/exception_pointer_cxxabi.ipp",
152   "support/runtime/exception_pointer_glibcxx.ipp",
153   "support/runtime/exception_pointer_msvc.ipp",
154   "support/runtime/exception_pointer_unimplemented.ipp",
155   "support/runtime/new_handler_fallback.ipp",
156   "support/runtime/stdexcept_default.ipp",
157   "support/runtime/stdexcept_vcruntime.ipp",
158   "system_error.cpp",
159   "thread.cpp",
160   "typeinfo.cpp",
161   "utility.cpp",
162   "valarray.cpp",
163   "variant.cpp",
164   "vector.cpp",
166 if (target_os == "win") {
167   cxx_sources += [
168     "support/win32/locale_win32.cpp",
169     "support/win32/support.cpp",
170     "support/win32/thread_win32.cpp",
171   ]
173 if (target_os == "solaris") {
174   cxx_sources += [
175     # This comment prevents `gn format` from putting the file on the same line
176     # as `sources +=`, for sync_source_lists_from_cmake.py.
177     "support/solaris/xlocale.cpp",
178   ]
180 if (libcxx_enable_filesystem) {
181   cxx_sources += [
182     "filesystem/directory_iterator.cpp",
183     "filesystem/filesystem_common.h",
184     "filesystem/operations.cpp",
185   ]
186   if (libcxx_use_compiler_rt) {
187     cxx_sources += [
188       # This comment prevents `gn format` from putting the file on the same line
189       # as `sources +=`, for sync_source_lists_from_cmake.py.
190       "filesystem/int128_builtins.cpp",
191     ]
192   }
195 if (libcxx_enable_shared) {
196   shared_library("cxx_shared") {
197     output_dir = runtimes_dir
198     output_name = "c++"
199     if (libcxx_enable_abi_linker_script) {
200       output_extension = "so.0"
201     }
202     if (target_os == "linux" || target_os == "mac") {
203       cflags = [ "-fPIC" ]
204       ldflags = [ "-nostdlib++" ]
205       libs = [
206         "dl",
207         "pthread",
208       ]
209     }
210     sources = cxx_sources
211     deps = [
212       "//compiler-rt/lib/builtins",
213       "//libcxxabi/src:cxxabi_shared",
214       "//libunwind/src:unwind_shared",
215     ]
216     configs += [ ":cxx_config" ]
217     configs -= [
218       "//llvm/utils/gn/build:no_exceptions",
219       "//llvm/utils/gn/build:no_rtti",
220     ]
221   }
223   symlink_or_copy("cxx_symlink") {
224     deps = [
225       ":cxx_shared",
226     ]
227     source = "libc++.so.0"
228     output = "$runtimes_dir/libc++.so"
229   }
231   if (libcxx_enable_abi_linker_script) {
232     action("cxx_linker_script") {
233       script = "//llvm/utils/gn/secondary/libcxx/utils/gen_link_script.py"
234       outputs = [
235         "$runtimes_dir/libc++.so",
236       ]
237       args = [
238         "--input",
239         rebase_path("$runtimes_dir/libc++.so.0", root_build_dir),
240         "--output",
241         rebase_path("$runtimes_dir/libc++.so", root_build_dir),
242         "c++abi",
243         "unwind",
244       ]
245       deps = [
246         ":cxx_symlink",
247       ]
248     }
249   }
252 if (libcxx_enable_static) {
253   static_library("cxx_static") {
254     output_dir = runtimes_dir
255     output_name = "c++"
256     complete_static_lib = true
257     configs -= [ "//llvm/utils/gn/build:thin_archive" ]
258     sources = cxx_sources
259     if (libcxx_hermetic_static_library) {
260       cflags = [ "-fvisibility=hidden" ]
261       if (libcxx_enable_new_delete_definitions) {
262         cflags_cc = [ "-fvisibility-global-new-delete-hidden" ]
263       }
264       defines = [ "_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS" ]
265     }
266     deps = [
267       "//compiler-rt/lib/builtins",
268       "//libcxxabi/src:cxxabi_static",
269       "//libunwind/src:unwind_static",
270     ]
271     configs += [ ":cxx_config" ]
272     configs -= [
273       "//llvm/utils/gn/build:no_exceptions",
274       "//llvm/utils/gn/build:no_rtti",
275     ]
276   }
279 if (libcxx_enable_experimental) {
280   static_library("cxx_experimental") {
281     output_dir = runtimes_dir
282     output_name = "c++experimental"
283     cflags_cc = [ "-std=c++14" ]
284     sources = [
285       "experimental/memory_resource.cpp",
286     ]
287     configs += [ ":cxx_config" ]
288     configs -= [
289       "//llvm/utils/gn/build:no_exceptions",
290       "//llvm/utils/gn/build:no_rtti",
291     ]
292   }
295 group("src") {
296   deps = []
297   if (libcxx_enable_shared) {
298     if (libcxx_enable_abi_linker_script) {
299       deps += [ ":cxx_linker_script" ]
300     } else {
301       deps += [ ":cxx_shared" ]
302     }
303   }
304   if (libcxx_enable_static) {
305     deps += [ ":cxx_static" ]
306   }
307   if (libcxx_enable_experimental) {
308     deps += [ ":cxx_experimental" ]
309   }