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
