I'm a big backed up on Clang driver reviews, but this and your other hard floating point patch are in my queue now...
On Thu, Jul 26, 2012 at 1:33 AM, Jiangning Liu <[email protected]>wrote: > PING... Who can help to review this piece of code change? > > Thanks, > -Jiangning > > > -----Original Message----- > > From: [email protected] [mailto:cfe-commits- > > [email protected]] On Behalf Of Jiangning Liu > > Sent: Friday, July 13, 2012 4:07 PM > > To: [email protected] > > Subject: [cfe-commits] [PATCH] Support ARM hard float (arm-linux- > > gnueabihf) in clang driver > > > > Hi, > > > > Clang driver doesn't support folder structure for ARM hard float > > architecture yet, so this patch intends to add this support. With this > > patch, Clang driver will be able to find correct library paths for > > target arm-linux-gnueabihf. A new test input folder is added for > > ubuntu_12.04_LTS_multiarch_tree accordingly. > > > > Thanks, > > -Jiangning > > > > diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index > > b858c3e..ecaab40 100644 > > --- a/lib/Driver/ToolChains.cpp > > +++ b/lib/Driver/ToolChains.cpp > > @@ -1098,6 +1098,9 @@ > > Generic_GCC::GCCInstallationDetector::GCCInstallationDetector( > > "arm-linux-gnueabi", > > "arm-linux-androideabi" > > }; > > + static const char *const ARMHFTriples[] = { > > + "arm-linux-gnueabihf", > > + }; > > > > static const char *const X86_64LibDirs[] = { "/lib64", "/lib" }; > > static const char *const X86_64Triples[] = { @@ -1154,8 +1157,13 @@ > > Generic_GCC::GCCInstallationDetector::GCCInstallationDetector( > > case llvm::Triple::arm: > > case llvm::Triple::thumb: > > LibDirs.append(ARMLibDirs, ARMLibDirs + > > llvm::array_lengthof(ARMLibDirs)); > > - TripleAliases.append( > > - ARMTriples, ARMTriples + llvm::array_lengthof(ARMTriples)); > > + if (TargetTriple.getEnvironment() == llvm::Triple::GNUEABIHF) { > > + TripleAliases.append( > > + ARMHFTriples, ARMHFTriples + > > llvm::array_lengthof(ARMHFTriples)); > > + } else { > > + TripleAliases.append( > > + ARMTriples, ARMTriples + llvm::array_lengthof(ARMTriples)); > > + } > > break; > > case llvm::Triple::x86_64: > > LibDirs.append( > > @@ -1907,8 +1915,13 @@ static std::string getMultiarchTriple(const > > llvm::Triple TargetTriple, > > // regardless of what the actual target triple is. > > case llvm::Triple::arm: > > case llvm::Triple::thumb: > > - if (llvm::sys::fs::exists(SysRoot + "/lib/arm-linux-gnueabi")) > > - return "arm-linux-gnueabi"; > > + if (TargetTriple.getEnvironment() == llvm::Triple::GNUEABIHF) { > > + if (llvm::sys::fs::exists(SysRoot + "/lib/arm-linux-gnueabihf")) > > + return "arm-linux-gnueabihf"; > > + } else { > > + if (llvm::sys::fs::exists(SysRoot + "/lib/arm-linux-gnueabi")) > > + return "arm-linux-gnueabi"; > > + } > > return TargetTriple.str(); > > case llvm::Triple::x86: > > if (llvm::sys::fs::exists(SysRoot + "/lib/i386-linux-gnu")) @@ - > > 2154,7 +2167,12 @@ void Linux::AddClangSystemIncludeArgs(const ArgList > > &DriverArgs, > > "/usr/include/i486-linux-gnu" > > }; > > const StringRef ARMMultiarchIncludeDirs[] = { > > - "/usr/include/arm-linux-gnueabi" > > + "/usr/include/arm-linux-gnueabi", > > + "/usr/arm-linux-gnueabi/include" > > + }; > > + const StringRef ARMHFMultiarchIncludeDirs[] = { > > + "/usr/include/arm-linux-gnueabihf", > > + "/usr/arm-linux-gnueabihf/include" > > }; > > const StringRef MIPSMultiarchIncludeDirs[] = { > > "/usr/include/mips-linux-gnu" > > @@ -2174,7 +2192,10 @@ void Linux::AddClangSystemIncludeArgs(const > > ArgList &DriverArgs, > > } else if (getTriple().getArch() == llvm::Triple::x86) { > > MultiarchIncludeDirs = X86MultiarchIncludeDirs; > > } else if (getTriple().getArch() == llvm::Triple::arm) { > > - MultiarchIncludeDirs = ARMMultiarchIncludeDirs; > > + if (getTriple().getEnvironment() == llvm::Triple::GNUEABIHF) > > + MultiarchIncludeDirs = ARMHFMultiarchIncludeDirs; > > + else > > + MultiarchIncludeDirs = ARMMultiarchIncludeDirs; > > } else if (getTriple().getArch() == llvm::Triple::mips) { > > MultiarchIncludeDirs = MIPSMultiarchIncludeDirs; > > } else if (getTriple().getArch() == llvm::Triple::mipsel) { diff -- > > git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp old mode 100644 new > > mode 100755 index 66d792f..7a365c0 > > --- a/lib/Driver/Tools.cpp > > +++ b/lib/Driver/Tools.cpp > > @@ -629,16 +629,11 @@ static StringRef getARMFloatABI(const Driver &D, > > break; > > } > > > > - case llvm::Triple::Linux: { > > - if (Triple.getEnvironment() == llvm::Triple::GNUEABI) { > > - FloatABI = "softfp"; > > - break; > > - } > > - } > > - // fall through > > - > > default: > > switch(Triple.getEnvironment()) { > > + case llvm::Triple::GNUEABIHF: > > + FloatABI = "hard"; > > + break; > > case llvm::Triple::GNUEABI: > > FloatABI = "softfp"; > > break; > > @@ -685,6 +680,7 @@ void Clang::AddARMTargetArgs(const ArgList &Args, > > switch(Triple.getEnvironment()) { > > case llvm::Triple::ANDROIDEABI: > > case llvm::Triple::GNUEABI: > > + case llvm::Triple::GNUEABIHF: > > ABIName = "aapcs-linux"; > > break; > > case llvm::Triple::EABI: > > diff --git > > a/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/lib/.keep > > b/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/lib/.keep > > new file mode 100644 > > index 0000000..e69de29 > > diff --git > > a/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/include/.keep > > b/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/include/.keep > > new file mode 100644 > > index 0000000..e69de29 > > diff --git > > a/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/.keep > > b/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/.keep > > new file mode 100644 > > index 0000000..e69de29 > > diff --git > > a/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux- > > gnuea > > bi/crt1.o > > b/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux- > > gnuea > > bi/crt1.o > > new file mode 100644 > > index 0000000..e69de29 > > diff --git > > a/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux- > > gnuea > > bi/crti.o > > b/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux- > > gnuea > > bi/crti.o > > new file mode 100644 > > index 0000000..e69de29 > > diff --git > > a/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux- > > gnuea > > bi/crtn.o > > b/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux- > > gnuea > > bi/crtn.o > > new file mode 100644 > > index 0000000..e69de29 > > diff --git > > a/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux- > > gnuea > > bihf/crt1.o > > b/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux- > > gnuea > > bihf/crt1.o > > new file mode 100644 > > index 0000000..e69de29 > > diff --git > > a/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux- > > gnuea > > bihf/crti.o > > b/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux- > > gnuea > > bihf/crti.o > > new file mode 100644 > > index 0000000..e69de29 > > diff --git > > a/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux- > > gnuea > > bihf/crtn.o > > b/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux- > > gnuea > > bihf/crtn.o > > new file mode 100644 > > index 0000000..e69de29 > > diff --git > > a/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/gcc/arm- > > linux-g > > nueabi/4.6.1/crtbegin.o > > b/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/gcc/arm- > > linux-g > > nueabi/4.6.1/crtbegin.o > > new file mode 100644 > > index 0000000..e69de29 > > diff --git > > a/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/gcc/arm- > > linux-g > > nueabi/4.6.1/crtend.o > > b/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/gcc/arm- > > linux-g > > nueabi/4.6.1/crtend.o > > new file mode 100644 > > index 0000000..e69de29 > > diff --git > > a/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/gcc/arm- > > linux-g > > nueabihf/4.6.3/crtbegin.o > > b/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/gcc/arm- > > linux-g > > nueabihf/4.6.3/crtbegin.o > > new file mode 100644 > > index 0000000..e69de29 > > diff --git > > a/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/gcc/arm- > > linux-g > > nueabihf/4.6.3/crtend.o > > b/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/gcc/arm- > > linux-g > > nueabihf/4.6.3/crtend.o > > new file mode 100644 > > index 0000000..e69de29 > > diff --git a/test/Driver/linux-ld.c b/test/Driver/linux-ld.c index > > a9decfd..89f3bc3 100644 > > --- a/test/Driver/linux-ld.c > > +++ b/test/Driver/linux-ld.c > > @@ -174,6 +174,39 @@ > > // CHECK-UBUNTU-11-04: "-L[[SYSROOT]]/lib" > > // CHECK-UBUNTU-11-04: "-L[[SYSROOT]]/usr/lib" > > // > > +// Check multi arch support on Ubuntu 12.04 LTS. > > +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ > > +// RUN: -target arm-unknown-linux-gnueabihf \ > > +// RUN: --sysroot=%S/Inputs/ubuntu_12.04_LTS_multiarch_tree \ > > +// RUN: | FileCheck --check-prefix=CHECK-UBUNTU-12-04-ARM-HF %s > > +// CHECK-UBUNTU-12-04-ARM-HF: "{{.*}}ld{{(.exe)?}}" > > "--sysroot=[[SYSROOT:[^"]+]]" > > +// CHECK-UBUNTU-12-04-ARM-HF: > > "{{.*}}/usr/lib/gcc/arm-linux-gnueabihf/4.6.3/../../../arm-linux- > > gnueabihf/c > > rt1.o" > > +// CHECK-UBUNTU-12-04-ARM-HF: > > "{{.*}}/usr/lib/gcc/arm-linux-gnueabihf/4.6.3/../../../arm-linux- > > gnueabihf/c > > rti.o" > > +// CHECK-UBUNTU-12-04-ARM-HF: > > "{{.*}}/usr/lib/gcc/arm-linux-gnueabihf/4.6.3/crtbegin.o" > > +// CHECK-UBUNTU-12-04-ARM-HF: > > "-L[[SYSROOT]]/usr/lib/gcc/arm-linux-gnueabihf/4.6.3" > > +// CHECK-UBUNTU-12-04-ARM-HF: > > "-L[[SYSROOT]]/usr/lib/gcc/arm-linux-gnueabihf/4.6.3/../../../arm-linux- > > gnue > > abihf" > > +// CHECK-UBUNTU-12-04-ARM-HF: "-L[[SYSROOT]]/lib/arm-linux-gnueabihf" > > +// CHECK-UBUNTU-12-04-ARM-HF: "-L[[SYSROOT]]/usr/lib/arm-linux- > > gnueabihf" > > +// CHECK-UBUNTU-12-04-ARM-HF: > > "-L[[SYSROOT]]/usr/lib/gcc/arm-linux-gnueabihf/4.6.3/../../.." > > +// CHECK-UBUNTU-12-04-ARM-HF: > > "{{.*}}/usr/lib/gcc/arm-linux-gnueabihf/4.6.3/crtend.o" > > +// CHECK-UBUNTU-12-04-ARM-HF: > > "{{.*}}/usr/lib/gcc/arm-linux-gnueabihf/4.6.3/../../../arm-linux- > > gnueabihf/c > > rtn.o" > > +// > > +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ > > +// RUN: -target arm-unknown-linux-gnueabi \ > > +// RUN: --sysroot=%S/Inputs/ubuntu_12.04_LTS_multiarch_tree \ > > +// RUN: | FileCheck --check-prefix=CHECK-UBUNTU-12-04-ARM %s > > +// CHECK-UBUNTU-12-04-ARM: "{{.*}}ld{{(.exe)?}}" > > "--sysroot=[[SYSROOT:[^"]+]]" > > +// CHECK-UBUNTU-12-04-ARM: > > "{{.*}}/usr/lib/gcc/arm-linux-gnueabi/4.6.1/../../../arm-linux- > > gnueabi/crt1. > > o" > > +// CHECK-UBUNTU-12-04-ARM: > > "{{.*}}/usr/lib/gcc/arm-linux-gnueabi/4.6.1/../../../arm-linux- > > gnueabi/crti. > > o" > > +// CHECK-UBUNTU-12-04-ARM: > > "{{.*}}/usr/lib/gcc/arm-linux-gnueabi/4.6.1/crtbegin.o" > > +// CHECK-UBUNTU-12-04-ARM: > > "-L[[SYSROOT]]/usr/lib/gcc/arm-linux-gnueabi/4.6.1" > > +// CHECK-UBUNTU-12-04-ARM: > > "-L[[SYSROOT]]/usr/lib/gcc/arm-linux-gnueabi/4.6.1/../../../arm-linux- > > gnueab > > i" > > +// CHECK-UBUNTU-12-04-ARM: "-L[[SYSROOT]]/lib/arm-linux-gnueabi" > > +// CHECK-UBUNTU-12-04-ARM: "-L[[SYSROOT]]/usr/lib/arm-linux-gnueabi" > > +// CHECK-UBUNTU-12-04-ARM: > > "-L[[SYSROOT]]/usr/lib/gcc/arm-linux-gnueabi/4.6.1/../../.." > > +// CHECK-UBUNTU-12-04-ARM: > > "{{.*}}/usr/lib/gcc/arm-linux-gnueabi/4.6.1/crtend.o" > > +// CHECK-UBUNTU-12-04-ARM: > > "{{.*}}/usr/lib/gcc/arm-linux-gnueabi/4.6.1/../../../arm-linux- > > gnueabi/crtn. > > o" > > +// > > // Test the setup that shipped in SUSE 10.3 on ppc64. > > // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ > > // RUN: -target powerpc64-suse-linux \ > > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
