Skip to content

Commit af3c209

Browse files
committed
Add support for PPC and PPC64 multiarch toolchains on Debain.
Patch from Michel Dänzer, sent our way via Jeremy Huddleston who added 64-bit support. I just added one other place where powerpc64-linux-gnu was missing (we only had powerpc64-unknown-linux-gnu). I've also added a tree to test out the debian multiarch stuff. I don't use debian regularly, so I'm not certain this is entirely accurate. If anyone wants to check it against a debian system and fix any inaccuracies, fire away. This way at least folks can see how this is *supposed* to be tested. It'd be particularly good to get the Debian MIPS toolchains tested in this way. llvm-svn: 151482
1 parent dc497b6 commit af3c209

File tree

23 files changed

+60
-0
lines changed

23 files changed

+60
-0
lines changed

clang/lib/Driver/ToolChains.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1219,6 +1219,7 @@ Generic_GCC::GCCInstallationDetector::GCCInstallationDetector(
12191219
};
12201220
static const char *const PPC64LibDirs[] = { "/lib64", "/lib" };
12211221
static const char *const PPC64Triples[] = {
1222+
"powerpc64-linux-gnu",
12221223
"powerpc64-unknown-linux-gnu",
12231224
"powerpc64-suse-linux",
12241225
"ppc64-redhat-linux"
@@ -1962,6 +1963,14 @@ static std::string getMultiarchTriple(const llvm::Triple TargetTriple,
19621963
if (llvm::sys::fs::exists(SysRoot + "/lib/mipsel-linux-gnu"))
19631964
return "mipsel-linux-gnu";
19641965
return TargetTriple.str();
1966+
case llvm::Triple::ppc:
1967+
if (llvm::sys::fs::exists(SysRoot + "/lib/powerpc-linux-gnu"))
1968+
return "powerpc-linux-gnu";
1969+
return TargetTriple.str();
1970+
case llvm::Triple::ppc64:
1971+
if (llvm::sys::fs::exists(SysRoot + "/lib/powerpc64-linux-gnu"))
1972+
return "powerpc64-linux-gnu";
1973+
return TargetTriple.str();
19651974
}
19661975
}
19671976

clang/test/Driver/Inputs/debian_multiarch_tree/lib/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/debian_multiarch_tree/lib/i386-linux-gnu/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/debian_multiarch_tree/lib/powerpc-linux-gnu/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/debian_multiarch_tree/lib/powerpc64-linux-gnu/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/debian_multiarch_tree/lib/x86_64-linux-gnu/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/c++/4.5/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/c++/4.5/backward/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/c++/4.5/i686-linux-gnu/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/c++/4.5/powerpc-linux-gnu/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/c++/4.5/powerpc64-linux-gnu/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/c++/4.5/x86_64-linux-gnu/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/i386-linux-gnu/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/powerpc-linux-gnu/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/powerpc64-linux-gnu/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/x86_64-linux-gnu/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/debian_multiarch_tree/usr/lib/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/debian_multiarch_tree/usr/lib/i386-linux-gnu/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/debian_multiarch_tree/usr/lib/powerpc-linux-gnu/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/debian_multiarch_tree/usr/lib/powerpc64-linux-gnu/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/debian_multiarch_tree/usr/lib/x86_64-linux-gnu/.keep

Whitespace-only changes.

