123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347 |
- {% extends '//builtin/run.ym' %}
- {% block current_version %}80f9458cf30d13eef21b09042ea590945c5e64db{% endblock %}
- {% block current_date %}2024-03-05{% endblock %}
- {% block keep_sources %}
- .yandex_meta/scripts/sysincls.py
- glibcxx_eh_cxx17.cpp
- include/__config_site
- include/__config_epilogue.h
- include/__memory/pointer_safety.h
- include/__support/win32/atomic_win32.h
- include/math_cuda.h
- include/stlfwd
- include/unwind.h
- include/use_ansi.h
- src/support/win32/atomic_win32.cpp
- src/support/win32/new_win32.cpp
- {% endblock %}
- {% block current_url %}
- {% if not local_llvm %}
- https://github.com/llvm/llvm-project/archive/{{self.version().strip()}}.tar.gz
- {% endif %}
- {% endblock %}
- {% block init_bash %}
- {{super()}}
- SYSINCLS=${WORKDIR}/sysincls
- {% endblock %}
- {% block prepare_env %}
- {{super()}}
- {% if local_llvm %}
- cp -R {{local_llvm.strip()}}/. ${RESOURCES}/
- cd ${RESOURCES}
- git checkout {{self.version().strip()}}
- {% else %}
- tar xf ${RESOURCES}/{{self.current_url().strip() | basename}} --strip-components=1 --directory=${RESOURCES}
- {% endif %}
- base64 -d << EOF > ${BIN}/sysincls
- {% include 'scripts/sysincls.py/base64' %}
- EOF
- mkdir -p ${SYSINCLS}
- base64 -d << EOF > ${SYSINCLS}/stl-to-libcxx.yml
- {% include '//build/sysincl/stl-to-libcxx.yml/base64' %}
- EOF
- chmod +x ${BIN}/sysincls
- {% endblock %}
- {% block unpack_source %}
- {{super()}}
- rsync --recursive ${RESOURCES}/libcxx/include .
- rsync --recursive ${RESOURCES}/libcxx/src .
- cp ${RESOURCES}/libcxx/.clang-format .
- cp ${RESOURCES}/libcxx/CREDITS.TXT .
- cp ${RESOURCES}/libcxx/LICENSE.TXT .
- cp ${RESOURCES}/libcxx/vendor/llvm/default_assertion_handler.in include/__assertion_handler
- {% endblock %}
- {% block build_source %}
- {{super()}}
- rm src/CMakeLists.txt include/CMakeLists.txt
- sysincls ${SRC} ${SYSINCLS}/stl-to-libcxx.yml
- {% endblock %}
- {% block prepare_yamake %}
- cat << EOF > ya.make
- # Generated by devtools/yamaker/ym2
- LIBRARY()
- LICENSE(
- Apache-2.0 AND
- Apache-2.0 WITH LLVM-exception AND
- BSL-1.0 AND
- MIT AND
- NCSA AND
- Unicode
- )
- LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
- VERSION({{self.date().strip()}})
- ORIGINAL_SOURCE(https://github.com/llvm/llvm-project/archive/{{self.version().strip()}}.tar.gz)
- SUBSCRIBER(
- g:cpp-committee
- g:cpp-contrib
- )
- ADDINCL(
- GLOBAL contrib/libs/cxxsupp/libcxx/include
- contrib/libs/cxxsupp/libcxx/src
- )
- CXXFLAGS(-D_LIBCPP_BUILDING_LIBRARY)
- IF (OS_ANDROID)
- DEFAULT(CXX_RT "default")
- LDFLAGS(-lc++abi)
- CFLAGS(
- -DLIBCXX_BUILDING_LIBCXXABI
- )
- ELSEIF (OS_IOS)
- # Take cxxabi implementation from system.
- LDFLAGS(-lc++abi)
- CFLAGS(
- -DLIBCXX_BUILDING_LIBCXXABI
- )
- # Yet take builtins library from Arcadia
- PEERDIR(
- contrib/libs/cxxsupp/builtins
- )
- ELSEIF (OS_LINUX OR OS_DARWIN)
- IF (ARCH_ARM7)
- # XXX: libcxxrt support for ARM is currently broken
- DEFAULT(CXX_RT "glibcxx_static")
- # ARM7 OS_SDK has old libstdc++ without aligned allocation support
- CFLAGS(
- GLOBAL -fno-aligned-new
- )
- ELSE()
- DEFAULT(CXX_RT "libcxxrt")
- ENDIF()
- ELSEIF (OS_WINDOWS)
- SRCS(
- src/support/win32/locale_win32.cpp
- src/support/win32/support.cpp
- src/support/win32/atomic_win32.cpp
- src/support/win32/new_win32.cpp
- src/support/win32/thread_win32.cpp
- )
- IF (CLANG_CL)
- PEERDIR(
- contrib/libs/cxxsupp/builtins
- )
- ENDIF()
- ELSEIF (OS_EMSCRIPTEN)
- DEFAULT(CXX_RT "libcxxabi")
- LDFLAGS(
- -Wl,-Bdynamic
- )
- CXXFLAGS(
- -nostdinc++
- )
- ELSE()
- DEFAULT(CXX_RT "glibcxx_static")
- CXXFLAGS(
- -nostdinc++
- )
- ENDIF()
- IF (CLANG)
- CXXFLAGS(GLOBAL -nostdinc++)
- ENDIF()
- # The CXX_RT variable controls which C++ runtime is used.
- # * libcxxrt - https://github.com/libcxxrt/libcxxrt library stored in Arcadia
- # * glibcxx_static - GNU C++ Library runtime with static linkage
- # * glibcxx_dynamic - GNU C++ Library runtime with dynamic linkage
- # * default - default C++ runtime provided by the compiler driver
- #
- # All glibcxx* runtimes are taken from system/compiler SDK
- DEFAULT(CXX_RT "default")
- DISABLE(NEED_GLIBCXX_CXX17_SHIMS)
- DISABLE(NEED_CXX_RT_ADDINCL)
- IF (CXX_RT == "libcxxrt")
- PEERDIR(
- contrib/libs/cxxsupp/libcxxabi-parts
- contrib/libs/cxxsupp/libcxxrt
- contrib/libs/cxxsupp/builtins
- )
- ADDINCL(
- GLOBAL contrib/libs/cxxsupp/libcxxrt/include
- )
- CFLAGS(
- -DLIBCXXRT
- )
- # These builtins are equivalent to clang -rtlib=compiler_rt and
- # are needed by potentially any code generated by clang.
- # With glibcxx runtime, builtins are provided by libgcc
- ELSEIF (CXX_RT == "glibcxx_static")
- LDFLAGS(
- -Wl,-Bstatic
- -lsupc++
- -lgcc
- -lgcc_eh
- -Wl,-Bdynamic
- )
- CXXFLAGS(-D__GLIBCXX__=1)
- ENABLE(NEED_GLIBCXX_CXX17_SHIMS)
- ENABLE(NEED_CXX_RT_ADDINCL)
- ELSEIF (CXX_RT == "glibcxx_dynamic")
- LDFLAGS(
- -lgcc_s
- -lstdc++
- )
- CXXFLAGS(-D__GLIBCXX__=1)
- ENABLE(NEED_GLIBCXX_CXX17_SHIMS)
- ENABLE(NEED_CXX_RT_ADDINCL)
- ELSEIF (CXX_RT == "libcxxabi")
- PEERDIR(
- contrib/libs/cxxsupp/builtins
- contrib/libs/cxxsupp/libcxxabi
- )
- ADDINCL(
- GLOBAL contrib/libs/cxxsupp/libcxxabi/include
- )
- CFLAGS(
- -DLIBCXX_BUILDING_LIBCXXABI
- )
- ELSEIF (CXX_RT == "default")
- # Do nothing
- ELSE()
- MESSAGE(FATAL_ERROR "Unexpected CXX_RT value: \${CXX_RT}")
- ENDIF()
- IF (NEED_GLIBCXX_CXX17_SHIMS)
- IF (GCC)
- # Assume GCC is bundled with a modern enough version of C++ runtime
- ELSEIF (OS_SDK == "ubuntu-12" OR OS_SDK == "ubuntu-14" OR OS_SDK == "ubuntu-16")
- # Prior to ubuntu-18, system C++ runtime for C++17 is incomplete
- # and requires std::uncaught_exceptions() to be implemented.
- SRCS(
- glibcxx_eh_cxx17.cpp
- )
- ENDIF()
- ENDIF()
- IF (NEED_CXX_RT_ADDINCL)
- # FIXME:
- # This looks extremely weird and we have to use cxxabi.h from libsupc++ instead.
- # This ADDINCL is placed here just to fix the status quo
- ADDINCL(
- GLOBAL contrib/libs/cxxsupp/libcxxrt/include
- )
- ENDIF()
- NO_UTIL()
- NO_RUNTIME()
- NO_COMPILER_WARNINGS()
- IF (FUZZING)
- NO_SANITIZE()
- NO_SANITIZE_COVERAGE()
- ENDIF()
- SRCS(
- src/algorithm.cpp
- src/any.cpp
- src/atomic.cpp
- src/barrier.cpp
- src/bind.cpp
- src/call_once.cpp
- src/charconv.cpp
- src/chrono.cpp
- src/condition_variable.cpp
- src/condition_variable_destructor.cpp
- src/error_category.cpp
- src/exception.cpp
- src/filesystem/directory_entry.cpp
- src/filesystem/directory_iterator.cpp
- src/filesystem/filesystem_clock.cpp
- src/filesystem/filesystem_error.cpp
- src/filesystem/operations.cpp
- src/filesystem/path.cpp
- src/fstream.cpp
- src/functional.cpp
- src/future.cpp
- src/hash.cpp
- src/ios.cpp
- src/ios.instantiations.cpp
- src/iostream.cpp
- src/legacy_pointer_safety.cpp
- src/locale.cpp
- src/memory.cpp
- src/memory_resource.cpp
- src/mutex.cpp
- src/mutex_destructor.cpp
- src/optional.cpp
- src/ostream.cpp
- src/print.cpp
- src/random.cpp
- src/random_shuffle.cpp
- src/regex.cpp
- src/ryu/d2fixed.cpp
- src/ryu/d2s.cpp
- src/ryu/f2s.cpp
- src/shared_mutex.cpp
- src/stdexcept.cpp
- src/string.cpp
- src/strstream.cpp
- src/system_error.cpp
- src/thread.cpp
- src/typeinfo.cpp
- src/valarray.cpp
- src/variant.cpp
- src/vector.cpp
- src/verbose_abort.cpp
- )
- IF (NOT OS_WINDOWS)
- SRCS(
- src/new.cpp
- src/new_handler.cpp
- src/new_helpers.cpp
- )
- ENDIF()
- IF (OS_LINUX)
- SRCS(
- src/time_zone.cpp
- src/tzdb.cpp
- src/tzdb_list.cpp
- )
- ENDIF()
- END()
- EOF
- {% endblock %}
- {% block update_version %}
- echo "no version update"
- {% endblock %}
- {% block move_to_output %}
- rsync --recursive --delete --perms ${SRC}/ ${OUTPUT}
- {% endblock %}
- {% block step_install %}
- {{super()}}
- rsync ${SYSINCLS}/stl-to-libcxx.yml ${ARCADIA_ROOT}/build/sysincl/stl-to-libcxx.yml
- {% endblock %}
|