From 63bf60b28490cfacd3aaa03a77e350caf79cd626 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Mon, 12 Mar 2018 20:39:40 +0000 Subject: [PATCH] Fix toolchain detection so we don't default to using cross-compilers rhbz#1482491 --- ...Prefer-vendor-supplied-gcc-toolchain.patch | 120 ++++++++++++++++++ clang.spec | 8 +- 2 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 0001-Driver-Prefer-vendor-supplied-gcc-toolchain.patch diff --git a/0001-Driver-Prefer-vendor-supplied-gcc-toolchain.patch b/0001-Driver-Prefer-vendor-supplied-gcc-toolchain.patch new file mode 100644 index 0000000..1b9d0e0 --- /dev/null +++ b/0001-Driver-Prefer-vendor-supplied-gcc-toolchain.patch @@ -0,0 +1,120 @@ +From 69d981a5d41d481556bd38f8d668d7f1177ac2b4 Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Thu, 18 Jan 2018 02:57:51 +0000 +Subject: [PATCH] Driver: Prefer vendor supplied gcc toolchain + +Summary: +This patch fixes an issue on Fedora where if you had the x86_64 cross +compiler installed on your x86_64 system, then clang would use that compiler +as the default toolchain. This was happening because the cross compiler +is installed to /usr/lib/gcc/x86_64-linux-gnu/ and this directory comes before +the default compiler directory (/usr/lib/gcc/x86_64-redhat-linux/) in the search +list. + +This patch re-orders the search list so that vendor supplied gcc toolchains +are selected before toolchains with a generic target, which should prevent +these kind of issues on other OSes too. + +Subscribers: srhines, cfe-commits + +Differential Revision: https://reviews.llvm.org/D42608 +--- + lib/Driver/ToolChains/Gnu.cpp | 45 ++++++++++++++++++++++--------------------- + 1 file changed, 23 insertions(+), 22 deletions(-) + +diff --git a/lib/Driver/ToolChains/Gnu.cpp b/lib/Driver/ToolChains/Gnu.cpp +index 7845781..9cec316 100644 +--- a/lib/Driver/ToolChains/Gnu.cpp ++++ b/lib/Driver/ToolChains/Gnu.cpp +@@ -1709,8 +1709,8 @@ bool Generic_GCC::GCCInstallationDetector::getBiarchSibling(Multilib &M) const { + // lifetime or initialization issues. + static const char *const AArch64LibDirs[] = {"/lib64", "/lib"}; + static const char *const AArch64Triples[] = { +- "aarch64-none-linux-gnu", "aarch64-linux-gnu", "aarch64-linux-android", +- "aarch64-redhat-linux", "aarch64-suse-linux"}; ++ "aarch64-redhat-linux", "aarch64-suse-linux", ++ "aarch64-none-linux-gnu", "aarch64-linux-gnu", "aarch64-linux-android"}; + static const char *const AArch64beLibDirs[] = {"/lib"}; + static const char *const AArch64beTriples[] = {"aarch64_be-none-linux-gnu", + "aarch64_be-linux-gnu"}; +@@ -1718,10 +1718,11 @@ bool Generic_GCC::GCCInstallationDetector::getBiarchSibling(Multilib &M) const { + static const char *const ARMLibDirs[] = {"/lib"}; + static const char *const ARMTriples[] = {"arm-linux-gnueabi", + "arm-linux-androideabi"}; +- static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf", +- "armv7hl-redhat-linux-gnueabi", ++ static const char *const ARMHFTriples[] = {"armv7hl-redhat-linux-gnueabi", + "armv6hl-suse-linux-gnueabi", +- "armv7hl-suse-linux-gnueabi"}; ++ "armv7hl-suse-linux-gnueabi", ++ "arm-linux-gnueabihf", ++ }; + static const char *const ARMebLibDirs[] = {"/lib"}; + static const char *const ARMebTriples[] = {"armeb-linux-gnueabi", + "armeb-linux-androideabi"}; +@@ -1730,19 +1731,19 @@ bool Generic_GCC::GCCInstallationDetector::getBiarchSibling(Multilib &M) const { + + static const char *const X86_64LibDirs[] = {"/lib64", "/lib"}; + static const char *const X86_64Triples[] = { +- "x86_64-linux-gnu", "x86_64-unknown-linux-gnu", +- "x86_64-pc-linux-gnu", "x86_64-redhat-linux6E", +- "x86_64-redhat-linux", "x86_64-suse-linux", +- "x86_64-manbo-linux-gnu", "x86_64-linux-gnu", +- "x86_64-slackware-linux", "x86_64-linux-android", ++ "x86_64-redhat-linux6E", "x86_64-redhat-linux", ++ "x86_64-suse-linux", "x86_64-slackware-linux", ++ "x86_64-manbo-linux-gnu", "x86_64-linux-gnu", ++ "x86_64-unknown-linux-gnu", "x86_64-pc-linux-gnu", ++ "x86_64-linux-gnu", "x86_64-linux-android", + "x86_64-unknown-linux"}; + static const char *const X32LibDirs[] = {"/libx32"}; + static const char *const X86LibDirs[] = {"/lib32", "/lib"}; + static const char *const X86Triples[] = { +- "i686-linux-gnu", "i686-pc-linux-gnu", "i486-linux-gnu", +- "i386-linux-gnu", "i386-redhat-linux6E", "i686-redhat-linux", +- "i586-redhat-linux", "i386-redhat-linux", "i586-suse-linux", +- "i486-slackware-linux", "i686-montavista-linux", "i686-linux-android", ++ "i386-redhat-linux6E", "i686-redhat-linux", "i586-redhat-linuxll", ++ "i386-redhat-linux", "i586-suse-linux", "i486-slackware-linux", ++ "i686-montavista-linux", "i686-linux-gnu", "i686-pc-linux-gnu", ++ "i486-linux-gnu", "i386-linux-gnu", "i686-linux-android", + "i586-linux-gnu"}; + + static const char *const MIPSLibDirs[] = {"/lib"}; +@@ -1772,16 +1773,16 @@ bool Generic_GCC::GCCInstallationDetector::getBiarchSibling(Multilib &M) const { + + static const char *const PPCLibDirs[] = {"/lib32", "/lib"}; + static const char *const PPCTriples[] = { +- "powerpc-linux-gnu", "powerpc-unknown-linux-gnu", "powerpc-linux-gnuspe", +- "powerpc-suse-linux", "powerpc-montavista-linuxspe"}; ++ "powerpc-suse-linux", "powerpc-montavista-linuxspe", ++ "powerpc-linux-gnu", "powerpc-unknown-linux-gnu", "powerpc-linux-gnuspe"}; + static const char *const PPC64LibDirs[] = {"/lib64", "/lib"}; + static const char *const PPC64Triples[] = { +- "powerpc64-linux-gnu", "powerpc64-unknown-linux-gnu", +- "powerpc64-suse-linux", "ppc64-redhat-linux"}; ++ "powerpc64-suse-linux", "ppc64-redhat-linux", ++ "powerpc64-linux-gnu", "powerpc64-unknown-linux-gnu"}; + static const char *const PPC64LELibDirs[] = {"/lib64", "/lib"}; + static const char *const PPC64LETriples[] = { +- "powerpc64le-linux-gnu", "powerpc64le-unknown-linux-gnu", +- "powerpc64le-suse-linux", "ppc64le-redhat-linux"}; ++ "powerpc64le-suse-linux", "ppc64le-redhat-linux", ++ "powerpc64le-linux-gnu", "powerpc64le-unknown-linux-gnu"}; + + static const char *const SPARCv8LibDirs[] = {"/lib32", "/lib"}; + static const char *const SPARCv8Triples[] = {"sparc-linux-gnu", +@@ -1792,8 +1793,8 @@ bool Generic_GCC::GCCInstallationDetector::getBiarchSibling(Multilib &M) const { + + static const char *const SystemZLibDirs[] = {"/lib64", "/lib"}; + static const char *const SystemZTriples[] = { +- "s390x-linux-gnu", "s390x-unknown-linux-gnu", "s390x-ibm-linux-gnu", +- "s390x-suse-linux", "s390x-redhat-linux"}; ++ "s390x-ibm-linux-gnu", "s390x-suse-linux", "s390x-redhat-linux", ++ "s390x-linux-gnu", "s390x-unknown-linux-gnu"}; + + // Solaris. + static const char *const SolarisSPARCLibDirs[] = {"/gcc"}; +-- +1.8.3.1 + diff --git a/clang.spec b/clang.spec index 6a415a6..fda9c34 100644 --- a/clang.spec +++ b/clang.spec @@ -37,7 +37,7 @@ Name: clang Version: %{maj_ver}.%{min_ver}.%{patch_ver} -Release: 2%{?dist} +Release: 3%{?dist} Summary: A C language family front-end for LLVM License: NCSA @@ -50,6 +50,7 @@ Source100: clang-config.h Patch0: 0001-lit.cfg-Add-hack-so-lit-can-find-not-and-FileCheck.patch Patch1: 0001-GCC-compatibility-Ignore-fstack-clash-protection.patch +Patch2: 0001-Driver-Prefer-vendor-supplied-gcc-toolchain.patch BuildRequires: cmake BuildRequires: llvm-devel = %{version} @@ -171,6 +172,7 @@ Requires: python2 %setup -q -n %{clang_srcdir} %patch0 -p1 -b .lit-search-path %patch1 -p1 -b .fstack-clash-protection +%patch2 -p1 -b .vendor-gcc mv ../%{clang_tools_srcdir} tools/extra @@ -309,6 +311,10 @@ make %{?_smp_mflags} check || : %{python2_sitelib}/clang/ %changelog +* Wed Mar 21 2018 Tom Stellard - 6.0.0-3 +- Fix toolchain detection so we don't default to using cross-compilers: + rhbz#1482491 + * Mon Mar 12 2018 Tom Stellard - 6.0.0-2 - Add Provides: clang(major) rhbz#1547444