clang/test/Driver/linux-ld.c

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,3 +194,54 @@
194194
// RUN: | FileCheck --check-prefix=CHECK-MIPS64EL %s
195195
// CHECK-MIPS64EL: "{{.*}}ld{{(.exe)?}}"
196196
// CHECK-MIPS64EL-NOT: "--hash-style={{gnu|both}}"
197+
//
198+
// Thoroughly exercise the Debian multiarch environment.
199+
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
200+
// RUN: -target i686-linux-gnu \
201+
// RUN: --sysroot=%S/Inputs/debian_multiarch_tree \
202+
// RUN: | FileCheck --check-prefix=CHECK-DEBIAN-X86 %s
203+
// CHECK-DEBIAN-X86: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
204+
// CHECK-DEBIAN-X86: "{{.*}}/usr/lib/gcc/i686-linux-gnu/4.5/crtbegin.o"
205+
// CHECK-DEBIAN-X86: "-L[[SYSROOT]]/usr/lib/gcc/i686-linux-gnu/4.5"
206+
// CHECK-DEBIAN-X86: "-L[[SYSROOT]]/usr/lib/gcc/i686-linux-gnu/4.5/../../../i386-linux-gnu"
207+
// CHECK-DEBIAN-X86: "-L[[SYSROOT]]/usr/lib/i386-linux-gnu"
208+
// CHECK-DEBIAN-X86: "-L[[SYSROOT]]/usr/lib/gcc/i686-linux-gnu/4.5/../../.."
209+
// CHECK-DEBIAN-X86: "-L[[SYSROOT]]/lib"
210+
// CHECK-DEBIAN-X86: "-L[[SYSROOT]]/usr/lib"
211+
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
212+
// RUN: -target x86_64-linux-gnu \
213+
// RUN: --sysroot=%S/Inputs/debian_multiarch_tree \
214+
// RUN: | FileCheck --check-prefix=CHECK-DEBIAN-X86-64 %s
215+
// CHECK-DEBIAN-X86-64: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
216+
// CHECK-DEBIAN-X86-64: "{{.*}}/usr/lib/gcc/x86_64-linux-gnu/4.5/crtbegin.o"
217+
// CHECK-DEBIAN-X86-64: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnu/4.5"
218+
// CHECK-DEBIAN-X86-64: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnu/4.5/../../../x86_64-linux-gnu"
219+
// CHECK-DEBIAN-X86-64: "-L[[SYSROOT]]/usr/lib/x86_64-linux-gnu"
220+
// CHECK-DEBIAN-X86-64: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnu/4.5/../../.."
221+
// CHECK-DEBIAN-X86-64: "-L[[SYSROOT]]/lib"
222+
// CHECK-DEBIAN-X86-64: "-L[[SYSROOT]]/usr/lib"
223+
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
224+
// RUN: -target powerpc-linux-gnu \
225+
// RUN: --sysroot=%S/Inputs/debian_multiarch_tree \
226+
// RUN: | FileCheck --check-prefix=CHECK-DEBIAN-PPC %s
227+
// CHECK-DEBIAN-PPC: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
228+
// CHECK-DEBIAN-PPC: "{{.*}}/usr/lib/gcc/powerpc-linux-gnu/4.5/crtbegin.o"
229+
// CHECK-DEBIAN-PPC: "-L[[SYSROOT]]/usr/lib/gcc/powerpc-linux-gnu/4.5"
230+
// CHECK-DEBIAN-PPC: "-L[[SYSROOT]]/usr/lib/gcc/powerpc-linux-gnu/4.5/../../../powerpc-linux-gnu"
231+
// CHECK-DEBIAN-PPC: "-L[[SYSROOT]]/usr/lib/powerpc-linux-gnu"
232+
// CHECK-DEBIAN-PPC: "-L[[SYSROOT]]/usr/lib/gcc/powerpc-linux-gnu/4.5/../../.."
233+
// CHECK-DEBIAN-PPC: "-L[[SYSROOT]]/lib"
234+
// CHECK-DEBIAN-PPC: "-L[[SYSROOT]]/usr/lib"
235+
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
236+
// RUN: -target powerpc64-linux-gnu \
237+
// RUN: --sysroot=%S/Inputs/debian_multiarch_tree \
238+
// RUN: | FileCheck --check-prefix=CHECK-DEBIAN-PPC64 %s
239+
// CHECK-DEBIAN-PPC64: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
240+
// CHECK-DEBIAN-PPC64: "{{.*}}/usr/lib/gcc/powerpc64-linux-gnu/4.5/crtbegin.o"
241+
// CHECK-DEBIAN-PPC64: "-L[[SYSROOT]]/usr/lib/gcc/powerpc64-linux-gnu/4.5"
242+
// CHECK-DEBIAN-PPC64: "-L[[SYSROOT]]/usr/lib/gcc/powerpc64-linux-gnu/4.5/../../../powerpc64-linux-gnu"
243+
// CHECK-DEBIAN-PPC64: "-L[[SYSROOT]]/usr/lib/powerpc64-linux-gnu"
244+
// CHECK-DEBIAN-PPC64: "-L[[SYSROOT]]/usr/lib/gcc/powerpc64-linux-gnu/4.5/../../.."
245+
// CHECK-DEBIAN-PPC64: "-L[[SYSROOT]]/lib"
246+
// CHECK-DEBIAN-PPC64: "-L[[SYSROOT]]/usr/lib"
247+
//

0 commit comments

Comments
 (0)