Skip to content
This repository was archived by the owner on Nov 1, 2021. It is now read-only.

Commit ff104a1

Browse files
author
Jiangning Liu
committed
Support ARM hard float (arm-linux-gnueabihf).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@161038 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 43e3dee commit ff104a1

File tree

16 files changed

+61
-13
lines changed

16 files changed

+61
-13
lines changed

lib/Driver/ToolChains.cpp

+24-5
Original file line numberDiff line numberDiff line change
@@ -1103,6 +1103,9 @@ Generic_GCC::GCCInstallationDetector::GCCInstallationDetector(
11031103
"arm-linux-gnueabi",
11041104
"arm-linux-androideabi"
11051105
};
1106+
static const char *const ARMHFTriples[] = {
1107+
"arm-linux-gnueabihf",
1108+
};
11061109

11071110
static const char *const X86_64LibDirs[] = { "/lib64", "/lib" };
11081111
static const char *const X86_64Triples[] = {
@@ -1159,8 +1162,13 @@ Generic_GCC::GCCInstallationDetector::GCCInstallationDetector(
11591162
case llvm::Triple::arm:
11601163
case llvm::Triple::thumb:
11611164
LibDirs.append(ARMLibDirs, ARMLibDirs + llvm::array_lengthof(ARMLibDirs));
1162-
TripleAliases.append(
1163-
ARMTriples, ARMTriples + llvm::array_lengthof(ARMTriples));
1165+
if (TargetTriple.getEnvironment() == llvm::Triple::GNUEABIHF) {
1166+
TripleAliases.append(
1167+
ARMHFTriples, ARMHFTriples + llvm::array_lengthof(ARMHFTriples));
1168+
} else {
1169+
TripleAliases.append(
1170+
ARMTriples, ARMTriples + llvm::array_lengthof(ARMTriples));
1171+
}
11641172
break;
11651173
case llvm::Triple::x86_64:
11661174
LibDirs.append(
@@ -1912,8 +1920,13 @@ static std::string getMultiarchTriple(const llvm::Triple TargetTriple,
19121920
// regardless of what the actual target triple is.
19131921
case llvm::Triple::arm:
19141922
case llvm::Triple::thumb:
1915-
if (llvm::sys::fs::exists(SysRoot + "/lib/arm-linux-gnueabi"))
1916-
return "arm-linux-gnueabi";
1923+
if (TargetTriple.getEnvironment() == llvm::Triple::GNUEABIHF) {
1924+
if (llvm::sys::fs::exists(SysRoot + "/lib/arm-linux-gnueabihf"))
1925+
return "arm-linux-gnueabihf";
1926+
} else {
1927+
if (llvm::sys::fs::exists(SysRoot + "/lib/arm-linux-gnueabi"))
1928+
return "arm-linux-gnueabi";
1929+
}
19171930
return TargetTriple.str();
19181931
case llvm::Triple::x86:
19191932
if (llvm::sys::fs::exists(SysRoot + "/lib/i386-linux-gnu"))
@@ -2161,6 +2174,9 @@ void Linux::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
21612174
const StringRef ARMMultiarchIncludeDirs[] = {
21622175
"/usr/include/arm-linux-gnueabi"
21632176
};
2177+
const StringRef ARMHFMultiarchIncludeDirs[] = {
2178+
"/usr/include/arm-linux-gnueabihf"
2179+
};
21642180
const StringRef MIPSMultiarchIncludeDirs[] = {
21652181
"/usr/include/mips-linux-gnu"
21662182
};
@@ -2179,7 +2195,10 @@ void Linux::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
21792195
} else if (getTriple().getArch() == llvm::Triple::x86) {
21802196
MultiarchIncludeDirs = X86MultiarchIncludeDirs;
21812197
} else if (getTriple().getArch() == llvm::Triple::arm) {
2182-
MultiarchIncludeDirs = ARMMultiarchIncludeDirs;
2198+
if (getTriple().getEnvironment() == llvm::Triple::GNUEABIHF)
2199+
MultiarchIncludeDirs = ARMHFMultiarchIncludeDirs;
2200+
else
2201+
MultiarchIncludeDirs = ARMMultiarchIncludeDirs;
21832202
} else if (getTriple().getArch() == llvm::Triple::mips) {
21842203
MultiarchIncludeDirs = MIPSMultiarchIncludeDirs;
21852204
} else if (getTriple().getArch() == llvm::Triple::mipsel) {

lib/Driver/Tools.cpp

+4-8
Original file line numberDiff line numberDiff line change
@@ -629,16 +629,11 @@ static StringRef getARMFloatABI(const Driver &D,
629629
break;
630630
}
631631

632-
case llvm::Triple::Linux: {
633-
if (Triple.getEnvironment() == llvm::Triple::GNUEABI) {
634-
FloatABI = "softfp";
635-
break;
636-
}
637-
}
638-
// fall through
639-
640632
default:
641633
switch(Triple.getEnvironment()) {
634+
case llvm::Triple::GNUEABIHF:
635+
FloatABI = "hard";
636+
break;
642637
case llvm::Triple::GNUEABI:
643638
FloatABI = "softfp";
644639
break;
@@ -685,6 +680,7 @@ void Clang::AddARMTargetArgs(const ArgList &Args,
685680
switch(Triple.getEnvironment()) {
686681
case llvm::Triple::ANDROIDEABI:
687682
case llvm::Triple::GNUEABI:
683+
case llvm::Triple::GNUEABIHF:
688684
ABIName = "aapcs-linux";
689685
break;
690686
case llvm::Triple::EABI:

test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/lib/.keep

Whitespace-only changes.

test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/include/.keep

Whitespace-only changes.

test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/.keep

Whitespace-only changes.

test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux-gnueabi/crt1.o

Whitespace-only changes.

test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux-gnueabi/crti.o

Whitespace-only changes.

test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux-gnueabi/crtn.o

Whitespace-only changes.

test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux-gnueabihf/crt1.o

Whitespace-only changes.

test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux-gnueabihf/crti.o

Whitespace-only changes.

test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux-gnueabihf/crtn.o

Whitespace-only changes.

test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/gcc/arm-linux-gnueabi/4.6.1/crtbegin.o

Whitespace-only changes.

test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/gcc/arm-linux-gnueabi/4.6.1/crtend.o

Whitespace-only changes.

test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/gcc/arm-linux-gnueabihf/4.6.3/crtbegin.o

Whitespace-only changes.

test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/gcc/arm-linux-gnueabihf/4.6.3/crtend.o

Whitespace-only changes.

test/Driver/linux-ld.c

+33
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,39 @@
174174
// CHECK-UBUNTU-11-04: "-L[[SYSROOT]]/lib"
175175
// CHECK-UBUNTU-11-04: "-L[[SYSROOT]]/usr/lib"
176176
//
177+
// Check multi arch support on Ubuntu 12.04 LTS.
178+
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
179+
// RUN: -target arm-unknown-linux-gnueabihf \
180+
// RUN: --sysroot=%S/Inputs/ubuntu_12.04_LTS_multiarch_tree \
181+
// RUN: | FileCheck --check-prefix=CHECK-UBUNTU-12-04-ARM-HF %s
182+
// CHECK-UBUNTU-12-04-ARM-HF: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
183+
// CHECK-UBUNTU-12-04-ARM-HF: "{{.*}}/usr/lib/gcc/arm-linux-gnueabihf/4.6.3/../../../arm-linux-gnueabihf/crt1.o"
184+
// CHECK-UBUNTU-12-04-ARM-HF: "{{.*}}/usr/lib/gcc/arm-linux-gnueabihf/4.6.3/../../../arm-linux-gnueabihf/crti.o"
185+
// CHECK-UBUNTU-12-04-ARM-HF: "{{.*}}/usr/lib/gcc/arm-linux-gnueabihf/4.6.3/crtbegin.o"
186+
// CHECK-UBUNTU-12-04-ARM-HF: "-L[[SYSROOT]]/usr/lib/gcc/arm-linux-gnueabihf/4.6.3"
187+
// CHECK-UBUNTU-12-04-ARM-HF: "-L[[SYSROOT]]/usr/lib/gcc/arm-linux-gnueabihf/4.6.3/../../../arm-linux-gnueabihf"
188+
// CHECK-UBUNTU-12-04-ARM-HF: "-L[[SYSROOT]]/lib/arm-linux-gnueabihf"
189+
// CHECK-UBUNTU-12-04-ARM-HF: "-L[[SYSROOT]]/usr/lib/arm-linux-gnueabihf"
190+
// CHECK-UBUNTU-12-04-ARM-HF: "-L[[SYSROOT]]/usr/lib/gcc/arm-linux-gnueabihf/4.6.3/../../.."
191+
// CHECK-UBUNTU-12-04-ARM-HF: "{{.*}}/usr/lib/gcc/arm-linux-gnueabihf/4.6.3/crtend.o"
192+
// CHECK-UBUNTU-12-04-ARM-HF: "{{.*}}/usr/lib/gcc/arm-linux-gnueabihf/4.6.3/../../../arm-linux-gnueabihf/crtn.o"
193+
//
194+
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
195+
// RUN: -target arm-unknown-linux-gnueabi \
196+
// RUN: --sysroot=%S/Inputs/ubuntu_12.04_LTS_multiarch_tree \
197+
// RUN: | FileCheck --check-prefix=CHECK-UBUNTU-12-04-ARM %s
198+
// CHECK-UBUNTU-12-04-ARM: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
199+
// CHECK-UBUNTU-12-04-ARM: "{{.*}}/usr/lib/gcc/arm-linux-gnueabi/4.6.1/../../../arm-linux-gnueabi/crt1.o"
200+
// CHECK-UBUNTU-12-04-ARM: "{{.*}}/usr/lib/gcc/arm-linux-gnueabi/4.6.1/../../../arm-linux-gnueabi/crti.o"
201+
// CHECK-UBUNTU-12-04-ARM: "{{.*}}/usr/lib/gcc/arm-linux-gnueabi/4.6.1/crtbegin.o"
202+
// CHECK-UBUNTU-12-04-ARM: "-L[[SYSROOT]]/usr/lib/gcc/arm-linux-gnueabi/4.6.1"
203+
// CHECK-UBUNTU-12-04-ARM: "-L[[SYSROOT]]/usr/lib/gcc/arm-linux-gnueabi/4.6.1/../../../arm-linux-gnueabi"
204+
// CHECK-UBUNTU-12-04-ARM: "-L[[SYSROOT]]/lib/arm-linux-gnueabi"
205+
// CHECK-UBUNTU-12-04-ARM: "-L[[SYSROOT]]/usr/lib/arm-linux-gnueabi"
206+
// CHECK-UBUNTU-12-04-ARM: "-L[[SYSROOT]]/usr/lib/gcc/arm-linux-gnueabi/4.6.1/../../.."
207+
// CHECK-UBUNTU-12-04-ARM: "{{.*}}/usr/lib/gcc/arm-linux-gnueabi/4.6.1/crtend.o"
208+
// CHECK-UBUNTU-12-04-ARM: "{{.*}}/usr/lib/gcc/arm-linux-gnueabi/4.6.1/../../../arm-linux-gnueabi/crtn.o"
209+
//
177210
// Test the setup that shipped in SUSE 10.3 on ppc64.
178211
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
179212
// RUN: -target powerpc64-suse-linux \

0 commit comments

Comments
 (0)