ya.make 6.4 KB

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