ya.make 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. # Previously, it was imported using devtools/yamaker/ym2. Now it is not under automation
  2. LIBRARY()
  3. LICENSE(
  4. Apache-2.0 AND
  5. Apache-2.0 WITH LLVM-exception AND
  6. BSL-1.0 AND
  7. MIT AND
  8. NCSA AND
  9. Public-Domain AND
  10. Unicode
  11. )
  12. LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
  13. VERSION(2023-10-05)
  14. ORIGINAL_SOURCE(https://github.com/llvm/llvm-project/archive/dc129d6f715cf83a2072fc8de8b4e4c70bca6935.tar.gz)
  15. SUBSCRIBER(
  16. halyavin
  17. somov
  18. g:cpp-committee
  19. g:cpp-contrib
  20. )
  21. ADDINCL(
  22. GLOBAL contrib/libs/cxxsupp/libcxxcuda11/include
  23. contrib/libs/cxxsupp/libcxxcuda11/src
  24. )
  25. CXXFLAGS(-D_LIBCPP_BUILDING_LIBRARY)
  26. IF (OS_ANDROID)
  27. DEFAULT(CXX_RT "default")
  28. IF (ARCH_I686 OR ARCH_ARM7)
  29. # 32-bit architectures require additional libandroid_support.so to be linked
  30. # We add --start-group / --end-group statements due to the issue in NDK < r22.
  31. # See: https://github.com/android/ndk/issues/1130
  32. #
  33. # Though these statements are not respected by LLD, they might have sense for other linkers.
  34. LDFLAGS(
  35. -Wl,--start-group
  36. -lc++abi
  37. -landroid_support
  38. -Wl,--end-group
  39. )
  40. ELSE()
  41. LDFLAGS(-lc++abi)
  42. ENDIF()
  43. CFLAGS(
  44. -DLIBCXX_BUILDING_LIBCXXABI
  45. )
  46. # Take cxxabi implementation from system.
  47. ELSEIF (OS_IOS)
  48. LDFLAGS(-lc++abi)
  49. CFLAGS(
  50. -DLIBCXX_BUILDING_LIBCXXABI
  51. )
  52. # Yet take builtins library from Arcadia
  53. PEERDIR(
  54. contrib/libs/cxxsupp/builtins
  55. )
  56. ELSEIF (OS_LINUX OR OS_DARWIN)
  57. IF (ARCH_ARM7)
  58. # XXX: libcxxrt support for ARM is currently broken
  59. DEFAULT(CXX_RT "glibcxx_static")
  60. # ARM7 OS_SDK has old libstdc++ without aligned allocation support
  61. CFLAGS(
  62. GLOBAL -fno-aligned-new
  63. )
  64. ELSE()
  65. DEFAULT(CXX_RT "libcxxrt")
  66. ENDIF()
  67. IF (MUSL)
  68. PEERDIR(
  69. contrib/libs/musl/include
  70. )
  71. ENDIF()
  72. ELSEIF (OS_WINDOWS)
  73. SRCS(
  74. src/support/win32/locale_win32.cpp
  75. src/support/win32/support.cpp
  76. src/support/win32/atomic_win32.cpp
  77. src/support/win32/new_win32.cpp
  78. src/support/win32/thread_win32.cpp
  79. )
  80. CFLAGS(
  81. GLOBAL -D_LIBCPP_VASPRINTF_DEFINED
  82. GLOBAL -D_WCHAR_H_CPLUSPLUS_98_CONFORMANCE_
  83. )
  84. IF (CLANG_CL)
  85. PEERDIR(
  86. contrib/libs/cxxsupp/builtins
  87. )
  88. ENDIF()
  89. ELSEIF (OS_EMSCRIPTEN)
  90. DEFAULT(CXX_RT "libcxxabi")
  91. LDFLAGS(-Wl,-Bdynamic)
  92. CXXFLAGS(
  93. -Wno-unknown-pragmas
  94. -nostdinc++
  95. )
  96. PEERDIR(
  97. contrib/restricted/emscripten/include
  98. )
  99. ELSE()
  100. DEFAULT(CXX_RT "glibcxx_static")
  101. CXXFLAGS(
  102. -Wno-unknown-pragmas
  103. -nostdinc++
  104. )
  105. ENDIF()
  106. IF (OS_LINUX)
  107. EXTRALIBS(-lpthread)
  108. ENDIF()
  109. IF (CLANG)
  110. CXXFLAGS(GLOBAL -nostdinc++)
  111. ENDIF()
  112. # The CXX_RT variable controls which C++ runtime is used.
  113. # * libcxxrt - https://github.com/libcxxrt/libcxxrt library stored in Arcadia
  114. # * glibcxx_static - GNU C++ Library runtime with static linkage
  115. # * glibcxx_dynamic - GNU C++ Library runtime with dynamic linkage
  116. # * default - default C++ runtime provided by the compiler driver
  117. #
  118. # All glibcxx* runtimes are taken from system/compiler SDK
  119. DEFAULT(CXX_RT "default")
  120. DISABLE(NEED_GLIBCXX_CXX17_SHIMS)
  121. DISABLE(NEED_CXX_RT_ADDINCL)
  122. IF (CXX_RT == "libcxxrt")
  123. PEERDIR(
  124. contrib/libs/cxxsupp/libcxxabi-parts
  125. contrib/libs/cxxsupp/libcxxrt
  126. contrib/libs/cxxsupp/builtins
  127. )
  128. ADDINCL(
  129. GLOBAL contrib/libs/cxxsupp/libcxxrt/include
  130. )
  131. CFLAGS(
  132. GLOBAL -DLIBCXX_BUILDING_LIBCXXRT
  133. )
  134. # These builtins are equivalent to clang -rtlib=compiler_rt and
  135. # are needed by potentially any code generated by clang.
  136. # With glibcxx runtime, builtins are provided by libgcc
  137. ELSEIF (CXX_RT == "glibcxx_static")
  138. LDFLAGS(
  139. -Wl,-Bstatic
  140. -lsupc++
  141. -lgcc
  142. -lgcc_eh
  143. -Wl,-Bdynamic
  144. )
  145. CXXFLAGS(-D__GLIBCXX__=1)
  146. ENABLE(NEED_GLIBCXX_CXX17_SHIMS)
  147. ENABLE(NEED_CXX_RT_ADDINCL)
  148. CFLAGS(
  149. GLOBAL -DLIBCXX_BUILDING_LIBGCC
  150. )
  151. ELSEIF (CXX_RT == "glibcxx_dynamic")
  152. LDFLAGS(
  153. -lgcc_s
  154. -lstdc++
  155. )
  156. CXXFLAGS(-D__GLIBCXX__=1)
  157. CFLAGS(
  158. GLOBAL -DLIBCXX_BUILDING_LIBGCC
  159. )
  160. ENABLE(NEED_GLIBCXX_CXX17_SHIMS)
  161. ENABLE(NEED_CXX_RT_ADDINCL)
  162. ELSEIF (CXX_RT == "libcxxabi")
  163. PEERDIR(
  164. contrib/libs/cxxsupp/libcxxabi
  165. )
  166. ADDINCL(
  167. GLOBAL contrib/libs/cxxsupp/libcxxabi/include
  168. )
  169. CFLAGS(
  170. GLOBAL -DLIBCXX_BUILDING_LIBCXXABI
  171. )
  172. ELSEIF (CXX_RT == "default")
  173. # Do nothing
  174. ELSE()
  175. MESSAGE(FATAL_ERROR "Unexpected CXX_RT value: ${CXX_RT}")
  176. ENDIF()
  177. IF (NEED_GLIBCXX_CXX17_SHIMS)
  178. IF (GCC)
  179. # Assume GCC is bundled with a modern enough version of C++ runtime
  180. ELSEIF (OS_SDK == "ubuntu-12" OR OS_SDK == "ubuntu-14" OR OS_SDK == "ubuntu-16")
  181. # Prior to ubuntu-18, system C++ runtime for C++17 is incomplete
  182. # and requires std::uncaught_exceptions() to be implemented.
  183. SRCS(
  184. glibcxx_eh_cxx17.cpp
  185. )
  186. ENDIF()
  187. ENDIF()
  188. IF (NEED_CXX_RT_ADDINCL)
  189. # FIXME:
  190. # This looks extremely weird and we have to use cxxabi.h from libsupc++ instead.
  191. # This ADDINCL is placed here just to fix the status quo
  192. ADDINCL(
  193. GLOBAL contrib/libs/cxxsupp/libcxxrt/include
  194. )
  195. ENDIF()
  196. NO_UTIL()
  197. NO_RUNTIME()
  198. NO_COMPILER_WARNINGS()
  199. IF (FUZZING)
  200. NO_SANITIZE()
  201. NO_SANITIZE_COVERAGE()
  202. ENDIF()
  203. SRCS(
  204. src/algorithm.cpp
  205. src/any.cpp
  206. src/atomic.cpp
  207. src/barrier.cpp
  208. src/bind.cpp
  209. src/charconv.cpp
  210. src/chrono.cpp
  211. src/condition_variable.cpp
  212. src/condition_variable_destructor.cpp
  213. src/error_category.cpp
  214. src/exception.cpp
  215. src/filesystem/directory_entry.cpp
  216. src/filesystem/directory_iterator.cpp
  217. src/filesystem/filesystem_clock.cpp
  218. src/filesystem/filesystem_error.cpp
  219. src/filesystem/operations.cpp
  220. src/filesystem/path.cpp
  221. src/functional.cpp
  222. src/future.cpp
  223. src/hash.cpp
  224. src/ios.cpp
  225. src/ios.instantiations.cpp
  226. src/iostream.cpp
  227. src/legacy_pointer_safety.cpp
  228. src/locale.cpp
  229. src/memory.cpp
  230. src/memory_resource.cpp
  231. src/mutex.cpp
  232. src/mutex_destructor.cpp
  233. src/optional.cpp
  234. src/print.cpp
  235. src/random.cpp
  236. src/random_shuffle.cpp
  237. src/regex.cpp
  238. src/ryu/d2fixed.cpp
  239. src/ryu/d2s.cpp
  240. src/ryu/f2s.cpp
  241. src/shared_mutex.cpp
  242. src/stdexcept.cpp
  243. src/string.cpp
  244. src/strstream.cpp
  245. src/system_error.cpp
  246. src/thread.cpp
  247. src/typeinfo.cpp
  248. src/valarray.cpp
  249. src/variant.cpp
  250. src/vector.cpp
  251. src/verbose_abort.cpp
  252. )
  253. IF (NOT OS_WINDOWS)
  254. SRCS(
  255. src/new.cpp
  256. src/new_handler.cpp
  257. src/new_helpers.cpp
  258. )
  259. ENDIF()
  260. IF (OS_LINUX)
  261. SRCS(
  262. src/tz.cpp
  263. src/tzdb_list.cpp
  264. )
  265. ENDIF()
  266. END()