ya.make 5.7 KB

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