* Try to bootstrap (currently in a different branch)

* Split the builds in different make target
This commit is contained in:
Sylvestre Ledru 2018-10-09 10:54:06 +02:00
parent 396b6bf1eb
commit 7d63b357f5
7 changed files with 180 additions and 33 deletions

7
debian/changelog vendored
View File

@ -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 <sylvestre@debian.org> 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

View File

@ -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()

View File

@ -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

View File

@ -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.

View File

@ -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)

View File

@ -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

108
debian/rules vendored
View File

@ -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