diff --git a/debian/changelog b/debian/changelog index 9652de59..cc6696a9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -51,6 +51,44 @@ llvm-toolchain-snapshot (1:16~++20220731055325+02b3a358926e-1~exp1) experimental -- Sylvestre Ledru Wed, 27 Jul 2022 21:36:27 +0200 +llvm-toolchain-15 (1:15.0.4-1) unstable; urgency=medium + + [ Jordan Justen ] + * d/rules: Rename LLVM_SPIR_VERSION to LLVM_SPIRV_VERSION + * d/rules: Call bash to use 'command -v' to locate llvm-spirv executable + * debian: Bump llvm-spirv to 15 to match the llvm version + * d/rules: Set LLVM_SPIRV with cmake for libclc + * d/patches: Drop libclc-llvm-spirv.diff now that we are setting LLVM_SPIRV + * d/rules: Restore building libclc .bc output without spir-v support + * d/rules: Check for previous version of llvm-spirv as well + * d/control: Add llvm-spirv-14 as an alternative to llvm-spirv-15 + + [ Sylvestre Ledru ] + * New upstream release (Closes: #1023455) + * Cherry-pick patches to fix the FTBFS with swig + lldb (Closes: #1023444) + + -- Sylvestre Ledru Wed, 02 Nov 2022 08:50:23 +0100 + +llvm-toolchain-15 (1:15.0.3-2) unstable; urgency=medium + + * Cherry-pick upstream fix to unbreak mips (closes: #1022169) + Thanks to YunQiang Su for the patch + https://reviews.llvm.org/D135553 + + -- Sylvestre Ledru Fri, 28 Oct 2022 10:25:45 +0200 + +llvm-toolchain-15 (1:15.0.3-1) unstable; urgency=medium + + * Upload to unstable now that autopkgtest is green + + -- Sylvestre Ledru Sun, 23 Oct 2022 10:34:58 +0200 + +llvm-toolchain-15 (1:15.0.3-1~exp2) experimental; urgency=medium + + * Fix autopkgtest (remove move stuff from the cmake search) + + -- Sylvestre Ledru Fri, 21 Oct 2022 23:53:23 +0200 + llvm-toolchain-15 (1:15.0.3-1~exp1) experimental; urgency=medium * New stable release @@ -250,6 +288,39 @@ llvm-toolchain-snapshot (1:15~++20220202093833+1a3137dc8451-1~exp1) experimental -- Sylvestre Ledru Sun, 13 Feb 2022 23:25:57 +0100 +llvm-toolchain-14 (1:14.0.6-8) unstable; urgency=medium + + * Fix the lldb swig issues (closes: #1023444) + + -- Sylvestre Ledru Fri, 04 Nov 2022 19:36:56 +0100 + +llvm-toolchain-14 (1:14.0.6-7) unstable; urgency=medium + + * Disable the cmake search for all binaries + (cmake_import_check_files_for.*/bin/). Dunno why it regressed + but we wasted too much time on this. + * disable sccache on bionic + + [ Jordan Justen ] + * d/rules: Call bash to use 'command -v' to location llvm-spirv executable + * d/rules: Set LLVM_SPIRV with cmake for libclc + * d/patches: Drop libclc-llvm-spirv.diff now that we are setting LLVM_SPIRV + * d/rules: Check for llvm-spirv with version suffix + + -- Sylvestre Ledru Thu, 27 Oct 2022 12:47:19 +0200 + +llvm-toolchain-14 (1:14.0.6-6) unstable; urgency=medium + + * Unbreak the cmake detection (Closes: #1021857, #1022414) + + -- Sylvestre Ledru Sun, 23 Oct 2022 16:07:45 +0200 + +llvm-toolchain-14 (1:14.0.6-5) unstable; urgency=medium + + * Update of the build dep llvm-spirv => llvm-spirv-14 + + -- Sylvestre Ledru Tue, 11 Oct 2022 08:39:18 +0200 + llvm-toolchain-14 (1:14.0.6-4) unstable; urgency=medium * fix the cmake detection with libmlir @@ -715,6 +786,27 @@ llvm-toolchain-snapshot (1:14~++20210715093511+afc760ef3527-1~exp2) unstable; ur -- Sylvestre Ledru Fri, 06 Aug 2021 08:40:58 +0200 +llvm-toolchain-13 (1:13.0.1-9) UNRELEASED; urgency=medium + + * d/rules: Don't send an empty string to cmake when llvm-spirv is not found + + -- Jordan Justen Fri, 28 Oct 2022 10:17:57 -0700 + +llvm-toolchain-13 (1:13.0.1-8) unstable; urgency=medium + + [ Sylvestre Ledru ] + * Disable the build of libclc on old Ubuntu (Groovy & focal) + as llvm-spir is too old on these version. + See bug #52200 + + [ Jordan Justen ] + * d/rules: Call bash to use 'command -v' to location llvm-spirv executable + * d/rules: Set LLVM_SPIRV with cmake for libclc + * d/patches: Drop libclc-llvm-spirv.diff now that we are setting LLVM_SPIRV + * d/rules: Check for llvm-spirv with version suffix + + -- Jordan Justen Wed, 26 Oct 2022 10:13:59 -0700 + llvm-toolchain-13 (1:13.0.1-7) unstable; urgency=medium [ Michael Biebl ] diff --git a/debian/control b/debian/control index d073d19c..07fbc8ee 100644 --- a/debian/control +++ b/debian/control @@ -22,6 +22,7 @@ Build-Depends: debhelper (>= 10.0), cmake, ninja-build, libctypes-ocaml-dev [amd64 arm64 armhf ppc64el riscv64 s390x], dh-exec, dh-ocaml [amd64 arm64 armhf ppc64el riscv64 s390x], libpfm4-dev [linux-any], python3-setuptools, libz3-dev, + llvm-spirv-15 [ amd64 arm64 armel armhf mips64el mipsel ppc64el s390x ] | llvm-spirv-14 [ amd64 arm64 armel armhf mips64el mipsel ppc64el s390x ] | hello [!i386], spirv-tools [ linux-any ] | hello [ !i386], libcurl4-dev, diff --git a/debian/libclc-X.Y.install.in b/debian/libclc-X.Y.install.in index 679ba86f..923094ff 100644 --- a/debian/libclc-X.Y.install.in +++ b/debian/libclc-X.Y.install.in @@ -1,2 +1,2 @@ usr/lib/clc/*.bc -usr/lib/clc/*.spv +#spv usr/lib/clc/*.spv diff --git a/debian/patches/0003-Debian-version-info-and-bugreport.patch b/debian/patches/0003-Debian-version-info-and-bugreport.patch deleted file mode 100644 index 3fbb78ea..00000000 --- a/debian/patches/0003-Debian-version-info-and-bugreport.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- - lib/Support/CommandLine.cpp | 4 ++++ - 1 file changed, 4 insertions(+) - -Index: llvm-toolchain-snapshot_15~++20220608102131+032be2330928/llvm/lib/Support/CommandLine.cpp -=================================================================== ---- llvm-toolchain-snapshot_15~++20220608102131+032be2330928.orig/llvm/lib/Support/CommandLine.cpp -+++ llvm-toolchain-snapshot_15~++20220608102131+032be2330928/llvm/lib/Support/CommandLine.cpp -@@ -2469,6 +2469,10 @@ public: - OS << "LLVM (http://llvm.org/):\n "; - #endif - OS << PACKAGE_NAME << " version " << PACKAGE_VERSION << "\n "; -+#ifdef LLVM_DEBIAN_INFO -+ OS << LLVM_DEBIAN_INFO; -+#endif -+ OS << "\n "; - #if LLVM_IS_DEBUG_BUILD - OS << "DEBUG build"; - #else diff --git a/debian/patches/19-clang_debian_version.patch b/debian/patches/19-clang_debian_version.patch deleted file mode 100644 index dbc1d065..00000000 --- a/debian/patches/19-clang_debian_version.patch +++ /dev/null @@ -1,21 +0,0 @@ -Index: llvm-toolchain-snapshot_15~++20220407011631+46f0e2ceb487/clang/lib/Basic/Version.cpp -=================================================================== ---- llvm-toolchain-snapshot_15~++20220407011631+46f0e2ceb487.orig/clang/lib/Basic/Version.cpp -+++ llvm-toolchain-snapshot_15~++20220407011631+46f0e2ceb487/clang/lib/Basic/Version.cpp -@@ -14,6 +14,7 @@ - #include "clang/Basic/LLVM.h" - #include "clang/Config/config.h" - #include "llvm/Support/raw_ostream.h" -+#include "clang/Debian/debian_path.h" - #include - #include - -@@ -95,7 +96,7 @@ std::string getClangToolFullVersion(Stri - #ifdef CLANG_VENDOR - OS << CLANG_VENDOR; - #endif -- OS << ToolName << " version " CLANG_VERSION_STRING; -+ OS << ToolName << " version " CLANG_VERSION_STRING "-" DEB_PATCHSETVERSION; - - std::string repo = getClangFullRepositoryVersion(); - if (!repo.empty()) { diff --git a/debian/patches/libclc-llvm-spirv.diff b/debian/patches/libclc-llvm-spirv.diff deleted file mode 100644 index 405391a4..00000000 --- a/debian/patches/libclc-llvm-spirv.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: llvm-toolchain-snapshot_15~++20220724113059+7feab85df8e8/libclc/CMakeLists.txt -=================================================================== ---- llvm-toolchain-snapshot_15~++20220724113059+7feab85df8e8.orig/libclc/CMakeLists.txt -+++ llvm-toolchain-snapshot_15~++20220724113059+7feab85df8e8/libclc/CMakeLists.txt -@@ -99,7 +99,7 @@ find_program( LLVM_CLANG clang PATHS ${L - find_program( LLVM_AS llvm-as PATHS ${LLVM_BINDIR} NO_DEFAULT_PATH ) - find_program( LLVM_LINK llvm-link PATHS ${LLVM_BINDIR} NO_DEFAULT_PATH ) - find_program( LLVM_OPT opt PATHS ${LLVM_BINDIR} NO_DEFAULT_PATH ) --find_program( LLVM_SPIRV llvm-spirv PATHS ${LLVM_BINDIR} NO_DEFAULT_PATH ) -+find_program( LLVM_SPIRV llvm-spirv PATHS ${LLVM_BINDIR}) - - # Print toolchain - message( "clang: ${LLVM_CLANG}" ) diff --git a/debian/patches/lldb-libname.diff b/debian/patches/lldb/lldb-libname.diff similarity index 100% rename from debian/patches/lldb-libname.diff rename to debian/patches/lldb/lldb-libname.diff diff --git a/debian/patches/lldb-soname.diff b/debian/patches/lldb/lldb-soname.diff similarity index 100% rename from debian/patches/lldb-soname.diff rename to debian/patches/lldb/lldb-soname.diff diff --git a/debian/patches/lldb/lldb-swig-2.diff b/debian/patches/lldb/lldb-swig-2.diff new file mode 100644 index 00000000..54763838 --- /dev/null +++ b/debian/patches/lldb/lldb-swig-2.diff @@ -0,0 +1,13 @@ +diff --git a/lldb/bindings/python/python-typemaps.swig b/lldb/bindings/python/python-typemaps.swig +index 203be803d2ebd..11f68d59ae7be 100644 +--- a/lldb/bindings/python/python-typemaps.swig ++++ b/lldb/bindings/python/python-typemaps.swig +@@ -435,7 +435,7 @@ template <> bool SetNumberFromPyObject(double &number, PyObject *obj) { + + %typemap(out) lldb::FileSP { + $result = nullptr; +- lldb::FileSP &sp = $1; ++ const lldb::FileSP &sp = $1; + if (sp) { + PythonFile pyfile = unwrapOrSetPythonException(PythonFile::FromFile(*sp)); + if (!pyfile.IsValid()) diff --git a/debian/patches/lldb/lldb-swig.diff b/debian/patches/lldb/lldb-swig.diff new file mode 100644 index 00000000..93b54528 --- /dev/null +++ b/debian/patches/lldb/lldb-swig.diff @@ -0,0 +1,26 @@ +diff --git a/lldb/bindings/CMakeLists.txt b/lldb/bindings/CMakeLists.txt +index c8aa0bcf96817..9eed2f1e62999 100644 +--- a/lldb/bindings/CMakeLists.txt ++++ b/lldb/bindings/CMakeLists.txt +@@ -26,8 +26,6 @@ set(SWIG_COMMON_FLAGS + -features autodoc + -I${LLDB_SOURCE_DIR}/include + -I${CMAKE_CURRENT_SOURCE_DIR} +- -D__STDC_LIMIT_MACROS +- -D__STDC_CONSTANT_MACROS + ${DARWIN_EXTRAS} + ) + +diff --git a/lldb/bindings/interfaces.swig b/lldb/bindings/interfaces.swig +index fb75513a0df1b..d984711bbd8a2 100644 +--- a/lldb/bindings/interfaces.swig ++++ b/lldb/bindings/interfaces.swig +@@ -1,8 +1,5 @@ + /* Various liblldb typedefs that SWIG needs to know about. */ + #define __extension__ /* Undefine GCC keyword to make Swig happy when processing glibc's stdint.h. */ +-/* The ISO C99 standard specifies that in C++ implementations limit macros such +- as INT32_MAX should only be defined if __STDC_LIMIT_MACROS is. */ +-#define __STDC_LIMIT_MACROS + %include "stdint.i" + + %include "lldb/lldb-defines.h" diff --git a/debian/patches/print-lldb-path.patch b/debian/patches/lldb/print-lldb-path.patch similarity index 100% rename from debian/patches/print-lldb-path.patch rename to debian/patches/lldb/print-lldb-path.patch diff --git a/debian/patches/test-disable-lldb-i386.diff b/debian/patches/lldb/test-disable-lldb-i386.diff similarity index 100% rename from debian/patches/test-disable-lldb-i386.diff rename to debian/patches/lldb/test-disable-lldb-i386.diff diff --git a/debian/patches/mips/mips-assert-size.diff b/debian/patches/mips/mips-assert-size.diff new file mode 100644 index 00000000..1d21e29b --- /dev/null +++ b/debian/patches/mips/mips-assert-size.diff @@ -0,0 +1,19 @@ +Index: llvm-toolchain-15_15.0.3~++20221019061539+4a2c05b05ed0/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_linux.cpp +=================================================================== +--- llvm-toolchain-15_15.0.3~++20221019061539+4a2c05b05ed0.orig/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_linux.cpp ++++ llvm-toolchain-15_15.0.3~++20221019061539+4a2c05b05ed0/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_linux.cpp +@@ -64,9 +64,12 @@ using namespace __sanitizer; + COMPILER_CHECK(struct___old_kernel_stat_sz == sizeof(struct __old_kernel_stat)); + #endif + +-COMPILER_CHECK(struct_kernel_stat_sz == sizeof(struct stat)); ++# if defined(__LP64__) || \ ++ (!defined(_LARGEFILE_SOURCE) && _FILE_OFFSET_BITS != 64) ++ COMPILER_CHECK(struct_kernel_stat_sz == sizeof(struct stat)); ++# endif + +-#if defined(__i386__) ++# if defined(__i386__) + COMPILER_CHECK(struct_kernel_stat64_sz == sizeof(struct stat64)); + #endif + diff --git a/debian/patches/remove-trailing-space-version.diff b/debian/patches/remove-trailing-space-version.diff deleted file mode 100644 index fadcf7f7..00000000 --- a/debian/patches/remove-trailing-space-version.diff +++ /dev/null @@ -1,34 +0,0 @@ -Index: llvm-toolchain-10_10.0.1~+rc1/clang/lib/Basic/Version.cpp -=================================================================== ---- llvm-toolchain-10_10.0.1~+rc1.orig/clang/lib/Basic/Version.cpp -+++ llvm-toolchain-10_10.0.1~+rc1/clang/lib/Basic/Version.cpp -@@ -125,8 +125,12 @@ std::string getClangToolFullVersion(Stri - #ifdef CLANG_VENDOR - OS << CLANG_VENDOR; - #endif -- OS << ToolName << " version " CLANG_VERSION_STRING "-" DEB_PATCHSETVERSION " " -- << getClangFullRepositoryVersion(); -+ OS << ToolName << " version " CLANG_VERSION_STRING "-" DEB_PATCHSETVERSION; -+ -+ std::string repo = getClangFullRepositoryVersion(); -+ if (!repo.empty()) { -+ OS << " " << repo; -+ } - - return OS.str(); - } -@@ -139,7 +143,13 @@ std::string getClangFullCPPVersion() { - #ifdef CLANG_VENDOR - OS << CLANG_VENDOR; - #endif -- OS << "Clang " CLANG_VERSION_STRING " " << getClangFullRepositoryVersion(); -+ OS << "Clang " CLANG_VERSION_STRING; -+ -+ std::string repo = getClangFullRepositoryVersion(); -+ if (!repo.empty()) { -+ OS << " " << repo; -+ } -+ - return OS.str(); - } - diff --git a/debian/patches/series b/debian/patches/series index eb706521..51a918f3 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,6 +1,4 @@ # Debian versions -19-clang_debian_version.patch -0003-Debian-version-info-and-bugreport.patch clang-format-version.diff clang-analyzer-force-version.diff @@ -27,7 +25,7 @@ disable-display-PASS-UNSUPPORTED-XFAIL.diff # Lib names 0044-soname.diff -lldb-soname.diff +lldb/lldb-soname.diff #lldb-libname.diff openmp-soname.diff @@ -121,13 +119,12 @@ bootstrap-fix-include-next.diff #D67877-cmake-clang-example.patch python3-shebang.patch -print-lldb-path.patch +lldb/print-lldb-path.patch lower-python-dep.diff scan-build-py-fix-default-bin.diff -libclc-llvm-spirv.diff omp-riscv64.patch -test-disable-lldb-i386.diff +lldb/test-disable-lldb-i386.diff unbreak-atomic-mips.diff llvm-fix-lld-linker-check.diff openmp-fix-runtimes-build.diff @@ -149,3 +146,4 @@ revert-update-doc.diff unwind-force-pthread-dl.diff force-sse2-compiler-rt.diff bolt-disable-emit-relocs.patch + diff --git a/debian/qualify-clang.sh b/debian/qualify-clang.sh index f56499ef..d4ef73eb 100755 --- a/debian/qualify-clang.sh +++ b/debian/qualify-clang.sh @@ -1264,7 +1264,7 @@ fi opt-$VERSION -S -polly-canonicalize matmul.s > matmul.preopt.ll > /dev/null -opt-$VERSION -basic-aa -polly-ast -analyze matmul.preopt.ll -polly-process-unprofitable > /dev/null +opt-$VERSION -basic-aa -polly-ast matmul.preopt.ll -polly-process-unprofitable > /dev/null if test ! -f /usr/lib/llvm-$VERSION/share/opt-viewer/opt-viewer.py; then echo "Install llvm-$VERSION-tools" exit 42 @@ -1374,6 +1374,9 @@ EOF fi rm -f printf.c printf fi +echo '#include ' > foo.cpp +# Fails for now +clang++-$VERSION --target=wasm32-wasi -o foo.o -c foo.cpp||true echo ' #include diff --git a/debian/rules b/debian/rules index 8f01f34d..fcd2a0f7 100755 --- a/debian/rules +++ b/debian/rules @@ -93,6 +93,16 @@ COMPILER_RT_USE_BUILTINS_LIBRARY := ON LIBCXX_EXCEPTIONS := ON LIBCXX_USE_COMPILER_RT := ON +# We want to set the clang extra version ONLY in stage 2 +# because we want the clang stage 1 to be as reproducible as possible +# when building with sccache (because this tool do a hash using the +# compiler binary and other things) +STAGE_2_CMAKE_EXTRA += -DCLANG_REPOSITORY_STRING=$(DEBIAN_REVISION) + +ifneq (,$(filter $(DEB_HOST_ARCH),sparc sparc64)) +STAGE_1_CMAKE_EXTRA += -DLLVM_PARALLEL_LINK_JOBS=4 +endif + ifneq (,$(filter $(DEB_HOST_ARCH),i386 hurd-i386 kfreebsd-i386 armel mipsel powerpc powerpcspe riscv64)) # For some reason, in the stage2 build, when clang is used to compile # itself. The atomic detection is failing on armel and riscv64. Forcing the inclusion @@ -100,32 +110,6 @@ ifneq (,$(filter $(DEB_HOST_ARCH),i386 hurd-i386 kfreebsd-i386 armel mipsel powe LDFLAGS_EXTRA += -latomic endif -ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' g++-$(GCC_VERSION)) lt 4.9-20140411-1~ ; echo $$?),0) -# Too old version of gcc. Force 4.9 - GCC_VERSION := 4.9 -endif - -ifneq (,$(filter $(DISTRO),stretch)) -# from llvm 15, we need gcc at least 7 -# No need for now. keeping in case we do in the future -# GCC_VERSION := 7 -# Don't enable lld python for old distros - STAGE_ALL_CMAKE_EXTRA += -DLLDB_ENABLE_PYTHON=OFF -# Only enabled for stage 1, for stage2, it will use the local libc++ version - STAGE_1_CMAKE_EXTRA += -DCLANG_DEFAULT_CXX_STDLIB=libc++ - STAGE_1_CMAKE_EXTRA += -DLLVM_ENABLE_LIBCXX=ON - STAGE_1_CXXFLAGS += -I/usr/lib/llvm-14/include/c++/v1/ - USE_CLANG_PACKAGE_TO_BUILD_ITSELF = yes -else -# For all other deb/ubuntu, use libstdc++ -# TODO: At some point, we might want to use libc++ - CMAKE_EXTRA += -DCLANG_DEFAULT_CXX_STDLIB=libstdc++ -# For some reasons, adding these to the arg on stretch -# breaks the build - CMAKE_EXTRA += -DBUILTINS_CMAKE_ARGS="-DCMAKE_C_FLAGS=$(STAGE_1_CFLAGS);-DCMAKE_CXX_FLAGS=$(STAGE_1_CXXFLAGS);-DCMAKE_EXE_LINKER_FLAGS=$(STAGE_1_LDFLAGS);-DCMAKE_SHARED_LINKER_FLAGS=$(STAGE_1_LDFLAGS);-DCMAKE_MODULE_LINKER_FLAGS=$(STAGE_1_LDFLAGS);-DCMAKE_BUILD_TYPE=Release;-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF" - CMAKE_EXTRA += -DRUNTIMES_CMAKE_ARGS="-DCMAKE_C_FLAGS=$(STAGE_1_CFLAGS);-DCMAKE_CXX_FLAGS=$(STAGE_1_CXXFLAGS);-DCMAKE_EXE_LINKER_FLAGS=$(STAGE_1_LDFLAGS);-DCMAKE_SHARED_LINKER_FLAGS=$(STAGE_1_LDFLAGS);-DCMAKE_MODULE_LINKER_FLAGS=$(STAGE_1_LDFLAGS);-DCMAKE_BUILD_TYPE=Release;-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF" -endif - Z3_FLAG = -DLLVM_ENABLE_Z3_SOLVER=OFF ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' libz3-dev) gt 4.7.0; echo $$?),0) # no ocaml support in main for Ubuntu @@ -260,12 +244,17 @@ else control_vars = '-Vdep:devlibs=libstdc++6-$(GCC_VERSION)-dev' endif -# Needs 16 because of opaque pointers -LLVM_SPIR_VERSION=16 -ifeq ($(shell command -v llvm-spirv-$(LLVM_SPIR_VERSION)),) -LLVM_SPIRV_INSTALLED = no +LLVM_SPIRV_VERSION := $(LLVM_VERSION) +LLVM_SPIRV := $(shell bash -c "command -v llvm-spirv-$(LLVM_SPIRV_VERSION)" 2>/dev/null) +ifndef LLVM_SPIRV + LLVM_SPIRV_VERSION := $(shell expr $(LLVM_VERSION) - 1) + LLVM_SPIRV := $(shell bash -c "command -v llvm-spirv-$(LLVM_SPIRV_VERSION)" 2>/dev/null) +endif + +ifndef LLVM_SPIRV + LLVM_SPIRV_INSTALLED = no else - ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' llvm-spirv-$(LLVM_SPIR_VERSION)) gt 16.0.0 ; echo $$?),0) + ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' llvm-spirv-$(LLVM_SPIRV_VERSION)) gt 14.0.0 ; echo $$?),0) # Too old llvm-spirv version are failing. See #52200 LLVM_SPIRV_INSTALLED = yes else @@ -274,8 +263,10 @@ else endif LIBCLC_TARGETS_TO_BUILD="amdgcn--;amdgcn--amdhsa;amdgcn-mesa-mesa3d;r600--;nvptx--;nvptx64--;nvptx--nvidiacl;nvptx64--nvidiacl" +LIBCLC_LLVM_SPIRV = ifeq ($(LLVM_SPIRV_INSTALLED),yes) LIBCLC_TARGETS_TO_BUILD := $(LIBCLC_TARGETS_TO_BUILD)";spirv-mesa3d-;spirv64-mesa3d-" + LIBCLC_LLVM_SPIRV = "-DLLVM_SPIRV=$(LLVM_SPIRV)" endif BINUTILS_GOLD_ARCHS := amd64 arm64 armhf i386 ppc64 ppc64el x32 s390x hurd-i386 kfreebsd-amd64 kfreebsd-i386 @@ -423,8 +414,8 @@ ifeq (,$(filter-out $(LTO_DISABLE_ARCHS), $(DEB_HOST_ARCH))) else # Disable for now because of # https://github.com/llvm/llvm-project/issues/58317#issuecomment-1276190743 - # LTO_ENABLE=yes - # STAGE_2_CMAKE_EXTRA += -DLLVM_ENABLE_LTO="On" +# LTO_ENABLE=yes +# STAGE_2_CMAKE_EXTRA += -DLLVM_ENABLE_LTO="On" endif endif @@ -459,6 +450,15 @@ ifeq ($(shell test -e /tmp/cmake/bin/cmake && echo -n yes),yes) export LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:/tmp/cmake/bin/ endif +SCCACHE_ENABLE=no +# if sccache is installed in the chroot, use it +ifeq ($(shell test -e /opt/sccache/sccache && echo -n yes),yes) + SCCACHE_CMAKE = -DCMAKE_C_COMPILER_LAUNCHER=/opt/sccache/sccache -DCMAKE_CXX_COMPILER_LAUNCHER=/opt/sccache/sccache + STAGE_1_CMAKE_EXTRA += $(SCCACHE_CMAKE) + SCCACHE_ENABLE=yes + export LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:/opt/sccache +endif + # enables cmake build targets like stage2-[target_name] ENABLED_STAGE2_CMAKE_BUILD_TARGETS = check-all;check-llvm;check-clang;check-clang-tools;check-lld;check-libcxx;check-libcxxabi;check-mlir;check-sanitizer;llvm-config;test-suite @@ -530,12 +530,12 @@ preconfigure: fi; \ fi - # Conditionally enable *.spv files. Debian buster and Ubuntu 18.04 - # don't have llvm-spirv to create the *.spv files. - if test "$(LLVM_SPIRV_INSTALLED)" = "no"; then \ - echo "" > debian/libclc-$(LLVM_VERSION).install; \ - echo "" > debian/libclc-$(LLVM_VERSION)-dev.install; \ - fi +ifdef LLVM_SPIRV + # llvm-spirv was found, so we can enable *.spv files. Debian + # buster and Ubuntu 18.04 don't have llvm-spirv to create the + # *.spv files. + sed -i -e "s|#spv\ ||g" debian/libclc-$(LLVM_VERSION).install +endif if test "$(DISTRO)" = "stretch"; then \ echo "" > debian/python3-lldb-$(LLVM_VERSION).install; \ fi @@ -551,12 +551,13 @@ override_dh_ocamlclean: override_dh_ocaml: override_dh_auto_configure: preconfigure + if test -f /opt/sccache/sccache; then \ + ls -al /opt/sccache/*; \ + fi echo "Using gcc: " $(CC) -v + $(CXX) -v mkdir -p $(TARGET_BUILD) - mkdir -p clang/include/clang/Debian - sed -e "s|@DEB_PATCHSETVERSION@|$(DEBIAN_REVISION)|" \ - debian/debian_path.h > clang/include/clang/Debian/debian_path.h if test "$(SCAN_BUILD)" = "yes"; then \ patch -f -p1 < debian/patches/on-the-fly/use-scan-build-runtimes.diff||true; \ fi @@ -589,7 +590,12 @@ override_dh_auto_configure: preconfigure #- to libc++ when libunwind is built #- Matches what is done on brew: #- https://bit.ly/3kDNpC9 - +ifeq (${SCCACHE_ENABLE},yes) +# Just in case... + /opt/sccache/sccache --stop-server||true +# Start the sccache server with the right set of options to use GCP + SCCACHE_LOG=sccache=debug SCCACHE_ERROR_LOG=/opt/sccache/sccache.log SCCACHE_GCS_KEY_PATH=/opt/sccache/secret-gcp-storage.json SCCACHE_GCS_BUCKET=apt-llvm-org-sccache SCCACHE_GCS_RW_MODE=READ_WRITE /opt/sccache/sccache --start-server +endif echo "Running tests: $(RUN_TEST)" echo "Using cmake: $(CMAKE_BIN)"; \ LD_LIBRARY_PATH=$$LD_LIBRARY_PATH \ @@ -715,13 +721,13 @@ endif touch $@ debian-libclc-build: -ifeq ($(LLVM_SPIRV_INSTALLED),yes) # Builds libclc mkdir -p libclc/build echo "Using cmake: $(CMAKE_BIN)" cd libclc/build && \ $(CMAKE_BIN) ../ \ -G Ninja \ + $(SCCACHE_CMAKE) \ -DCMAKE_C_COMPILER=$(STAGE_2_BIN_DIR)/clang \ -DCMAKE_CXX_COMPILER=$(STAGE_2_BIN_DIR)/clang++ \ -DCMAKE_C_FLAGS="$(opt_flags) $(STAGE_2_CFLAGS)" \ @@ -733,11 +739,11 @@ ifeq ($(LLVM_SPIRV_INSTALLED),yes) -DCMAKE_INSTALL_DATADIR=lib \ -DCMAKE_INSTALL_INCLUDEDIR=include \ -DLLVM_CONFIG=$(STAGE_2_BIN_DIR)/llvm-config \ - -DLLVM_SPIRV=/usr/bin/llvm-spirv-$(LLVM_SPIR_VERSION) \ + $(LIBCLC_LLVM_SPIRV) \ -DLIBCLC_TARGETS_TO_BUILD=$(LIBCLC_TARGETS_TO_BUILD); \ ninja -j $(NJOBS) $(VERBOSE) -else - echo "libclc isn't built LLVM_SPIRV_INSTALLED=$(LLVM_SPIRV_INSTALLED)" +ifndef LLVM_SPIRV + echo "libclc built without SPIRV (.spv) outputs because llvm-spirv wasn't found" endif touch $@ @@ -748,6 +754,7 @@ ifeq (${COMPILER_RT_WASM_ENABLE},yes) mkdir -p build-compiler-rt-$$build; \ $(CMAKE_BIN) -B build-compiler-rt-$$build -S compiler-rt/lib/builtins/ \ -G Ninja \ + $(SCCACHE_CMAKE) \ -DCMAKE_C_COMPILER_TARGET=$$build-unknown-unknown \ -DCMAKE_CXX_COMPILER_TARGET=$$build-unknown-unknown \ -DCMAKE_ASM_COMPILER_TARGET=$$build-unknown-unknown \ @@ -776,7 +783,16 @@ else endif touch $@ -override_dh_auto_build: debian-full-build debian-libfuzzer-build debian-libclc-build debian-rtlib-wasm-build + +sccache-stats: +# If we used sccache, shows stats + if test -f /opt/sccache/sccache; then \ + ls -al /opt/sccache/; \ + /opt/sccache/sccache --show-stats; \ + fi + touch $@ + +override_dh_auto_build: debian-full-build debian-libfuzzer-build debian-libclc-build debian-rtlib-wasm-build sccache-stats override_dh_prep: build_doc dh_prep @@ -842,11 +858,6 @@ 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) -ifeq (${LTO_ENABLE},yes) - # with LTO, .a contains llvm ir instead of native code. So, recompile them - NJOBS="$(NJOBS)" P_TO_LLVM="$(CURDIR)" VERSION=$(LLVM_VERSION) bash -v debian/llvm-compile-lto-elf.sh $(CXXFLAGS_EXTRA) -endif - # install/fast enables a make install without recompiling temporary files LD_LIBRARY_PATH=$(STAGE_2_LIB_DIR):$$LD_LIBRARY_PATH DESTDIR=$(DEB_INST)/ ninja -C $(TARGET_BUILD) $(VERBOSE) stage2-install @@ -925,9 +936,7 @@ endif # Remove an osx file rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/libbolt_rt_instr_osx.a -ifeq ($(LLVM_SPIRV_INSTALLED),yes) DESTDIR=$(DEB_INST) ninja $(VERBOSE) -C libclc/build install -endif ifeq (${COMPILER_RT_WASM_ENABLE},yes) DESTDIR=$(DEB_INST) ninja $(VERBOSE) -C build-compiler-rt-wasm32 install @@ -978,10 +987,11 @@ endif # Also disable mlir-* checks in the cmake sed -i '/_IMPORT_CHECK_TARGETS \(mlir-\|MLIR\)/ {s|^|#|}' $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/llvm/LLVMExports-*.cmake - sed -i '/_IMPORT_CHECK_TARGETS tblgen-lsp-server/ {s|^|#|}' $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/llvm/LLVMExports-*.cmake - sed -i '/_IMPORT_CHECK_TARGETS mlir-tblgen/ {s|^|#|}' $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/llvm/LLVMExports-*.cmake - sed -i '/_IMPORT_CHECK_FILES_FOR_\(mlir\|tblgen-lsp-server\|llvm-bat-dump\|llvm-bolt\|merge-fdata\|MLIR\)/ {s|^|#|}' $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/llvm/LLVMExports-*.cmake - sed -i '/_cmake_import_check_files_for_\(mlir\|tblgen-lsp-server\|llvm-bat-dump\|llvm-bolt\|merge-fdata\|MLIR\)/ {s|^|#|}' $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/llvm/LLVMExports-*.cmake + + sed -i '/_cmake_import_check_files_for_.*\/bin\/.*/ {s|^|#|}' $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/llvm/LLVMExports-*.cmake $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/clang/ClangTargets-*.cmake + sed -i '/_IMPORT_CHECK_FILES_FOR_.*\/bin\/.*/ {s|^|#|}' $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/llvm/LLVMExports-*.cmake $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/clang/ClangTargets-*.cmake + sed -i '/_IMPORT_CHECK_FILES_FOR_\(mlir-\|Polly\|MLIR\)/ {s|^|#|}' $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/llvm/LLVMExports-*.cmake $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/clang/ClangTargets-*.cmake + sed -i '/_cmake_import_check_files_for_\(mlir\|Polly\|MLIR\)/ {s|^|#|}' $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/llvm/LLVMExports-*.cmake $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/clang/ClangTargets-*.cmake # Disable CMake's package validation checks for binaries that may not be installed sed -i 's|.*_IMPORT_CHECK_FILES_FOR_.*/bin/.*)|#&|' $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/cmake/clang/ClangTargets-*.cmake @@ -1101,7 +1111,16 @@ endif endif dh_install --fail-missing -override_dh_installdeb: + +repack_a_llvm_ir: +ifeq (${LTO_ENABLE},yes) +# with LTO, .a contains llvm ir instead of native code. So, recompile them + NJOBS="$(NJOBS)" P_TO_LLVM="$(CURDIR)" VERSION=$(LLVM_VERSION) bash -v debian/llvm-compile-lto-elf.sh $(CXXFLAGS_EXTRA) +endif + touch $@ + + +override_dh_installdeb: repack_a_llvm_ir # Managed by the package dh_installdeb -a @@ -1159,10 +1178,8 @@ ifeq (,$(filter $(DEB_HOST_ARCH), i386)) ninja $(VERBOSE) -C $(TARGET_BUILD_STAGE2) check-mlir || true endif -ifeq ($(LLVM_SPIRV_INSTALLED),yes) # Libclc ninja $(VERBOSE) -C libclc/build test || true -endif # LLDB tests ifeq (,$(filter $(DEB_HOST_ARCH), $(LLDB_DISABLE_ARCHS) armhf armel)) @@ -1210,7 +1227,7 @@ override_dh_gencontrol: override_dh_auto_clean: - rm -rf $(TARGET_BUILD) tools/clang/include/clang/Debian/debian_path.h llvm/docs/_build/ clang/docs/_build tools/clang/docs/_html/ + rm -rf $(TARGET_BUILD) llvm/docs/_build/ clang/docs/_build tools/clang/docs/_html/ # QA tools rm -rf cov-int/ reports/ rm -f `ls debian/*.in|sed -e "s|.in$$||g"`