From 7d63b357f57b28e586d934b17be28a995079660c Mon Sep 17 00:00:00 2001 From: Sylvestre Ledru Date: Tue, 9 Oct 2018 10:54:06 +0200 Subject: [PATCH] * Try to bootstrap (currently in a different branch) * Split the builds in different make target --- debian/changelog | 7 ++ debian/patches/bootstrap-polly-fpic.diff | 35 ++++++ ...ap-with-openmp-version-export-missing.diff | 14 +++ .../patches/fix-include-next-bootstrap.diff | 41 +++++++ ...ddversion-suffix-to-llvm-server-exec.patch | 2 +- debian/patches/series | 6 + debian/rules | 108 ++++++++++++------ 7 files changed, 180 insertions(+), 33 deletions(-) create mode 100644 debian/patches/bootstrap-polly-fpic.diff create mode 100644 debian/patches/bootstrap-with-openmp-version-export-missing.diff create mode 100644 debian/patches/fix-include-next-bootstrap.diff diff --git a/debian/changelog b/debian/changelog index b02f03d6..ad9e2905 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +llvm-toolchain-7 (1:7-6) UNRELEASED; urgency=medium + + * Try to bootstrap (currently in a different branch) + * Split the builds in different make target + + -- Sylvestre Ledru Tue, 09 Oct 2018 10:50:17 +0200 + llvm-toolchain-7 (1:7-5) unstable; urgency=medium * In debci, run qualify-clang.sh in verbose mode diff --git a/debian/patches/bootstrap-polly-fpic.diff b/debian/patches/bootstrap-polly-fpic.diff new file mode 100644 index 00000000..ab93a8a3 --- /dev/null +++ b/debian/patches/bootstrap-polly-fpic.diff @@ -0,0 +1,35 @@ +Index: llvm-toolchain-7-7/polly/CMakeLists.txt +=================================================================== +--- llvm-toolchain-7-7.orig/polly/CMakeLists.txt ++++ llvm-toolchain-7-7/polly/CMakeLists.txt +@@ -91,6 +91,8 @@ else () + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -fno-rtti") + endif () + ++set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") ++ + # Add path for custom modules + set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${POLLY_SOURCE_DIR}/cmake") + +Index: llvm-toolchain-7-7/polly/lib/External/CMakeLists.txt +=================================================================== +--- llvm-toolchain-7-7.orig/polly/lib/External/CMakeLists.txt ++++ llvm-toolchain-7-7/polly/lib/External/CMakeLists.txt +@@ -1,3 +1,6 @@ ++set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") ++set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") ++ + # External: Integer Set Library + if (POLLY_BUNDLED_ISL) + set(ISL_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/isl") +Index: llvm-toolchain-7-7/lib/Support/CMakeLists.txt +=================================================================== +--- llvm-toolchain-7-7.orig/lib/Support/CMakeLists.txt ++++ llvm-toolchain-7-7/lib/Support/CMakeLists.txt +@@ -1,4 +1,6 @@ + set(system_libs) ++set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") ++ + if ( LLVM_ENABLE_ZLIB AND HAVE_LIBZ ) + set(system_libs ${system_libs} ${ZLIB_LIBRARIES}) + endif() diff --git a/debian/patches/bootstrap-with-openmp-version-export-missing.diff b/debian/patches/bootstrap-with-openmp-version-export-missing.diff new file mode 100644 index 00000000..f503df20 --- /dev/null +++ b/debian/patches/bootstrap-with-openmp-version-export-missing.diff @@ -0,0 +1,14 @@ +Index: llvm-toolchain-7-7/openmp/runtime/src/CMakeLists.txt +=================================================================== +--- llvm-toolchain-7-7.orig/openmp/runtime/src/CMakeLists.txt ++++ llvm-toolchain-7-7/openmp/runtime/src/CMakeLists.txt +@@ -174,7 +174,8 @@ endif() + + # Linking command will include libraries in LIBOMP_CONFIGURED_LIBFLAGS + libomp_get_libflags(LIBOMP_CONFIGURED_LIBFLAGS) +-target_link_libraries(omp ${LIBOMP_CONFIGURED_LIBFLAGS} ${CMAKE_DL_LIBS}) ++target_link_libraries(omp ${LIBOMP_CONFIGURED_LIBFLAGS} ${CMAKE_DL_LIBS} ++ "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/exports_so.txt") + + # Create *.inc before compiling any sources + # objects depend on : .inc files diff --git a/debian/patches/fix-include-next-bootstrap.diff b/debian/patches/fix-include-next-bootstrap.diff new file mode 100644 index 00000000..0ad00550 --- /dev/null +++ b/debian/patches/fix-include-next-bootstrap.diff @@ -0,0 +1,41 @@ +When doing a bootstrap, we use a newly built clang. +When this one is used, if already installed on the system, +we have clang header in two places: +llvm-toolchain-7-7/build-llvm/lib/clang/7.0.0/include/inttypes.h +and +/usr/include/clang/7.0.0/include/inttypes.h + +Because clang expects only one of his headers to be available, it uses +include_next to get the glibc (libc6-dev package) header. + +However, in the previous example, because we have inttypes.h twice in the +include search path, clang's header will call itself without any effect. +Therefor, it will do include_next until the define from the libc is existing (ex: _INTTYPES_H) + + +Index: llvm-toolchain-7-7/clang/lib/Headers/inttypes.h +=================================================================== +--- llvm-toolchain-7-7.orig/clang/lib/Headers/inttypes.h ++++ llvm-toolchain-7-7/clang/lib/Headers/inttypes.h +@@ -20,7 +20,7 @@ + * + \*===----------------------------------------------------------------------===*/ + +-#ifndef __CLANG_INTTYPES_H ++#if !defined(__CLANG_INTTYPES_H) || !defined(_INTTYPES_H) + #define __CLANG_INTTYPES_H + + #if defined(_MSC_VER) && _MSC_VER < 1800 +Index: llvm-toolchain-7-7/clang/lib/Headers/limits.h +=================================================================== +--- llvm-toolchain-7-7.orig/clang/lib/Headers/limits.h ++++ llvm-toolchain-7-7/clang/lib/Headers/limits.h +@@ -22,7 +22,7 @@ + * + \*===----------------------------------------------------------------------===*/ + +-#ifndef __CLANG_LIMITS_H ++#if !defined(__CLANG_LIMITS_H) || !defined(_LIBC_LIMITS_H_) + #define __CLANG_LIMITS_H + + /* The system's limits.h may, in turn, try to #include_next GCC's limits.h. diff --git a/debian/patches/lldb-addversion-suffix-to-llvm-server-exec.patch b/debian/patches/lldb-addversion-suffix-to-llvm-server-exec.patch index 86b1db2f..561fdd6c 100644 --- a/debian/patches/lldb-addversion-suffix-to-llvm-server-exec.patch +++ b/debian/patches/lldb-addversion-suffix-to-llvm-server-exec.patch @@ -29,7 +29,7 @@ Index: llvm-toolchain-snapshot_7.0~svn293997/lldb/source/Plugins/Process/gdb-rem #define DEBUGSERVER_BASENAME "debugserver" #else -#define DEBUGSERVER_BASENAME "lldb-server" -+# define DEBUGSERVER_BASENAME "lldb-server-"LLVM_VERSION_STRING ++# define DEBUGSERVER_BASENAME "lldb-server-" LLVM_VERSION_STRING #endif #if defined(HAVE_LIBCOMPRESSION) diff --git a/debian/patches/series b/debian/patches/series index 7e80a4bb..7f59b58c 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -76,3 +76,9 @@ D51108-rust-powerpc.diff disable-sse2-old-x86.diff scan-build-clang-X.diff 0001-analyzer-scan-build-if-status-bugs-is-passed-don-t-f.patch +fix-include-next-bootstrap.diff +bootstrap-with-openmp-version-export-missing.diff +polly-fpic.diff +bootstrap-polly-fpic.diff +#bootstrap-default-passthrough.diff +disable-cflags-check.diff diff --git a/debian/rules b/debian/rules index fa713254..ec9e1a67 100755 --- a/debian/rules +++ b/debian/rules @@ -32,6 +32,7 @@ DEB_HOST_ARCH_OS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS) LDFLAGS_EXTRA = CXXFLAGS_EXTRA = +CFLAGS_EXTRA = CONFIGURE_EXTRA = CMAKE_EXTRA = @@ -97,12 +98,22 @@ else control_vars = '-Vdep:devlibs=libstdc++6-$(GCC_VERSION)-dev' endif +# Disabled: +# Host compiler does not support '-fuse-ld=lld' +# USE_LLD_ARCHS := amd64 +# ifneq (,$(filter $(DEB_HOST_ARCH),$(USE_LLD_ARCHS))) +# CMAKE_EXTRA += -DLLVM_ENABLE_LLD=ON +# endif + BINUTILS_GOLD_ARCHS := amd64 arm64 armhf i386 ppc64 ppc64el sparc sparc64 x32 s390x ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' binutils) ge 2.23.1-1~exp3 ; echo $$?),0) ifneq (,$(filter $(DEB_HOST_ARCH),$(BINUTILS_GOLD_ARCHS))) # -fused-ld=gold enables the gold linker (but is not supported by all archs / distro) - LDFLAGS_EXTRA += -fuse-ld=gold --no-keep-files-mapped --no-map-whole-files - CXXFLAGS_EXTRA += -fuse-ld=gold -Wl,--no-keep-files-mapped -Wl,--no-map-whole-files + LDFLAGS_EXTRA += -fuse-ld=gold -fPIC -Wno-unused-command-line-argument -Wno-unknown-warning-option +#--no-keep-files-mapped --no-map-whole-files + CXXFLAGS_EXTRA += -fuse-ld=gold -fPIC -Wno-unused-command-line-argument -Wno-unknown-warning-option + CFLAGS_EXTRA += -fuse-ld=gold -fPIC -Wno-unused-command-line-argument -Wno-unknown-warning-option +#-Wl,--no-keep-files-mapped -Wl,--no-map-whole-files CMAKE_EXTRA += -DLLVM_BINUTILS_INCDIR=/usr/include/ endif endif @@ -325,6 +336,7 @@ override_dh_auto_configure: preconfigure -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="$(opt_flags)" \ -DCMAKE_CXX_FLAGS='$(CXXFLAGS_EXTRA)' \ + -DCMAKE_C_FLAGS='$(CFLAGS_EXTRA)' \ -DLLVM_LINK_LLVM_DYLIB=ON \ -DLLVM_INSTALL_UTILS=ON \ -DLLVM_VERSION_SUFFIX= \ @@ -336,40 +348,63 @@ override_dh_auto_configure: preconfigure $(CMAKE_EXTRA) \ -DLIBCLANG_LIBRARY_VERSION=$(SONAME_EXT) \ -DPOLLY_BUNDLED_JSONCPP=OFF \ - -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="WebAssembly;AVR" + -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="WebAssembly;AVR" \ + -DCLANG_ENABLE_BOOTSTRAP=ON \ + -DCLANG_VENDOR=$(VENDOR) \ + -DCLANG_BOOTSTRAP_PASSTHROUGH="CMAKE_INSTALL_PREFIX;CMAKE_VERBOSE_MAKEFILE;CMAKE_BUILD_TYPE;CMAKE_CXX_FLAGS_RELWITHDEBINFO;CMAKE_CXX_FLAGS;CMAKE_C_FLAGS;LLVM_LINK_LLVM_DYLIB;LLVM_INSTALL_UTILS;LLVM_VERSION_SUFFIX;LLVM_ENABLE_SPHINX;SPHINX_WARNINGS_AS_ERRORS;LLVM_BUILD_LLVM_DYLIB;LLVM_ENABLE_RTTI;LLVM_ENABLE_FFI;LIBCLANG_LIBRARY_VERSION;POLLY_BUNDLED_JSONCPP;LLVM_EXPERIMENTAL_TARGETS_TO_BUILD;LLVM_USE_PERF;LLVM_ENABLE_ASSERTIONS;LLVM_BINUTILS_INCDIR;LLVM_HOST_TRIPLE;;LLVM_COMPILER_CHECKED;COMPILER_RT_BUILD_BUILTINS;LIBOMP_LIBFLAGS;CMAKE_SHARED_LINKER_FLAGS" -LIBCXX_CMAKE_OPTIONS := \ - -DCMAKE_INSTALL_PREFIX=/usr/lib/llvm-$(LLVM_VERSION) \ - -DLLVM_CONFIG_PATH=$(CURDIR)/$(TARGET_BUILD)/bin/llvm-config \ - -DCMAKE_BUILD_TYPE=RelWithDebInfo \ - -DCMAKE_CXX_COMPILER=$(CURDIR)/$(TARGET_BUILD)/bin/clang++ \ - -DCMAKE_C_COMPILER=$(CURDIR)/$(TARGET_BUILD)/bin/clang \ - -DCMAKE_CXX_FLAGS="$(LIBCXXFLAGS)" \ - -DCMAKE_EXE_LINKER_FLAGS="" \ - -DCMAKE_SHARED_LINKER_FLAGS="" \ - -DCMAKE_MODULE_LINKER_FLAGS="" \ - -DCMAKE_AR=$(CURDIR)/$(TARGET_BUILD)/bin/llvm-ar \ - -DCMAKE_RANLIB=$(CURDIR)/$(TARGET_BUILD)/bin/llvm-ranlib \ - -DCMAKE_C_COMPILER=$(CURDIR)/$(TARGET_BUILD)/bin/clang \ - -DLLVM_EXTERNAL_LIT=$(BASE_PATH)/utils/lit/lit.py \ - $(CMAKE_EXTRA) \ - $(CMAKE_EXTRA_LIBCXX) -override_dh_auto_build: - $(PRE_PROCESS) $(MAKE) $(NJOBS) -C $(TARGET_BUILD) VERBOSE=1 CLANG_VENDOR=$(VENDOR) CXXFLAGS="$(CXXFLAGS_EXTRA)" LDFLAGS="$(LDFLAGS_EXTRA)" REQUIRES_RTTI=1 DEBUGMAKE=1 +# make +VERBOSE=VERBOSE=1 +# ninja +#VERBOSE=-v + +debian-stage2-build: + $(PRE_PROCESS) make $(NJOBS) -C $(TARGET_BUILD) $(VERBOSE) CXXFLAGS="$(CXXFLAGS_EXTRA)" LDFLAGS="$(LDFLAGS_EXTRA)" REQUIRES_RTTI=1 DEBUGMAKE=1 stage2 + if grep "CMAKE_BUILD_TYPE:STRING=Debug" $(TARGET_BUILD)/tools/clang/stage2-bins/CMakeCache.txt; then \ + echo "clang stage2 has been built in upstream Debug mode. Too slow, we don't want that."; \ + fi + +# Check the stage 2 build worked + if ! readelf --string-dump .comment $(TARGET_BUILD)/tools/clang/stage2-bins/bin/clang 2>&1|grep -q "clang version"; then \ + echo "clang hasn't been built using clang. Bye bye. Check that the stage2 build has been done."; \ + fi + + touch $@ + +debian-libfuzzer-build: ifeq (${LIBFUZZER_ENABLE},yes) cd $(TARGET_BUILD) \ CFLAGS=`dpkg-buildflags --get CFLAGS`; \ CFLAGS="$$CFLAGS `dpkg-buildflags --get CPPFLAGS`"; \ echo $$CFLAGS; \ - bin/clang++ -c $$CFLAGS -std=c++11 ../compiler-rt/lib/fuzzer/*.cpp -IFuzzer; \ + tools/clang/stage2-bins/bin/clang++ -c $$CFLAGS -std=c++11 ../compiler-rt/lib/fuzzer/*.cpp -IFuzzer; \ ar ruv libFuzzer.a Fuzzer*.o endif + touch $@ -# Builds libcxx and libcxxabi - mkdir -p libcxxabi/build +LIBCXX_CMAKE_OPTIONS := \ + -DCMAKE_INSTALL_PREFIX=/usr/lib/llvm-$(LLVM_VERSION) \ + -DLLVM_CONFIG_PATH=$(CURDIR)/$(TARGET_BUILD)/tools/clang/stage2-bins/bin/llvm-config \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_CXX_COMPILER=$(CURDIR)/$(TARGET_BUILD)/tools/clang/stage2-bins/bin/clang++ \ + -DCMAKE_C_COMPILER=$(CURDIR)/$(TARGET_BUILD)/tools/clang/stage2-bins/bin/clang \ + -DCMAKE_CXX_FLAGS="$(LIBCXXFLAGS)" \ + -DCMAKE_EXE_LINKER_FLAGS="" \ + -DCMAKE_SHARED_LINKER_FLAGS="" \ + -DCMAKE_MODULE_LINKER_FLAGS="" \ + -DCMAKE_AR=$(CURDIR)/$(TARGET_BUILD)/tools/clang/stage2-bins/bin/llvm-ar \ + -DCMAKE_RANLIB=$(CURDIR)/$(TARGET_BUILD)/tools/clang/stage2-bins/bin/llvm-ranlib \ + -DLLVM_EXTERNAL_LIT=$(BASE_PATH)/utils/lit/lit.py \ + $(CMAKE_EXTRA) \ + $(CMAKE_EXTRA_LIBCXX) + +debian-libcxx-build: +# Builds libcxx + mkdir -p libcxx/build + mkdir -p libcxxabi/build CMAKE_BIN=cmake; \ if test -f /tmp/cmake/bin/cmake; then \ @@ -384,7 +419,13 @@ endif -DLIBCXXABI_LIBCXX_INCLUDES=$(BASE_PATH)/libcxx/include \ -DLIBCXXABI_ENABLE_EXCEPTIONS=$(LIBCXX_EXCEPTIONS) \ -DLLVM_ENABLE_RTTI=ON && \ - $(PRE_PROCESS_CONF) $(MAKE) $(NJOBS) VERBOSE=1 CXXFLAGS="$(CXXFLAGS_EXTRA)" LDFLAGS="$(LDFLAGS_EXTRA)" + $(PRE_PROCESS_CONF) make $(NJOBS) $(VERBOSE) CXXFLAGS="$(CXXFLAGS_EXTRA)" LDFLAGS="$(LDFLAGS_EXTRA)" + touch $@ + +debian-libcxxabi-build: +# Builds libcxxabi + + mkdir -p libcxxabi/build CMAKE_BIN=cmake; \ if test -f /tmp/cmake/bin/cmake; then \ @@ -394,12 +435,15 @@ endif cd libcxx/build && \ $(PRE_PROCESS_CONF) $$CMAKE_BIN ../ \ $(LIBCXX_CMAKE_OPTIONS) \ - -DLIBCXX_CXX_ABI=libcxxabi \ + -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 && \ - $(PRE_PROCESS_CONF) $(MAKE) $(NJOBS) VERBOSE=1 CXXFLAGS="$(CXXFLAGS_EXTRA)" LDFLAGS="$(LDFLAGS_EXTRA)" + $(PRE_PROCESS_CONF) make $(NJOBS) $(VERBOSE) CXXFLAGS="$(CXXFLAGS_EXTRA)" LDFLAGS="$(LDFLAGS_EXTRA)" + touch $@ + +override_dh_auto_build: debian-stage2-build debian-libfuzzer-build debian-libcxx-build debian-libcxxabi-build override_dh_prep: build_doc dh_prep @@ -452,7 +496,7 @@ override_dh_auto_install: # Clean up temporary files to make sure the install works 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 - $(MAKE) -C $(TARGET_BUILD) VERBOSE=1 install/fast DESTDIR=$(DEB_INST)/ + $(MAKE) -C $(TARGET_BUILD) $(VERBOSE) stage2-install DESTDIR=$(DEB_INST)/ # Not used on Linux. rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/argdumper rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/share/clang/clang-format-bbedit.applescript @@ -672,13 +716,13 @@ override_dh_auto_test: # LLVM tests ifneq (,$(findstring $(DEB_HOST_ARCH),$(ARCH_LLVM_TEST_OK))) # logs the output to check-llvm_build_log.txt for validation through autopkgtest - $(MAKE) $(NJOBS) -C $(TARGET_BUILD) check-llvm | tee check-llvm_build_log.txt + $(MAKE) $(NJOBS) -C $(TARGET_BUILD) stage2-check-llvm | tee check-llvm_build_log.txt else - $(MAKE) $(NJOBS) -C $(TARGET_BUILD) check-llvm || true + $(MAKE) $(NJOBS) -C $(TARGET_BUILD) stage2-check-llvm || true endif # Clang tests - $(MAKE) $(NJOBS) -C $(TARGET_BUILD) check-clang || true + $(MAKE) $(NJOBS) -C $(TARGET_BUILD) stage2-check-clang || true # Clang extra tests (ex: clang-tidy) $(MAKE) $(NJOBS) -C $(TARGET_BUILD) check-clang-tools || true @@ -761,4 +805,4 @@ override_dh_auto_clean: rm -f $(CURDIR)/clang/tools/clang-format/clang-format-$(LLVM_VERSION).py rm -rf libcxx/build libcxxabi/build -.PHONY: override_dh_strip preconfigure +.PHONY: override_dh_strip preconfigure debian-stage2-build debian-libfuzzer-build debian-libcxx-build debian-libcxxabi-build