ya.make 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. LIBRARY()
  2. LICENSE(
  3. Apache-2.0 AND
  4. Apache-2.0 WITH LLVM-exception AND
  5. BSD-2-Clause AND
  6. MIT AND
  7. NCSA
  8. )
  9. LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
  10. VERSION(2021-04-02-7959d59028dd126416cdf10dbbd22162922e1336)
  11. OWNER(
  12. halyavin
  13. somov
  14. g:cpp-committee
  15. g:cpp-contrib
  16. )
  17. ADDINCL(
  18. GLOBAL contrib/libs/cxxsupp/libcxx/include
  19. )
  20. CXXFLAGS(-D_LIBCPP_BUILDING_LIBRARY)
  21. IF (OS_ANDROID)
  22. DEFAULT(CXX_RT "default")
  23. IF (ARCH_I686 OR ARCH_ARM7)
  24. # 32-bit architectures require additional libandroid_support.so to be linked
  25. # We add --start-group / --end-group statements due to the issue in NDK < r22.
  26. # See: https://github.com/android/ndk/issues/1130
  27. #
  28. # Though these statements are not respected by LLD, they might have sense for other linkers.
  29. LDFLAGS(
  30. -Wl,--start-group
  31. -lc++abi
  32. -landroid_support
  33. -Wl,--end-group
  34. )
  35. ELSE()
  36. LDFLAGS(-lc++abi)
  37. ENDIF()
  38. CFLAGS(
  39. -DLIBCXX_BUILDING_LIBCXXABI
  40. )
  41. ELSEIF (OS_IOS)
  42. # Take cxxabi implementation from system.
  43. LDFLAGS(-lc++abi)
  44. CFLAGS(
  45. -DLIBCXX_BUILDING_LIBCXXABI
  46. )
  47. # Yet take builtins library from Arcadia
  48. PEERDIR(
  49. contrib/libs/cxxsupp/builtins
  50. )
  51. ELSEIF (CLANG OR MUSL OR OS_DARWIN OR USE_LTO)
  52. IF (ARCH_ARM7)
  53. # XXX: libcxxrt support for ARM is currently broken
  54. DEFAULT(CXX_RT "glibcxx_static")
  55. # ARM7 OS_SDK has old libstdc++ without aligned allocation support
  56. CFLAGS(
  57. GLOBAL -fno-aligned-new
  58. )
  59. ELSE()
  60. DEFAULT(CXX_RT "libcxxrt")
  61. ENDIF()
  62. IF (MUSL)
  63. PEERDIR(
  64. contrib/libs/musl/include
  65. )
  66. ENDIF()
  67. ELSEIF (OS_WINDOWS)
  68. SRCS(
  69. src/support/win32/locale_win32.cpp
  70. src/support/win32/support.cpp
  71. src/support/win32/atomic_win32.cpp
  72. src/support/win32/new_win32.cpp
  73. src/support/win32/thread_win32.cpp
  74. )
  75. CFLAGS(
  76. GLOBAL -D_LIBCPP_VASPRINTF_DEFINED
  77. GLOBAL -D_WCHAR_H_CPLUSPLUS_98_CONFORMANCE_
  78. )
  79. IF (CLANG_CL)
  80. PEERDIR(
  81. contrib/libs/cxxsupp/builtins
  82. )
  83. ENDIF()
  84. ELSE()
  85. DEFAULT(CXX_RT "glibcxx_static")
  86. CXXFLAGS(
  87. -Wno-unknown-pragmas
  88. -nostdinc++
  89. )
  90. ENDIF()
  91. IF (OS_LINUX)
  92. EXTRALIBS(-lpthread)
  93. ENDIF()
  94. IF (CLANG)
  95. CFLAGS(
  96. GLOBAL -nostdinc++
  97. )
  98. ENDIF()
  99. # The CXX_RT variable controls which C++ runtime is used.
  100. # * libcxxrt - https://github.com/pathscale/libcxxrt library stored in Arcadia
  101. # * glibcxx - GNU C++ Library runtime with default (static) linkage
  102. # * glibcxx_static - GNU C++ Library runtime with static linkage
  103. # * glibcxx_dynamic - GNU C++ Library runtime with dynamic linkage
  104. # * glibcxx_driver - GNU C++ Library runtime provided by the compiler driver
  105. # * default - default C++ runtime provided by the compiler driver
  106. #
  107. # All glibcxx* runtimes are taken from system/compiler SDK
  108. DEFAULT(CXX_RT "default")
  109. DISABLE(NEED_GLIBCXX_CXX17_SHIMS)
  110. IF (CXX_RT == "libcxxrt")
  111. PEERDIR(
  112. contrib/libs/cxxsupp/libcxxabi-parts
  113. contrib/libs/cxxsupp/libcxxrt
  114. contrib/libs/cxxsupp/builtins
  115. )
  116. ADDINCL(
  117. contrib/libs/cxxsupp/libcxxrt
  118. )
  119. CFLAGS(
  120. GLOBAL -DLIBCXX_BUILDING_LIBCXXRT
  121. )
  122. # These builtins are equivalent to clang -rtlib=compiler_rt and
  123. # are needed by potentially any code generated by clang.
  124. # With glibcxx runtime, builtins are provided by libgcc
  125. ELSEIF (CXX_RT == "glibcxx" OR CXX_RT == "glibcxx_static")
  126. LDFLAGS(
  127. -Wl,-Bstatic
  128. -lsupc++
  129. -lgcc
  130. -lgcc_eh
  131. -Wl,-Bdynamic
  132. )
  133. CXXFLAGS(-D__GLIBCXX__=1)
  134. ENABLE(NEED_GLIBCXX_CXX17_SHIMS)
  135. CFLAGS(
  136. GLOBAL -DLIBCXX_BUILDING_LIBGCC
  137. )
  138. ELSEIF (CXX_RT == "glibcxx_dynamic")
  139. LDFLAGS(
  140. -lgcc_s
  141. -lstdc++
  142. )
  143. CXXFLAGS(-D__GLIBCXX__=1)
  144. CFLAGS(
  145. GLOBAL -DLIBCXX_BUILDING_LIBGCC
  146. )
  147. ENABLE(NEED_GLIBCXX_CXX17_SHIMS)
  148. ELSEIF (CXX_RT == "glibcxx_driver")
  149. CXXFLAGS(-D__GLIBCXX__=1)
  150. ELSEIF (CXX_RT == "default")
  151. # Do nothing
  152. ELSE()
  153. MESSAGE(FATAL_ERROR "Unexpected CXX_RT value: ${CXX_RT}")
  154. ENDIF()
  155. IF (NEED_GLIBCXX_CXX17_SHIMS)
  156. IF (GCC)
  157. # Assume GCC is bundled with a modern enough version of C++ runtime
  158. ELSEIF (OS_SDK == "ubuntu-12" OR OS_SDK == "ubuntu-14" OR OS_SDK == "ubuntu-16")
  159. # Prior to ubuntu-18, system C++ runtime for C++17 is incomplete
  160. SRCS(
  161. glibcxx_eh_cxx17.cpp
  162. )
  163. ENDIF()
  164. ENDIF()
  165. NO_UTIL()
  166. NO_RUNTIME()
  167. NO_COMPILER_WARNINGS()
  168. IF (FUZZING)
  169. NO_SANITIZE()
  170. NO_SANITIZE_COVERAGE()
  171. ENDIF()
  172. SRCS(
  173. src/algorithm.cpp
  174. src/any.cpp
  175. src/atomic.cpp
  176. src/barrier.cpp
  177. src/bind.cpp
  178. src/charconv.cpp
  179. src/chrono.cpp
  180. src/condition_variable.cpp
  181. src/condition_variable_destructor.cpp
  182. src/debug.cpp
  183. src/exception.cpp
  184. src/filesystem/directory_iterator.cpp
  185. src/filesystem/operations.cpp
  186. src/format.cpp
  187. src/functional.cpp
  188. src/future.cpp
  189. src/hash.cpp
  190. src/ios.cpp
  191. src/ios.instantiations.cpp
  192. src/iostream.cpp
  193. src/locale.cpp
  194. src/memory.cpp
  195. src/mutex.cpp
  196. src/mutex_destructor.cpp
  197. src/optional.cpp
  198. src/random.cpp
  199. src/random_shuffle.cpp
  200. src/regex.cpp
  201. src/shared_mutex.cpp
  202. src/stdexcept.cpp
  203. src/string.cpp
  204. src/strstream.cpp
  205. src/system_error.cpp
  206. src/thread.cpp
  207. src/typeinfo.cpp
  208. src/utility.cpp
  209. src/valarray.cpp
  210. src/variant.cpp
  211. src/vector.cpp
  212. )
  213. IF (NOT OS_WINDOWS)
  214. SRCS(
  215. src/new.cpp
  216. )
  217. ENDIF()
  218. END()