diff --git a/debian/NEWS b/debian/NEWS index c66f9f8f..63cd553a 100644 --- a/debian/NEWS +++ b/debian/NEWS @@ -1,5 +1,7 @@ -llvm-toolchain-snapshot (1:7~svn322880-1) unstable; urgency=medium +llvm-toolchain-7 (1:7-1) unstable; urgency=medium + * From version 7, llvm-toolchain also provides libc++, libc++abi + and OpenMP packages * Packages, binaries and libraries have been renamed. Instead of the X.Y naming, we moved to X to match the naming from upstream. diff --git a/debian/changelog b/debian/changelog index 56d1e140..9469d941 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,19 @@ +llvm-toolchain-7 (1:7~+rc2-1~exp2) experimental; urgency=medium + + * Force sphinx to be >> 1.2.3 + * also ignore libc++experimental.a on dh_strip (fails on stretch) + * Make libc++-7-dev & libc++abi-7-dev coinstallable + + [ John Paul Adrian Glaubitz ] + * Don't build with ld.gold on powerpcspe + * Disable polly on powerpcspe + * Add upstream patch to make rustc build on powerpc + + [ Gianfranco Costamagna ] + * Enable lld on ppc64el + + -- Sylvestre Ledru Fri, 24 Aug 2018 15:19:54 +0200 + llvm-toolchain-7 (1:7~+rc2-1~exp1) experimental; urgency=medium * New snapshot release diff --git a/debian/control b/debian/control index 6fb6de2b..2269f19e 100644 --- a/debian/control +++ b/debian/control @@ -6,7 +6,8 @@ Uploaders: Sylvestre Ledru Build-Depends: debhelper (>= 9.0), flex, bison, dejagnu, tcl, expect, cmake, perl, libtool, chrpath, texinfo, sharutils, libffi-dev (>= 3.0.9), lsb-release, patchutils, diffstat, xz-utils, python-dev, - libedit-dev, libncurses5-dev, swig, python-six, python-sphinx, binutils-dev, + libedit-dev, libncurses5-dev, swig, python-six, python-sphinx (>= 1.3.6), + binutils-dev, libjsoncpp-dev, pkg-config, lcov, procps, help2man, zlib1g-dev, g++-multilib [amd64 i386 kfreebsd-amd64 mips mips64 mips64el mipsel powerpc ppc64 s390 s390x sparc sparc64 x32], @@ -378,8 +379,8 @@ Description: Modular compiler and toolchain technologies, examples # ------------- lld ------------- Package: lld-7 -Architecture: amd64 armel armhf i386 kfreebsd-amd64 kfreebsd-i386 s390 sparc alpha hppa m68k powerpcspe ppc64 sh4 sparc64 x32 mips mipsel -# ia64 mips mipsel hurd powerpc ppc64el have been removed +Architecture: amd64 arm64 armel armhf i386 mips mipsel mips64el ppc64el kfreebsd-amd64 kfreebsd-i386 s390 sparc alpha hppa m68k powerpcspe ppc64 sh4 sparc64 x32 +# ia64 hurd powerpc have been removed Depends: ${shlibs:Depends}, ${misc:Depends}, libllvm7 (= ${binary:Version}), llvm-7-dev Pre-Depends: ${misc:Pre-Depends} Description: LLVM-based linker @@ -388,8 +389,8 @@ Description: LLVM-based linker Project. Package: liblld-7 -Architecture: amd64 armel armhf i386 kfreebsd-amd64 kfreebsd-i386 s390 sparc alpha hppa m68k powerpcspe ppc64 sh4 sparc64 x32 mips mipsel -# ia64 mips mipsel hurd powerpc ppc64el have been removed +Architecture: amd64 arm64 armel armhf i386 mips mipsel mips64el ppc64el kfreebsd-amd64 kfreebsd-i386 s390 sparc alpha hppa m68k powerpcspe ppc64 sh4 sparc64 x32 +# ia64 hurd powerpc have been removed Depends: ${shlibs:Depends}, ${misc:Depends}, libllvm7 (= ${binary:Version}) Pre-Depends: ${misc:Pre-Depends} Section: libs @@ -402,8 +403,8 @@ Description: LLVM-based linker, library Package: liblld-7-dev Section: libdevel -Architecture: amd64 armel armhf i386 kfreebsd-amd64 kfreebsd-i386 s390 sparc alpha hppa m68k powerpcspe ppc64 sh4 sparc64 x32 mips mipsel -# ia64 mips mipsel hurd powerpc ppc64el have been removed +Architecture: amd64 arm64 armel armhf i386 mips mipsel mips64el ppc64el kfreebsd-amd64 kfreebsd-i386 s390 sparc alpha hppa m68k powerpcspe ppc64 sh4 sparc64 x32 +# ia64 hurd powerpc have been removed Depends: ${shlibs:Depends}, ${misc:Depends}, lld-7 (= ${binary:Version}), liblld-7 (= ${binary:Version}) Pre-Depends: ${misc:Pre-Depends} @@ -418,8 +419,8 @@ Description: LLVM-based linker, header files # ------------- lldb ------------- Package: lldb-7 -Architecture: amd64 armel armhf i386 kfreebsd-amd64 kfreebsd-i386 s390 sparc hppa m68k sh4 x32 mips mipsel arm64 ppc64el -# ia64 mips mipsel hurd powerpc powerpcspe ppc64 alpha s390x sparc64 have been removed +Architecture: amd64 arm64 armel armhf i386 mips mipsel mips64el ppc64el kfreebsd-amd64 kfreebsd-i386 s390 sparc hppa m68k sh4 x32 +# ia64 hurd powerpc powerpcspe ppc64 alpha s390x sparc64 have been removed Depends: ${shlibs:Depends}, ${misc:Depends}, libllvm7 (= ${binary:Version}), llvm-7-dev, python-lldb-7 Pre-Depends: ${misc:Pre-Depends} @@ -429,8 +430,8 @@ Description: Next generation, high-performance debugger Project, such as the Clang expression parser and LLVM disassembler. Package: liblldb-7 -Architecture: amd64 armel armhf i386 kfreebsd-amd64 kfreebsd-i386 s390 sparc hppa m68k sh4 x32 mips mipsel arm64 ppc64el -# ia64 mips mipsel hurd powerpc powerpcspe ppc64 alpha s390x sparc64 have been removed +Architecture: amd64 arm64 armel armhf i386 mips mipsel mips64el ppc64el kfreebsd-amd64 kfreebsd-i386 s390 sparc hppa m68k sh4 x32 +# ia64 hurd powerpc powerpcspe ppc64 alpha s390x sparc64 have been removed Depends: ${shlibs:Depends}, ${misc:Depends}, libllvm7 (= ${binary:Version}) Pre-Depends: ${misc:Pre-Depends} Section: libs @@ -445,8 +446,8 @@ Description: Next generation, high-performance debugger, library Package: python-lldb-7 Section: python -Architecture: amd64 armel armhf i386 kfreebsd-amd64 kfreebsd-i386 s390 sparc hppa m68k sh4 x32 mips mipsel arm64 ppc64el -# ia64 mips mipsel hurd powerpc powerpcspe ppc64 alpha s390x sparc64 have been removed +Architecture: amd64 arm64 armel armhf i386 mips mipsel mips64el ppc64el kfreebsd-amd64 kfreebsd-i386 s390 sparc hppa m68k sh4 x32 +# ia64 hurd powerpc powerpcspe ppc64 alpha s390x sparc64 have been removed Depends: ${shlibs:Depends}, ${misc:Depends}, liblldb-7-dev, python, python-six Conflicts: python-lldb-3.8, python-lldb-3.9, python-lldb-x.y Replaces: python-lldb-x.y @@ -462,8 +463,8 @@ Description: Next generation, high-performance debugger, python lib Package: liblldb-7-dev Section: libdevel -Architecture: amd64 armel armhf i386 kfreebsd-amd64 kfreebsd-i386 s390 sparc hppa m68k sh4 x32 mips mipsel arm64 ppc64el -# ia64 mips mipsel hurd powerpc powerpcspe ppc64 alpha s390x sparc64 have been removed +Architecture: amd64 arm64 armel armhf i386 mips mipsel mips64el ppc64el kfreebsd-amd64 kfreebsd-i386 s390 sparc hppa m68k sh4 x32 +# ia64 hurd powerpc powerpcspe ppc64 alpha s390x sparc64 have been removed Depends: ${shlibs:Depends}, ${misc:Depends}, lldb-7 (= ${binary:Version}) Replaces: lldb-7-dev (<= 7~svn215195-2) Breaks: lldb-7-dev (<< 7~svn215195-2) @@ -589,9 +590,9 @@ Section: libdevel Architecture: any Multi-Arch: same Depends: libc++abi1-7 (= ${binary:Version}), ${misc:Depends} -Replaces: libc++-dev (<= 6.0.1-1), libc++-7-dev, libc++abi-dev (<= 6.0.1-1) -Breaks: libc++-dev (<= 6.0.1-1), libc++-7-dev, libc++abi-dev (<= 6.0.1-1) -Provides: libc++-dev, libc++-7-dev, libc++abi-dev +Replaces: libc++-dev (<= 6.0.1-1), libc++abi-dev (<= 6.0.1-1) +Breaks: libc++-dev (<= 6.0.1-1), libc++abi-dev (<= 6.0.1-1) +Provides: libc++abi-dev Description: LLVM low level support for a standard C++ library (development files) libc++abi is another implementation of low level support for a standard C++ library. diff --git a/debian/patches/D51108.diff b/debian/patches/D51108.diff new file mode 100644 index 00000000..aa7f7196 --- /dev/null +++ b/debian/patches/D51108.diff @@ -0,0 +1,65 @@ +Index: llvm-toolchain-6.0-6.0.1/lib/Target/PowerPC/PPCISelLowering.cpp +=================================================================== +--- llvm-toolchain-6.0-6.0.1.orig/lib/Target/PowerPC/PPCISelLowering.cpp ++++ llvm-toolchain-6.0-6.0.1/lib/Target/PowerPC/PPCISelLowering.cpp +@@ -3351,9 +3351,14 @@ + // Argument stored in memory. + assert(VA.isMemLoc()); + ++ // Get the extended size of the argument type in stack + unsigned ArgSize = VA.getLocVT().getStoreSize(); +- int FI = MFI.CreateFixedObject(ArgSize, VA.getLocMemOffset(), +- isImmutable); ++ // Get the actual size of the argument type ++ unsigned ObjSize = VA.getValVT().getStoreSize(); ++ unsigned ArgOffset = VA.getLocMemOffset(); ++ // Stack objects in PPC32 are right justified. ++ ArgOffset += ArgSize - ObjSize; ++ int FI = MFI.CreateFixedObject(ArgSize, ArgOffset, isImmutable); + + // Create load nodes to retrieve arguments from the stack. + SDValue FIN = DAG.getFrameIndex(FI, PtrVT); +@@ -5303,10 +5308,11 @@ + Arg = PtrOff; + } + +- if (VA.isRegLoc()) { +- if (Arg.getValueType() == MVT::i1) +- Arg = DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i32, Arg); ++ // Ensure callee will get either 0x00000001 or 0x00000000. ++ if (Arg.getValueType() == MVT::i1) ++ Arg = DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i32, Arg); + ++ if (VA.isRegLoc()) { + seenFloatArg |= VA.getLocVT().isFloatingPoint(); + // Put argument in a physical register. + RegsToPass.push_back(std::make_pair(VA.getLocReg(), Arg)); +Index: llvm-toolchain-6.0-6.0.1/test/CodeGen/PowerPC/ppc32-i1-stack-arguments-abi-bug.ll +=================================================================== +--- /dev/null ++++ llvm-toolchain-6.0-6.0.1/test/CodeGen/PowerPC/ppc32-i1-stack-arguments-abi-bug.ll +@@ -0,0 +1,24 @@ ++; RUN: llc -verify-machineinstrs < %s -mcpu=ppc32 -mattr=+crbits | FileCheck %s ++target triple = "powerpc-unknown-linux-gnu" ++ ++define zeroext i1 @check_callee( ++ i1 zeroext, i1 zeroext, i1 zeroext, i1 zeroext, ++ i1 zeroext, i1 zeroext, i1 zeroext, i1 zeroext, ++ i1 zeroext %s1 ++) { ++ call void @check_caller( ++ i1 zeroext true, i1 zeroext true, i1 zeroext true, i1 zeroext true, ++ i1 zeroext true, i1 zeroext true, i1 zeroext true, i1 zeroext true, ++ i1 zeroext %s1) ++ ret i1 true ++} ++ ++; CHECK-LABEL: @check_callee ++; CHECK: lbz {{[0-9]+}}, 27(1) ++; CHECK: stw {{[0-9]+}}, 8(1) ++ ++declare void @check_caller( ++ i1 zeroext, i1 zeroext, i1 zeroext, i1 zeroext, ++ i1 zeroext, i1 zeroext, i1 zeroext, i1 zeroext, ++ i1 zeroext ++) diff --git a/debian/patches/series b/debian/patches/series index b1d83219..bdfeff29 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -58,7 +58,7 @@ impl-path-hurd.diff openmp-check-execstack.diff openmp-soname.diff openmp-mips-affinity.patch - +D51108.diff # libcxx libcxxabi-test-don-t-fail-extended-long-double.patch diff --git a/debian/qualify-clang.sh b/debian/qualify-clang.sh index 2c4427f3..95144733 100644 --- a/debian/qualify-clang.sh +++ b/debian/qualify-clang.sh @@ -187,9 +187,8 @@ int main(void) { clang-$VERSION foo.c -fopenmp -o o ./o > /dev/null - -if test ! -f /usr/lib/llvm-$VERSION/lib/libomp.so; then - echo "Install libomp-$VERSION-dev"; +if test ! -f /usr/lib/llvm-$VERSION/include/c++/v1/vector; then + echo "Install libc++-$VERSION-dev"; exit -1; fi @@ -221,12 +220,34 @@ if ! ldd o 2>&1|grep -q libc++abi.so.1; then echo "not linked against libc++abi.so.1" exit -1 fi + ./o > /dev/null clang++-$VERSION -std=c++11 -stdlib=libc++ foo.cpp -o o ./o > /dev/null clang++-$VERSION -std=c++14 -stdlib=libc++ foo.cpp -lc++experimental -o o ./o > /dev/null +if test ! -f /usr/lib/llvm-$VERSION/include/cxxabi.h; then + echo "Install libc++abi-$VERSION-dev"; + exit -1; +fi + +# Force the usage of libc++abi +clang++-$VERSION -stdlib=libc++ -lc++abi foo.cpp -o o +./o > /dev/null +if ! ldd o 2>&1|grep -q libc++abi.so.1; then + echo "not linked against libc++abi.so.1" + exit -1 +fi + +# Use the libc++abi and uses the libstc++ headers +clang++-$VERSION -lc++abi foo.cpp -o o +./o > /dev/null +if ! ldd o 2>&1|grep -q libstdc++.so.; then + echo "not linked against libstdc++" + exit -1 +fi + # fs from C++17 echo ' #include diff --git a/debian/rules b/debian/rules index 8aa78783..7283a2c7 100755 --- a/debian/rules +++ b/debian/rules @@ -57,7 +57,7 @@ ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' bin ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' g++-$(GCC_VERSION)) lt 7.1.0-7~ || \ dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' g++-$(GCC_VERSION)) ge 7.2.0-2; echo $$?),0) # Only pass -gsplit-dwarf with working version of gcc 7 -# More: https://bugs.llvm.org/show_bug.cgi?id=34140 & https://bugs.debian.org/873709 +# More: https://bugs.llvm.org/show_bug.cgi?id=34140 & https://bugs.debian.org/873609 CXXFLAGS_EXTRA += -gsplit-dwarf else $(error "Broken gcc version for -gsplit-dwarf support. Please use < gcc 7 or >= 7.2.0-2") @@ -95,7 +95,7 @@ else control_vars = '-Vdep:devlibs=libstdc++6-$(GCC_VERSION)-dev' endif -BINUTILS_GOLD_ARCHS := amd64 arm64 armhf i386 powerpcspe ppc64 ppc64el sparc sparc64 x32 s390x +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) @@ -107,7 +107,7 @@ endif # Enable polly (or not) POLLY_ENABLE=yes -ifeq (,$(filter-out $(DEB_HOST_ARCH), powerpc s390x)) +ifeq (,$(filter-out $(DEB_HOST_ARCH), powerpc powerpcspe s390x)) POLLY_ENABLE=no endif @@ -157,7 +157,7 @@ else endif LLDB_ENABLE=yes -LLDB_DISABLE_ARCHS := hurd-i386 ia64 mips64el powerpc powerpcspe ppc64 s390x sparc64 +LLDB_DISABLE_ARCHS := hurd-i386 ia64 powerpc powerpcspe ppc64 s390x sparc64 # hurd has threading issues ifeq (,$(filter-out $(LLDB_DISABLE_ARCHS), $(DEB_HOST_ARCH))) # Disable LLDB for this arch. @@ -609,7 +609,7 @@ endif # endif ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' binutils) ge 2.28 ; echo $$?),0) # strip segfaults on libFuzzer.a - dh_strip -a -v -XlibFuzzer.a -Xlibc++.a -Xlibc++abi.a + dh_strip -a -v -XlibFuzzer.a -Xlibc++.a -Xlibc++abi.a -Xlibc++experimental.a else dh_strip -a -v endif