[cfe-commits] [PATCH] Support ARM hard float (arm-linux-gnueabihf) in clang driver

Chandler Carruth chandlerc at google.com
Thu Jul 26 02:44:13 PDT 2012


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 <jiangning.liu at arm.com>wrote:

> PING... Who can help to review this piece of code change?
>
> Thanks,
> -Jiangning
>
> > -----Original Message-----
> > From: cfe-commits-bounces at cs.uiuc.edu [mailto:cfe-commits-
> > bounces at cs.uiuc.edu] On Behalf Of Jiangning Liu
> > Sent: Friday, July 13, 2012 4:07 PM
> > To: cfe-commits at cs.uiuc.edu
> > 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
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120726/95c2b9a7/attachment.html>


More information about the cfe-commits mailing list