build.ym 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  1. {% extends '//builtin/run.ym' %}
  2. {% block current_version %}d173ce4a670e88b65c52f6fc1bf10d133ee35704{% endblock %}
  3. {% block current_date %}2023-10-19{% endblock %}
  4. {% block keep_sources %}
  5. .yandex_meta/scripts/sysincls.py
  6. glibcxx_eh_cxx17.cpp
  7. include/__config_site
  8. include/__config_epilogue.h
  9. include/__memory/pointer_safety.h
  10. include/__support/win32/atomic_win32.h
  11. include/math_cuda.h
  12. include/stlfwd
  13. include/unwind.h
  14. include/use_ansi.h
  15. src/support/win32/atomic_win32.cpp
  16. src/support/win32/new_win32.cpp
  17. {% endblock %}
  18. {% block current_url %}
  19. {% if not local_llvm %}
  20. https://github.com/llvm/llvm-project/archive/{{self.version().strip()}}.tar.gz
  21. {% endif %}
  22. {% endblock %}
  23. {% block init_bash %}
  24. {{super()}}
  25. SYSINCLS=${WORKDIR}/sysincls
  26. {% endblock %}
  27. {% block prepare_env %}
  28. {{super()}}
  29. {% if local_llvm %}
  30. cp -R {{local_llvm.strip()}}/. ${RESOURCES}/
  31. cd ${RESOURCES}
  32. git checkout {{self.version().strip()}}
  33. {% else %}
  34. tar xf ${RESOURCES}/{{self.current_url().strip() | basename}} --strip-components=1 --directory=${RESOURCES}
  35. {% endif %}
  36. base64 -d << EOF > ${BIN}/sysincls
  37. {% include 'scripts/sysincls.py/base64' %}
  38. EOF
  39. mkdir -p ${SYSINCLS}
  40. base64 -d << EOF > ${SYSINCLS}/stl-to-libcxx.yml
  41. {% include '//build/sysincl/stl-to-libcxx.yml/base64' %}
  42. EOF
  43. chmod +x ${BIN}/sysincls
  44. {% endblock %}
  45. {% block unpack_source %}
  46. {{super()}}
  47. rsync --recursive ${RESOURCES}/libcxx/include .
  48. rsync --recursive ${RESOURCES}/libcxx/src .
  49. cp ${RESOURCES}/libcxx/.clang-format .
  50. cp ${RESOURCES}/libcxx/CREDITS.TXT .
  51. cp ${RESOURCES}/libcxx/LICENSE.TXT .
  52. {% endblock %}
  53. {% block build_source %}
  54. {{super()}}
  55. rm src/CMakeLists.txt include/CMakeLists.txt
  56. sysincls ${SRC} ${SYSINCLS}/stl-to-libcxx.yml
  57. {% endblock %}
  58. {% block prepare_yamake %}
  59. cat << EOF > ya.make
  60. # Generated by devtools/yamaker/ym2
  61. LIBRARY()
  62. LICENSE(
  63. Apache-2.0 AND
  64. Apache-2.0 WITH LLVM-exception AND
  65. BSL-1.0 AND
  66. MIT AND
  67. NCSA AND
  68. Unicode
  69. )
  70. LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
  71. VERSION({{self.date().strip()}})
  72. ORIGINAL_SOURCE(https://github.com/llvm/llvm-project/archive/{{self.version().strip()}}.tar.gz)
  73. SUBSCRIBER(
  74. halyavin
  75. somov
  76. g:cpp-committee
  77. g:cpp-contrib
  78. )
  79. ADDINCL(
  80. GLOBAL contrib/libs/cxxsupp/libcxx/include
  81. contrib/libs/cxxsupp/libcxx/src
  82. )
  83. CXXFLAGS(-D_LIBCPP_BUILDING_LIBRARY)
  84. IF (OS_ANDROID)
  85. DEFAULT(CXX_RT "default")
  86. IF (ARCH_I686 OR ARCH_ARM7)
  87. # 32-bit architectures require additional libandroid_support.so to be linked
  88. # We add --start-group / --end-group statements due to the issue in NDK < r22.
  89. # See: https://github.com/android/ndk/issues/1130
  90. #
  91. # Though these statements are not respected by LLD, they might have sense for other linkers.
  92. LDFLAGS(
  93. -Wl,--start-group
  94. -lc++abi
  95. -landroid_support
  96. -Wl,--end-group
  97. )
  98. ELSE()
  99. LDFLAGS(-lc++abi)
  100. ENDIF()
  101. CFLAGS(
  102. -DLIBCXX_BUILDING_LIBCXXABI
  103. )
  104. # Take cxxabi implementation from system.
  105. ELSEIF (OS_IOS)
  106. LDFLAGS(-lc++abi)
  107. CFLAGS(
  108. -DLIBCXX_BUILDING_LIBCXXABI
  109. )
  110. # Yet take builtins library from Arcadia
  111. PEERDIR(
  112. contrib/libs/cxxsupp/builtins
  113. )
  114. ELSEIF (OS_LINUX OR OS_DARWIN)
  115. IF (ARCH_ARM7)
  116. # XXX: libcxxrt support for ARM is currently broken
  117. DEFAULT(CXX_RT "glibcxx_static")
  118. # ARM7 OS_SDK has old libstdc++ without aligned allocation support
  119. CFLAGS(
  120. GLOBAL -fno-aligned-new
  121. )
  122. ELSE()
  123. DEFAULT(CXX_RT "libcxxrt")
  124. ENDIF()
  125. IF (MUSL)
  126. PEERDIR(
  127. contrib/libs/musl/include
  128. )
  129. ENDIF()
  130. ELSEIF (OS_WINDOWS)
  131. SRCS(
  132. src/support/win32/locale_win32.cpp
  133. src/support/win32/support.cpp
  134. src/support/win32/atomic_win32.cpp
  135. src/support/win32/new_win32.cpp
  136. src/support/win32/thread_win32.cpp
  137. )
  138. CFLAGS(
  139. GLOBAL -D_LIBCPP_VASPRINTF_DEFINED
  140. GLOBAL -D_WCHAR_H_CPLUSPLUS_98_CONFORMANCE_
  141. )
  142. IF (CLANG_CL)
  143. PEERDIR(
  144. contrib/libs/cxxsupp/builtins
  145. )
  146. ENDIF()
  147. ELSEIF (OS_EMSCRIPTEN)
  148. DEFAULT(CXX_RT "libcxxabi")
  149. LDFLAGS(
  150. -Wl,-Bdynamic
  151. )
  152. CXXFLAGS(
  153. -Wno-unknown-pragmas
  154. -nostdinc++
  155. )
  156. PEERDIR(
  157. contrib/restricted/emscripten/include
  158. )
  159. ELSE()
  160. DEFAULT(CXX_RT "glibcxx_static")
  161. CXXFLAGS(
  162. -Wno-unknown-pragmas
  163. -nostdinc++
  164. )
  165. ENDIF()
  166. IF (OS_LINUX)
  167. EXTRALIBS(-lpthread)
  168. ENDIF()
  169. IF (CLANG)
  170. CXXFLAGS(GLOBAL -nostdinc++)
  171. ENDIF()
  172. # The CXX_RT variable controls which C++ runtime is used.
  173. # * libcxxrt - https://github.com/libcxxrt/libcxxrt library stored in Arcadia
  174. # * glibcxx_static - GNU C++ Library runtime with static linkage
  175. # * glibcxx_dynamic - GNU C++ Library runtime with dynamic linkage
  176. # * default - default C++ runtime provided by the compiler driver
  177. #
  178. # All glibcxx* runtimes are taken from system/compiler SDK
  179. DEFAULT(CXX_RT "default")
  180. DISABLE(NEED_GLIBCXX_CXX17_SHIMS)
  181. DISABLE(NEED_CXX_RT_ADDINCL)
  182. IF (CXX_RT == "libcxxrt")
  183. PEERDIR(
  184. contrib/libs/cxxsupp/libcxxabi-parts
  185. contrib/libs/cxxsupp/libcxxrt
  186. contrib/libs/cxxsupp/builtins
  187. )
  188. ADDINCL(
  189. GLOBAL contrib/libs/cxxsupp/libcxxrt/include
  190. )
  191. CFLAGS(
  192. GLOBAL -DLIBCXX_BUILDING_LIBCXXRT
  193. )
  194. # These builtins are equivalent to clang -rtlib=compiler_rt and
  195. # are needed by potentially any code generated by clang.
  196. # With glibcxx runtime, builtins are provided by libgcc
  197. ELSEIF (CXX_RT == "glibcxx_static")
  198. LDFLAGS(
  199. -Wl,-Bstatic
  200. -lsupc++
  201. -lgcc
  202. -lgcc_eh
  203. -Wl,-Bdynamic
  204. )
  205. CXXFLAGS(-D__GLIBCXX__=1)
  206. ENABLE(NEED_GLIBCXX_CXX17_SHIMS)
  207. ENABLE(NEED_CXX_RT_ADDINCL)
  208. CFLAGS(
  209. GLOBAL -DLIBCXX_BUILDING_LIBGCC
  210. )
  211. ELSEIF (CXX_RT == "glibcxx_dynamic")
  212. LDFLAGS(
  213. -lgcc_s
  214. -lstdc++
  215. )
  216. CXXFLAGS(-D__GLIBCXX__=1)
  217. CFLAGS(
  218. GLOBAL -DLIBCXX_BUILDING_LIBGCC
  219. )
  220. ENABLE(NEED_GLIBCXX_CXX17_SHIMS)
  221. ENABLE(NEED_CXX_RT_ADDINCL)
  222. ELSEIF (CXX_RT == "libcxxabi")
  223. PEERDIR(
  224. contrib/libs/cxxsupp/libcxxabi
  225. )
  226. ADDINCL(
  227. GLOBAL contrib/libs/cxxsupp/libcxxabi/include
  228. )
  229. CFLAGS(
  230. GLOBAL -DLIBCXX_BUILDING_LIBCXXABI
  231. )
  232. ELSEIF (CXX_RT == "default")
  233. # Do nothing
  234. ELSE()
  235. MESSAGE(FATAL_ERROR "Unexpected CXX_RT value: \${CXX_RT}")
  236. ENDIF()
  237. IF (NEED_GLIBCXX_CXX17_SHIMS)
  238. IF (GCC)
  239. # Assume GCC is bundled with a modern enough version of C++ runtime
  240. ELSEIF (OS_SDK == "ubuntu-12" OR OS_SDK == "ubuntu-14" OR OS_SDK == "ubuntu-16")
  241. # Prior to ubuntu-18, system C++ runtime for C++17 is incomplete
  242. # and requires std::uncaught_exceptions() to be implemented.
  243. SRCS(
  244. glibcxx_eh_cxx17.cpp
  245. )
  246. ENDIF()
  247. ENDIF()
  248. IF (NEED_CXX_RT_ADDINCL)
  249. # FIXME:
  250. # This looks extremely weird and we have to use cxxabi.h from libsupc++ instead.
  251. # This ADDINCL is placed here just to fix the status quo
  252. ADDINCL(
  253. GLOBAL contrib/libs/cxxsupp/libcxxrt/include
  254. )
  255. ENDIF()
  256. NO_UTIL()
  257. NO_RUNTIME()
  258. NO_COMPILER_WARNINGS()
  259. IF (FUZZING)
  260. NO_SANITIZE()
  261. NO_SANITIZE_COVERAGE()
  262. ENDIF()
  263. SRCS(
  264. src/algorithm.cpp
  265. src/any.cpp
  266. src/atomic.cpp
  267. src/barrier.cpp
  268. src/bind.cpp
  269. src/charconv.cpp
  270. src/chrono.cpp
  271. src/condition_variable.cpp
  272. src/condition_variable_destructor.cpp
  273. src/error_category.cpp
  274. src/exception.cpp
  275. src/filesystem/directory_entry.cpp
  276. src/filesystem/directory_iterator.cpp
  277. src/filesystem/filesystem_clock.cpp
  278. src/filesystem/filesystem_error.cpp
  279. src/filesystem/operations.cpp
  280. src/filesystem/path.cpp
  281. src/functional.cpp
  282. src/future.cpp
  283. src/hash.cpp
  284. src/ios.cpp
  285. src/ios.instantiations.cpp
  286. src/iostream.cpp
  287. src/legacy_pointer_safety.cpp
  288. src/locale.cpp
  289. src/memory.cpp
  290. src/memory_resource.cpp
  291. src/mutex.cpp
  292. src/mutex_destructor.cpp
  293. src/optional.cpp
  294. src/print.cpp
  295. src/random.cpp
  296. src/random_shuffle.cpp
  297. src/regex.cpp
  298. src/ryu/d2fixed.cpp
  299. src/ryu/d2s.cpp
  300. src/ryu/f2s.cpp
  301. src/shared_mutex.cpp
  302. src/stdexcept.cpp
  303. src/string.cpp
  304. src/strstream.cpp
  305. src/system_error.cpp
  306. src/thread.cpp
  307. src/typeinfo.cpp
  308. src/valarray.cpp
  309. src/variant.cpp
  310. src/vector.cpp
  311. src/verbose_abort.cpp
  312. )
  313. IF (NOT OS_WINDOWS)
  314. SRCS(
  315. src/new.cpp
  316. src/new_handler.cpp
  317. src/new_helpers.cpp
  318. )
  319. ENDIF()
  320. IF (OS_LINUX)
  321. SRCS(
  322. src/tz.cpp
  323. src/tzdb_list.cpp
  324. )
  325. ENDIF()
  326. END()
  327. EOF
  328. {% endblock %}
  329. {% block update_version %}
  330. echo "no version update"
  331. {% endblock %}
  332. {% block move_to_output %}
  333. rsync --recursive --delete --perms ${SRC}/ ${OUTPUT}
  334. {% endblock %}
  335. {% block step_install %}
  336. {{super()}}
  337. rsync ${SYSINCLS}/stl-to-libcxx.yml ${ARCADIA_ROOT}/build/sysincl/stl-to-libcxx.yml
  338. {% endblock %}