diff --git a/debian/changelog b/debian/changelog index 9760a758..8b8f5def 100644 --- a/debian/changelog +++ b/debian/changelog @@ -6,6 +6,13 @@ llvm-toolchain-10 (1:10.0.0-3) unstable; urgency=medium * Cherry-pick upstream patch D74453 to fix atomic compare-and-swap on riscv64. + [ William Grant ] + * debian/patches/riscv64-multilib-empty.patch: Adjust riscv64 GCC detector + to also check for existence of crtbegin.o in the default multilib dir, + like most other ports. Fixes FTBFS on riscv64, since on Ubuntu + /usr/lib/gcc/riscv64-linux-gnu/10 exists but is empty (gcc-10-base is + installed, but libgcc-10-dev is not). + -- Sylvestre Ledru Thu, 02 Apr 2020 21:48:13 +0200 llvm-toolchain-10 (1:10.0.0-2) unstable; urgency=medium diff --git a/debian/patches/riscv64-multilib-empty.patch b/debian/patches/riscv64-multilib-empty.patch new file mode 100644 index 00000000..3a9fdf76 --- /dev/null +++ b/debian/patches/riscv64-multilib-empty.patch @@ -0,0 +1,57 @@ +Index: llvm-toolchain-10-10.0.0/clang/lib/Driver/ToolChains/Gnu.cpp +=================================================================== +--- llvm-toolchain-10-10.0.0.orig/clang/lib/Driver/ToolChains/Gnu.cpp ++++ llvm-toolchain-10-10.0.0/clang/lib/Driver/ToolChains/Gnu.cpp +@@ -1570,13 +1570,16 @@ static void findRISCVBareMetalMultilibs( + Result.Multilibs = RISCVMultilibs; + } + +-static void findRISCVMultilibs(const Driver &D, ++static bool findRISCVMultilibs(const Driver &D, + const llvm::Triple &TargetTriple, StringRef Path, + const ArgList &Args, DetectedMultilibs &Result) { +- if (TargetTriple.getOS() == llvm::Triple::UnknownOS) +- return findRISCVBareMetalMultilibs(D, TargetTriple, Path, Args, Result); ++ if (TargetTriple.getOS() == llvm::Triple::UnknownOS) { ++ findRISCVBareMetalMultilibs(D, TargetTriple, Path, Args, Result); ++ return true; ++ } + + FilterNonExistent NonExistent(Path, "/crtbegin.o", D.getVFS()); ++ Multilib Default; + Multilib Ilp32 = makeMultilib("lib32/ilp32").flag("+m32").flag("+mabi=ilp32"); + Multilib Ilp32f = + makeMultilib("lib32/ilp32f").flag("+m32").flag("+mabi=ilp32f"); +@@ -1587,7 +1590,7 @@ static void findRISCVMultilibs(const Dri + Multilib Lp64d = makeMultilib("lib64/lp64d").flag("+m64").flag("+mabi=lp64d"); + MultilibSet RISCVMultilibs = + MultilibSet() +- .Either({Ilp32, Ilp32f, Ilp32d, Lp64, Lp64f, Lp64d}) ++ .Either({Default, Ilp32, Ilp32f, Ilp32d, Lp64, Lp64f, Lp64d}) + .FilterOut(NonExistent); + + Multilib::flags_list Flags; +@@ -1603,8 +1606,11 @@ static void findRISCVMultilibs(const Dri + addMultilibFlag(ABIName == "lp64f", "mabi=lp64f", Flags); + addMultilibFlag(ABIName == "lp64d", "mabi=lp64d", Flags); + +- if (RISCVMultilibs.select(Flags, Result.SelectedMultilib)) +- Result.Multilibs = RISCVMultilibs; ++ if (!RISCVMultilibs.select(Flags, Result.SelectedMultilib)) ++ return false; ++ ++ Result.Multilibs = RISCVMultilibs; ++ return true; + } + + static bool findBiarchMultilibs(const Driver &D, +@@ -2382,7 +2388,8 @@ bool Generic_GCC::GCCInstallationDetecto + if (!findMIPSMultilibs(D, TargetTriple, Path, Args, Detected)) + return false; + } else if (TargetTriple.isRISCV()) { +- findRISCVMultilibs(D, TargetTriple, Path, Args, Detected); ++ if (!findRISCVMultilibs(D, TargetTriple, Path, Args, Detected)) ++ return false; + } else if (isMSP430(TargetArch)) { + findMSP430Multilibs(D, TargetTriple, Path, Args, Detected); + } else if (TargetArch == llvm::Triple::avr) { diff --git a/debian/patches/series b/debian/patches/series index 3227ab24..2eed081b 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -145,3 +145,4 @@ d21664cce1db8debe2528f36b1fbd2b8af9c9401.patch 0001-systemz-allow-configuring-default-SYSTEMZ_DEFAULT_AR.patch D76596.diff +riscv64-multilib-empty.patch