diff --git a/debian/changelog b/debian/changelog index 88b9b9d3..2bbb607b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -139,6 +139,16 @@ llvm-toolchain-12 (1:12.0.1-7) UNRELEASED; urgency=medium [ Gianfranco Costamagna ] * Add a patch to fix omp build on riscv64 + * cmake: use ON instead of YES for consistency + * Add LIBCXXABI_ENABLE_STATIC_UNWINDER=ON + LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY=OFF + LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_STATIC_LIBRARY=ON + to libc++ when libunwind is built + Matches what is done on brew: + https://bit.ly/3kDNpC9 + + [ Gianfranco Costamagna ] + * Add a patch to fix omp build on riscv64 -- Sylvestre Ledru Sun, 29 Aug 2021 15:15:18 +0200 diff --git a/debian/rules b/debian/rules index 98421ba2..27b1b402 100755 --- a/debian/rules +++ b/debian/rules @@ -1,7 +1,8 @@ #!/usr/bin/make -f # polly, openmp & lldb aren't enabled for every platform -PROJECTS = clang;clang-tools-extra;libcxx;libcxxabi;compiler-rt;lld;debuginfo-tests +PROJECTS = clang;clang-tools-extra;lld;debuginfo-tests +RUNTIMES = compiler-rt;libcxx;libcxxabi TARGET_BUILD := build-llvm TARGET_BUILD_STAGE2 := $(TARGET_BUILD)/tools/clang/stage2-bins @@ -107,7 +108,7 @@ ifneq (,$(findstring $(DEB_HOST_ARCH),armel)) # See http://lists.llvm.org/pipermail/llvm-dev/2016-May/099761.html CMAKE_EXTRA += -DCOMPILER_RT_BUILD_BUILTINS=OFF # Check for ancient libstdc++ fails due to atomics usage - CMAKE_EXTRA_LIBCXX += -DLLVM_COMPILER_CHECKED=ON + CMAKE_LIBCXX_EXTRA += -DLLVM_COMPILER_CHECKED=ON # Prevent clang from getting a > v4t default # See bug #868779 CMAKE_EXTRA += -DLLVM_HOST_TRIPLE=arm-linux-gnueabi @@ -203,8 +204,7 @@ OPENMP_ENABLE=yes ifneq (,$(filter $(DEB_HOST_ARCH), m68k mips mipsel powerpc powerpcspe sparc64 s390x x32)) OPENMP_ENABLE=no else - PROJECTS+=;openmp -# CMAKE_EXTRA += -DLIBOMPTARGET_BUILD_NVPTX_BCLIB=ON -DLLVM_ENABLE_RUNTIMES=openmp + RUNTIMES+=;openmp endif # Enable libunwind (or not) @@ -212,11 +212,12 @@ LIBUNWIND_ENABLE=yes ifneq (,$(filter $(DEB_HOST_ARCH), s390x armel m68k mipsel hurd-i386 powerpc sparc64 x32)) LIBUNWIND_ENABLE=no else - PROJECTS+=;libunwind + RUNTIMES += ;libunwind CMAKE_LIBCXX_EXTRA += -DLIBCXXABI_USE_LLVM_UNWINDER=ON \ -DDLIBCXXABI_ENABLE_STATIC_UNWINDER=ON \ -DLIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY=OFF \ - -DLIBCXXABI_STATICALLY_LINK_UNWINDER_IN_STATIC_LIBRARY=ON + -DLIBCXXABI_STATICALLY_LINK_UNWINDER_IN_STATIC_LIBRARY=ON \ + -DLIBUNWIND_USE_COMPILER_RT=ON endif RUN_TEST=yes @@ -336,6 +337,7 @@ endif # For some reasons, some spaces are added, removing them PROJECTS_LIST := $(shell echo "$(PROJECTS)"|sed -e "s| ||g") +RUNTIMES_LIST := $(shell echo "$(RUNTIMES)"|sed -e "s| ||g") preconfigure: @@ -352,6 +354,7 @@ preconfigure: @echo "DISTRO=$(DISTRO)" @echo "GCC_VERSION=$(GCC_VERSION)" @echo "PROJECTS=$(PROJECTS_LIST)" + @echo "RUNTIMES=$(RUNTIMES_LIST)" @echo "LLVM_VERSION=$(LLVM_VERSION)" @echo "LLVM_VERSION_FULL=$(LLVM_VERSION_FULL)" @echo "LLVM_VERSION_SNAPSHOT=$(LLVM_VERSION_SNAPSHOT)" @@ -379,6 +382,25 @@ preconfigure: sed -i -e "s|#spv\ ||g" debian/libclc-$(LLVM_VERSION).install; \ fi +# The various options to build libc++ and libc++abi + +LIBCXX_CMAKE_OPTIONS := \ + -DLIBCXX_USE_COMPILER_RT=ON \ + -DLIBCXXABI_USE_COMPILER_RT=ON \ + -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON \ + -DLIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY=ON \ + -DLIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY=OFF \ + -DLIBCXX_CXX_ABI=libcxxabi \ + -DLIBCXX_CXX_ABI_INCLUDE_PATHS=$(BASE_PATH)/libcxxabi/include \ + -DLIBCXX_CXX_ABI_LIBRARY_PATH=$(BASE_PATH)/libcxxabi/build/lib \ + -DLIBCXX_ENABLE_EXCEPTIONS=$(LIBCXX_EXCEPTIONS) \ + -DLIBCXX_INSTALL_EXPERIMENTAL_LIBRARY=ON \ + -DLIBCXXABI_LIBCXX_PATH=$(BASE_PATH)/libcxx \ + -DLIBCXXABI_LIBCXX_LIBRARY_PATH=$(BASE_PATH)/libcxx/build/lib \ + -DLIBCXXABI_LIBCXX_INCLUDES=$(BASE_PATH)/libcxx/include \ + -DLIBCXXABI_ENABLE_EXCEPTIONS=$(LIBCXX_EXCEPTIONS) \ + $(CMAKE_LIBCXX_EXTRA) + # Override this two targets. They are trying to manage the .in conversion for me override_dh_ocamlinit: override_dh_ocamlclean: @@ -414,14 +436,15 @@ override_dh_auto_configure: preconfigure echo "Running tests: $(RUN_TEST)" echo "Using cmake: $(CMAKE_BIN)"; \ - cd $(TARGET_BUILD) && \ - LD_LIBRARY_PATH=$$LD_LIBRARY_PATH $(PRE_PROCESS_CONF) $(CMAKE_BIN) ../llvm/ \ + LD_LIBRARY_PATH=$$LD_LIBRARY_PATH $(PRE_PROCESS_CONF) $(CMAKE_BIN) -S llvm/ -B $(TARGET_BUILD) \ -DLLVM_ENABLE_PROJECTS="$(PROJECTS_LIST)" \ + -DLLVM_ENABLE_RUNTIMES="$(RUNTIMES_LIST)" \ -DCMAKE_SUPPRESS_REGENERATION=ON \ -DCMAKE_INSTALL_PREFIX=/usr/lib/llvm-$(LLVM_VERSION) \ -DCMAKE_VERBOSE_MAKEFILE=ON \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="$(opt_flags)" \ + -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DLLVM_LINK_LLVM_DYLIB=ON \ -DLLVM_INSTALL_UTILS=ON \ -DLLVM_VERSION_SUFFIX= \ @@ -431,11 +454,11 @@ override_dh_auto_configure: preconfigure -DLLVM_ENABLE_FFI=ON \ -DLLVM_ENABLE_DUMP=ON \ $(CMAKE_EXTRA) \ + $(LIBCXX_CMAKE_OPTIONS) \ -DLIBCLANG_LIBRARY_VERSION=$(SONAME_EXT) \ -DCLANG_LINK_CLANG_DYLIB=ON \ -DENABLE_LINKER_BUILD_ID=ON \ -DCOMPILER_RT_USE_LIBCXX=NO \ - -DLIBUNWIND_USE_COMPILER_RT=ON \ $(Z3_FLAG) \ -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="AVR;M68k" \ -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \ @@ -458,7 +481,7 @@ VERBOSE=VERBOSE=1 #VERBOSE=-v debian-full-build: - $(PRE_PROCESS) make $(NJOBS) -C $(TARGET_BUILD) $(VERBOSE) CFLAGS="$(CFLAGS_EXTRA)" CXXFLAGS="$(CXXFLAGS_EXTRA)" LDFLAGS="$(LDFLAGS_EXTRA)" REQUIRES_RTTI=1 DEBUGMAKE=1 $(BUILD_METHOD) + $(PRE_PROCESS) make $(NJOBS) -C $(TARGET_BUILD) $(VERBOSE) CFLAGS="$(CFLAGS_EXTRA)" CXXFLAGS="$(CXXFLAGS_EXTRA)" LDFLAGS="$(LDFLAGS_EXTRA)" REQUIRES_RTTI=1 DEBUGMAKE=1 stage2 compiler-rt runtimes # Check the stage 2 build worked if test "$(BUILD_METHOD)" = "stage2"; then \ @@ -471,6 +494,8 @@ debian-full-build: echo "libclang-$(LLVM_VERSION).so.1 depends on libclang-cpp. Should not be the case"; \ exit 2; \ fi +# $(PRE_PROCESS) make $(NJOBS) -C $(TARGET_BUILD) $(VERBOSE) CFLAGS="$(CFLAGS_EXTRA)" CXXFLAGS="$(CXXFLAGS_EXTRA)" LDFLAGS="$(LDFLAGS_EXTRA)" REQUIRES_RTTI=1 DEBUGMAKE=1 runtimes + touch $@ debian-libfuzzer-build: @@ -484,66 +509,6 @@ ifeq (${LIBFUZZER_ENABLE},yes) endif touch $@ - -LIBCXX_CMAKE_OPTIONS := \ - -DCMAKE_INSTALL_PREFIX=/usr/lib/llvm-$(LLVM_VERSION) \ - -DLLVM_CONFIG_PATH=$(CURDIR)/$(TARGET_BUILD_STAGE2)/bin/llvm-config \ - -DCMAKE_BUILD_TYPE=RelWithDebInfo \ - -DCMAKE_CXX_COMPILER=$(CURDIR)/$(TARGET_BUILD_STAGE2)/bin/clang++ \ - -DCMAKE_C_COMPILER=$(CURDIR)/$(TARGET_BUILD_STAGE2)/bin/clang \ - -DCMAKE_CXX_FLAGS="$(LIBCXXFLAGS)" \ - -DCMAKE_EXE_LINKER_FLAGS="" \ - -DCMAKE_SHARED_LINKER_FLAGS="" \ - -DCMAKE_MODULE_LINKER_FLAGS="" \ - -DCMAKE_AR=$(CURDIR)/$(TARGET_BUILD_STAGE2)/bin/llvm-ar \ - -DCMAKE_RANLIB=$(CURDIR)/$(TARGET_BUILD_STAGE2)/bin/llvm-ranlib \ - -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ - -DLLVM_EXTERNAL_LIT=$(BASE_PATH)/llvm/utils/lit/lit.py \ - -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \ - -DLIBCXX_USE_COMPILER_RT=ON \ - -DLIBCXXABI_USE_COMPILER_RT=ON \ - -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON \ - -DLIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY=ON \ - -DLIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY=OFF \ - $(CMAKE_EXTRA) \ - $(CMAKE_EXTRA_LIBCXX) - -debian-libcxx-build: -# Builds libcxx - - mkdir -p libcxx/build - mkdir -p libcxxabi/build - echo "Using cmake: $(CMAKE_BIN)"; \ - cd libcxxabi/build && \ - $(PRE_PROCESS_CONF) $(CMAKE_BIN) ../ \ - $(LIBCXX_CMAKE_OPTIONS) \ - -DLIBCXXABI_LIBCXX_PATH=$(BASE_PATH)/libcxx \ - -DLIBCXXABI_LIBCXX_LIBRARY_PATH=$(BASE_PATH)/libcxx/build/lib \ - -DLIBCXXABI_LIBCXX_INCLUDES=$(BASE_PATH)/$(TARGET_BUILD_STAGE2)/include/c++/v1/ \ - -DLIBCXXABI_ENABLE_EXCEPTIONS=$(LIBCXX_EXCEPTIONS) \ - -DLLVM_ENABLE_RTTI=ON \ - $(CMAKE_LIBCXX_EXTRA) && \ - $(PRE_PROCESS_CONF) make $(NJOBS) $(VERBOSE) CXXFLAGS="$(CXXFLAGS_EXTRA)" LDFLAGS="$(LDFLAGS_EXTRA)" - touch $@ - -debian-libcxxabi-build: -# Builds libcxxabi - - mkdir -p libcxxabi/build - - echo "Using cmake: $(CMAKE_BIN)"; \ - cd libcxx/build && \ - $(PRE_PROCESS_CONF) $(CMAKE_BIN) ../ \ - $(LIBCXX_CMAKE_OPTIONS) \ - -DLIBCXX_CXX_ABI=libcxxabi \ - -DLIBCXX_CXX_ABI_INCLUDE_PATHS=$(BASE_PATH)/libcxxabi/include \ - -DLIBCXX_CXX_ABI_LIBRARY_PATH=$(BASE_PATH)/libcxxabi/build/lib \ - -DLIBCXX_ENABLE_EXCEPTIONS=$(LIBCXX_EXCEPTIONS) \ - -DLIBCXX_INSTALL_EXPERIMENTAL_LIBRARY=ON \ - $(CMAKE_LIBCXX_EXTRA) && \ - $(PRE_PROCESS_CONF) make $(NJOBS) $(VERBOSE) CXXFLAGS="$(CXXFLAGS_EXTRA)" LDFLAGS="$(LDFLAGS_EXTRA)" - touch $@ - debian-libclc-build: # Builds libclc @@ -564,7 +529,7 @@ debian-libclc-build: make $(NJOBS) $(VERBOSE) touch $@ -override_dh_auto_build: debian-full-build debian-libfuzzer-build debian-libcxx-build debian-libcxxabi-build debian-libclc-build +override_dh_auto_build: debian-full-build debian-libfuzzer-build debian-libclc-build override_dh_prep: build_doc dh_prep @@ -623,7 +588,7 @@ override_dh_auto_install: rm -rf $(find $(TARGET_BUILD) -wholename '*CMakeFiles*' -not -name CMakeLists.txt -a -name "*.dir" -type d) # install/fast enables a make install without recompiling temporary files if test "$(BUILD_METHOD)" = "stage2"; then \ - $(MAKE) -C $(TARGET_BUILD) $(VERBOSE) stage2-install DESTDIR=$(DEB_INST)/; \ + $(MAKE) -C $(TARGET_BUILD) $(VERBOSE) stage2-install install-runtimes DESTDIR=$(DEB_INST)/; \ else \ $(MAKE) -C $(TARGET_BUILD) $(VERBOSE) install DESTDIR=$(DEB_INST)/; \ fi @@ -701,9 +666,6 @@ endif rm -rf $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/build/utils/lit/lit/__pycache__/ \ $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/build/utils/lit/lit/*/__pycache__/ - - $(MAKE) -C libcxxabi/build install DESTDIR=$(DEB_INST) - $(MAKE) -C libcxx/build install DESTDIR=$(DEB_INST) $(MAKE) -C libclc/build install DESTDIR=$(DEB_INST) # Rename binaries @@ -898,11 +860,8 @@ endif # Sanitizer $(MAKE) $(NJOBS) -C $(TARGET_BUILD_STAGE2) check-sanitizer || true -# Libcxx - $(MAKE) $(NJOBS) -C libcxx/build check-libcxx || true - -# Libcxxabi - $(MAKE) $(MAKE) -C libcxxabi/build check-libcxxabi || true +# Libcxx & libcxxabi + $(MAKE) $(NJOBS) -C $(TARGET_BUILD_STAGE2) check-runtimes || true # Libclc $(MAKE) $(MAKE) -C libclc/build test || true