]> granicus.if.org Git - clang/commitdiff
Update a comment to clarify that searching the target triple bin
authorChandler Carruth <chandlerc@gmail.com>
Thu, 20 Jun 2013 23:37:54 +0000 (23:37 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Thu, 20 Jun 2013 23:37:54 +0000 (23:37 +0000)
directory for programs used by the driver is actually the standard
behavior we want to be compatible with GCC cross compilers -- it isn't
specific to SUSE or any other distro.

Also start fleshing out testing of the different cross compilation
patterns, both with a new very bare-bones tree of cross compilers and by
extending the multilib trees. Currently, we don't correctly model doing
a cross compile using the non-triple target of a bi-arch GCC install,
but I'll add support for that (and tests) next.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184499 91177308-0d34-0410-b5e6-96231b3b80d8

36 files changed:
lib/Driver/ToolChains.cpp
test/Driver/Inputs/basic_cross_linux_tree/usr/bin/i386-unknown-linux-gnu-as [new file with mode: 0755]
test/Driver/Inputs/basic_cross_linux_tree/usr/bin/i386-unknown-linux-gnu-ld [new symlink]
test/Driver/Inputs/basic_cross_linux_tree/usr/bin/i386-unknown-linux-gnu-ld.bfd [new file with mode: 0755]
test/Driver/Inputs/basic_cross_linux_tree/usr/bin/i386-unknown-linux-gnu-ld.gold [new file with mode: 0755]
test/Driver/Inputs/basic_cross_linux_tree/usr/bin/x86_64-unknown-linux-gnu-as [new file with mode: 0755]
test/Driver/Inputs/basic_cross_linux_tree/usr/bin/x86_64-unknown-linux-gnu-ld [new symlink]
test/Driver/Inputs/basic_cross_linux_tree/usr/bin/x86_64-unknown-linux-gnu-ld.bfd [new file with mode: 0755]
test/Driver/Inputs/basic_cross_linux_tree/usr/bin/x86_64-unknown-linux-gnu-ld.gold [new file with mode: 0755]
test/Driver/Inputs/basic_cross_linux_tree/usr/i386-unknown-linux-gnu/bin/as [new file with mode: 0755]
test/Driver/Inputs/basic_cross_linux_tree/usr/i386-unknown-linux-gnu/bin/ld [new symlink]
test/Driver/Inputs/basic_cross_linux_tree/usr/i386-unknown-linux-gnu/bin/ld.bfd [new file with mode: 0755]
test/Driver/Inputs/basic_cross_linux_tree/usr/i386-unknown-linux-gnu/bin/ld.gold [new file with mode: 0755]
test/Driver/Inputs/basic_cross_linux_tree/usr/i386-unknown-linux-gnu/lib/.keep [new file with mode: 0644]
test/Driver/Inputs/basic_cross_linux_tree/usr/lib/gcc/i386-unknown-linux-gnu/4.6.0/crtbegin.o [new file with mode: 0644]
test/Driver/Inputs/basic_cross_linux_tree/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/crtbegin.o [new file with mode: 0644]
test/Driver/Inputs/basic_cross_linux_tree/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/crtbeginT.o [new file with mode: 0644]
test/Driver/Inputs/basic_cross_linux_tree/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/crtfastmath.o [new file with mode: 0644]
test/Driver/Inputs/basic_cross_linux_tree/usr/x86_64-unknown-linux-gnu/bin/as [new file with mode: 0755]
test/Driver/Inputs/basic_cross_linux_tree/usr/x86_64-unknown-linux-gnu/bin/ld [new symlink]
test/Driver/Inputs/basic_cross_linux_tree/usr/x86_64-unknown-linux-gnu/bin/ld.bfd [new file with mode: 0755]
test/Driver/Inputs/basic_cross_linux_tree/usr/x86_64-unknown-linux-gnu/bin/ld.gold [new file with mode: 0755]
test/Driver/Inputs/basic_cross_linux_tree/usr/x86_64-unknown-linux-gnu/lib/.keep [new file with mode: 0644]
test/Driver/Inputs/multilib_32bit_linux_tree/usr/bin/as [new symlink]
test/Driver/Inputs/multilib_32bit_linux_tree/usr/bin/i386-unknown-linux-gnu-as [new file with mode: 0755]
test/Driver/Inputs/multilib_32bit_linux_tree/usr/bin/i386-unknown-linux-gnu-ld [new file with mode: 0755]
test/Driver/Inputs/multilib_32bit_linux_tree/usr/bin/ld [new symlink]
test/Driver/Inputs/multilib_32bit_linux_tree/usr/i386-unknown-linux/bin/as [new symlink]
test/Driver/Inputs/multilib_32bit_linux_tree/usr/i386-unknown-linux/bin/ld [new symlink]
test/Driver/Inputs/multilib_64bit_linux_tree/usr/bin/as [new symlink]
test/Driver/Inputs/multilib_64bit_linux_tree/usr/bin/ld [new symlink]
test/Driver/Inputs/multilib_64bit_linux_tree/usr/bin/x86_64-unknown-linux-gnu-as [new file with mode: 0755]
test/Driver/Inputs/multilib_64bit_linux_tree/usr/bin/x86_64-unknown-linux-gnu-ld [new file with mode: 0755]
test/Driver/Inputs/multilib_64bit_linux_tree/usr/x86_64-unknown-linux/bin/as [new symlink]
test/Driver/Inputs/multilib_64bit_linux_tree/usr/x86_64-unknown-linux/bin/ld [new symlink]
test/Driver/cross-linux-tools.c [new file with mode: 0644]

index 5c0ab55a048f4771ee4d5fdc88efc8ca1e989e40..1c208eea44ee9bf6db42c79549735bad5efe6656 100644 (file)
@@ -2219,8 +2219,14 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
   llvm::Triple::ArchType Arch = Triple.getArch();
   std::string SysRoot = computeSysRoot(Args);
 
-  // OpenSuse stores the linker with the compiler, add that to the search
-  // path.
+  // Cross-compiling binutils and GCC installations (vanilla and OpenSuse at
+  // least) put various tools in a triple-prefixed directory off of the parent
+  // of the GCC installation. We use the GCC triple here to ensure that we end
+  // up with tools that support the same amount of cross compiling as the
+  // detected GCC installation. For example, if we find a GCC installation
+  // targeting x86_64, but it is a bi-arch GCC installation, it can also be
+  // used to target i386.
+  // FIXME: This seems unlikely to be Linux-specific.
   ToolChain::path_list &PPaths = getProgramPaths();
   PPaths.push_back(Twine(GCCInstallation.getParentLibPath() + "/../" +
                          GCCInstallation.getTriple().str() + "/bin").str());
diff --git a/test/Driver/Inputs/basic_cross_linux_tree/usr/bin/i386-unknown-linux-gnu-as b/test/Driver/Inputs/basic_cross_linux_tree/usr/bin/i386-unknown-linux-gnu-as
new file mode 100755 (executable)
index 0000000..b23e556
--- /dev/null
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/Driver/Inputs/basic_cross_linux_tree/usr/bin/i386-unknown-linux-gnu-ld b/test/Driver/Inputs/basic_cross_linux_tree/usr/bin/i386-unknown-linux-gnu-ld
new file mode 120000 (symlink)
index 0000000..7e0a9cf
--- /dev/null
@@ -0,0 +1 @@
+i386-unknown-linux-gnu-ld.gold
\ No newline at end of file
diff --git a/test/Driver/Inputs/basic_cross_linux_tree/usr/bin/i386-unknown-linux-gnu-ld.bfd b/test/Driver/Inputs/basic_cross_linux_tree/usr/bin/i386-unknown-linux-gnu-ld.bfd
new file mode 100755 (executable)
index 0000000..b23e556
--- /dev/null
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/Driver/Inputs/basic_cross_linux_tree/usr/bin/i386-unknown-linux-gnu-ld.gold b/test/Driver/Inputs/basic_cross_linux_tree/usr/bin/i386-unknown-linux-gnu-ld.gold
new file mode 100755 (executable)
index 0000000..b23e556
--- /dev/null
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/Driver/Inputs/basic_cross_linux_tree/usr/bin/x86_64-unknown-linux-gnu-as b/test/Driver/Inputs/basic_cross_linux_tree/usr/bin/x86_64-unknown-linux-gnu-as
new file mode 100755 (executable)
index 0000000..b23e556
--- /dev/null
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/Driver/Inputs/basic_cross_linux_tree/usr/bin/x86_64-unknown-linux-gnu-ld b/test/Driver/Inputs/basic_cross_linux_tree/usr/bin/x86_64-unknown-linux-gnu-ld
new file mode 120000 (symlink)
index 0000000..ce36ac0
--- /dev/null
@@ -0,0 +1 @@
+x86_64-unknown-linux-gnu-ld.gold
\ No newline at end of file
diff --git a/test/Driver/Inputs/basic_cross_linux_tree/usr/bin/x86_64-unknown-linux-gnu-ld.bfd b/test/Driver/Inputs/basic_cross_linux_tree/usr/bin/x86_64-unknown-linux-gnu-ld.bfd
new file mode 100755 (executable)
index 0000000..b23e556
--- /dev/null
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/Driver/Inputs/basic_cross_linux_tree/usr/bin/x86_64-unknown-linux-gnu-ld.gold b/test/Driver/Inputs/basic_cross_linux_tree/usr/bin/x86_64-unknown-linux-gnu-ld.gold
new file mode 100755 (executable)
index 0000000..b23e556
--- /dev/null
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/Driver/Inputs/basic_cross_linux_tree/usr/i386-unknown-linux-gnu/bin/as b/test/Driver/Inputs/basic_cross_linux_tree/usr/i386-unknown-linux-gnu/bin/as
new file mode 100755 (executable)
index 0000000..b23e556
--- /dev/null
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/Driver/Inputs/basic_cross_linux_tree/usr/i386-unknown-linux-gnu/bin/ld b/test/Driver/Inputs/basic_cross_linux_tree/usr/i386-unknown-linux-gnu/bin/ld
new file mode 120000 (symlink)
index 0000000..6cd0370
--- /dev/null
@@ -0,0 +1 @@
+ld.gold
\ No newline at end of file
diff --git a/test/Driver/Inputs/basic_cross_linux_tree/usr/i386-unknown-linux-gnu/bin/ld.bfd b/test/Driver/Inputs/basic_cross_linux_tree/usr/i386-unknown-linux-gnu/bin/ld.bfd
new file mode 100755 (executable)
index 0000000..b23e556
--- /dev/null
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/Driver/Inputs/basic_cross_linux_tree/usr/i386-unknown-linux-gnu/bin/ld.gold b/test/Driver/Inputs/basic_cross_linux_tree/usr/i386-unknown-linux-gnu/bin/ld.gold
new file mode 100755 (executable)
index 0000000..b23e556
--- /dev/null
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/Driver/Inputs/basic_cross_linux_tree/usr/i386-unknown-linux-gnu/lib/.keep b/test/Driver/Inputs/basic_cross_linux_tree/usr/i386-unknown-linux-gnu/lib/.keep
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/test/Driver/Inputs/basic_cross_linux_tree/usr/lib/gcc/i386-unknown-linux-gnu/4.6.0/crtbegin.o b/test/Driver/Inputs/basic_cross_linux_tree/usr/lib/gcc/i386-unknown-linux-gnu/4.6.0/crtbegin.o
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/test/Driver/Inputs/basic_cross_linux_tree/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/crtbegin.o b/test/Driver/Inputs/basic_cross_linux_tree/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/crtbegin.o
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/test/Driver/Inputs/basic_cross_linux_tree/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/crtbeginT.o b/test/Driver/Inputs/basic_cross_linux_tree/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/crtbeginT.o
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/test/Driver/Inputs/basic_cross_linux_tree/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/crtfastmath.o b/test/Driver/Inputs/basic_cross_linux_tree/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/crtfastmath.o
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/test/Driver/Inputs/basic_cross_linux_tree/usr/x86_64-unknown-linux-gnu/bin/as b/test/Driver/Inputs/basic_cross_linux_tree/usr/x86_64-unknown-linux-gnu/bin/as
new file mode 100755 (executable)
index 0000000..b23e556
--- /dev/null
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/Driver/Inputs/basic_cross_linux_tree/usr/x86_64-unknown-linux-gnu/bin/ld b/test/Driver/Inputs/basic_cross_linux_tree/usr/x86_64-unknown-linux-gnu/bin/ld
new file mode 120000 (symlink)
index 0000000..6cd0370
--- /dev/null
@@ -0,0 +1 @@
+ld.gold
\ No newline at end of file
diff --git a/test/Driver/Inputs/basic_cross_linux_tree/usr/x86_64-unknown-linux-gnu/bin/ld.bfd b/test/Driver/Inputs/basic_cross_linux_tree/usr/x86_64-unknown-linux-gnu/bin/ld.bfd
new file mode 100755 (executable)
index 0000000..b23e556
--- /dev/null
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/Driver/Inputs/basic_cross_linux_tree/usr/x86_64-unknown-linux-gnu/bin/ld.gold b/test/Driver/Inputs/basic_cross_linux_tree/usr/x86_64-unknown-linux-gnu/bin/ld.gold
new file mode 100755 (executable)
index 0000000..b23e556
--- /dev/null
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/Driver/Inputs/basic_cross_linux_tree/usr/x86_64-unknown-linux-gnu/lib/.keep b/test/Driver/Inputs/basic_cross_linux_tree/usr/x86_64-unknown-linux-gnu/lib/.keep
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/test/Driver/Inputs/multilib_32bit_linux_tree/usr/bin/as b/test/Driver/Inputs/multilib_32bit_linux_tree/usr/bin/as
new file mode 120000 (symlink)
index 0000000..0065315
--- /dev/null
@@ -0,0 +1 @@
+i386-unknown-linux-gnu-as
\ No newline at end of file
diff --git a/test/Driver/Inputs/multilib_32bit_linux_tree/usr/bin/i386-unknown-linux-gnu-as b/test/Driver/Inputs/multilib_32bit_linux_tree/usr/bin/i386-unknown-linux-gnu-as
new file mode 100755 (executable)
index 0000000..b23e556
--- /dev/null
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/Driver/Inputs/multilib_32bit_linux_tree/usr/bin/i386-unknown-linux-gnu-ld b/test/Driver/Inputs/multilib_32bit_linux_tree/usr/bin/i386-unknown-linux-gnu-ld
new file mode 100755 (executable)
index 0000000..b23e556
--- /dev/null
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/Driver/Inputs/multilib_32bit_linux_tree/usr/bin/ld b/test/Driver/Inputs/multilib_32bit_linux_tree/usr/bin/ld
new file mode 120000 (symlink)
index 0000000..9e55742
--- /dev/null
@@ -0,0 +1 @@
+i386-unknown-linux-gnu-ld
\ No newline at end of file
diff --git a/test/Driver/Inputs/multilib_32bit_linux_tree/usr/i386-unknown-linux/bin/as b/test/Driver/Inputs/multilib_32bit_linux_tree/usr/i386-unknown-linux/bin/as
new file mode 120000 (symlink)
index 0000000..2aa12fd
--- /dev/null
@@ -0,0 +1 @@
+../../bin/i386-unknown-linux-gnu-as
\ No newline at end of file
diff --git a/test/Driver/Inputs/multilib_32bit_linux_tree/usr/i386-unknown-linux/bin/ld b/test/Driver/Inputs/multilib_32bit_linux_tree/usr/i386-unknown-linux/bin/ld
new file mode 120000 (symlink)
index 0000000..5aeaff6
--- /dev/null
@@ -0,0 +1 @@
+../../bin/i386-unknown-linux-gnu-ld
\ No newline at end of file
diff --git a/test/Driver/Inputs/multilib_64bit_linux_tree/usr/bin/as b/test/Driver/Inputs/multilib_64bit_linux_tree/usr/bin/as
new file mode 120000 (symlink)
index 0000000..477cbc9
--- /dev/null
@@ -0,0 +1 @@
+x86_64-unknown-linux-gnu-as
\ No newline at end of file
diff --git a/test/Driver/Inputs/multilib_64bit_linux_tree/usr/bin/ld b/test/Driver/Inputs/multilib_64bit_linux_tree/usr/bin/ld
new file mode 120000 (symlink)
index 0000000..5343caf
--- /dev/null
@@ -0,0 +1 @@
+x86_64-unknown-linux-gnu-ld
\ No newline at end of file
diff --git a/test/Driver/Inputs/multilib_64bit_linux_tree/usr/bin/x86_64-unknown-linux-gnu-as b/test/Driver/Inputs/multilib_64bit_linux_tree/usr/bin/x86_64-unknown-linux-gnu-as
new file mode 100755 (executable)
index 0000000..b23e556
--- /dev/null
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/Driver/Inputs/multilib_64bit_linux_tree/usr/bin/x86_64-unknown-linux-gnu-ld b/test/Driver/Inputs/multilib_64bit_linux_tree/usr/bin/x86_64-unknown-linux-gnu-ld
new file mode 100755 (executable)
index 0000000..b23e556
--- /dev/null
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/Driver/Inputs/multilib_64bit_linux_tree/usr/x86_64-unknown-linux/bin/as b/test/Driver/Inputs/multilib_64bit_linux_tree/usr/x86_64-unknown-linux/bin/as
new file mode 120000 (symlink)
index 0000000..84a9113
--- /dev/null
@@ -0,0 +1 @@
+../../bin/x86_64-unknown-linux-gnu-as
\ No newline at end of file
diff --git a/test/Driver/Inputs/multilib_64bit_linux_tree/usr/x86_64-unknown-linux/bin/ld b/test/Driver/Inputs/multilib_64bit_linux_tree/usr/x86_64-unknown-linux/bin/ld
new file mode 120000 (symlink)
index 0000000..c417e3a
--- /dev/null
@@ -0,0 +1 @@
+../../bin/x86_64-unknown-linux-gnu-ld
\ No newline at end of file
diff --git a/test/Driver/cross-linux-tools.c b/test/Driver/cross-linux-tools.c
new file mode 100644 (file)
index 0000000..1c7aa3d
--- /dev/null
@@ -0,0 +1,41 @@
+// RUN: %clang -### -o %t %s 2>&1 -no-integrated-as \
+// RUN:   --gcc-toolchain=%S/Inputs/basic_cross_linux_tree/usr \
+// RUN:   --target=i386-unknown-linux-gnu \
+// RUN:   | FileCheck --check-prefix=CHECK-I386 %s
+// CHECK-I386: "-cc1" "-triple" "i386-unknown-linux-gnu"
+// CHECK-I386: "{{.*}}/Inputs/basic_cross_linux_tree/usr/lib/gcc/i386-unknown-linux-gnu/4.6.0/../../../../i386-unknown-linux-gnu/bin/as"
+// CHECK-I386: "{{.*}}/Inputs/basic_cross_linux_tree/usr/lib/gcc/i386-unknown-linux-gnu/4.6.0/../../../../i386-unknown-linux-gnu/bin/ld"
+//
+// RUN: %clang -### -o %t %s 2>&1 -no-integrated-as \
+// RUN:   --gcc-toolchain=%S/Inputs/basic_cross_linux_tree/usr \
+// RUN:   --target=x86_64-unknown-linux-gnu \
+// RUN:   | FileCheck --check-prefix=CHECK-X86-64 %s
+// CHECK-X86-64: "-cc1" "-triple" "x86_64-unknown-linux-gnu"
+// CHECK-X86-64: "{{.*}}/Inputs/basic_cross_linux_tree/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/../../../../x86_64-unknown-linux-gnu/bin/as"
+// CHECK-X86-64: "{{.*}}/Inputs/basic_cross_linux_tree/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/../../../../x86_64-unknown-linux-gnu/bin/ld"
+//
+// RUN: %clang -### -o %t %s 2>&1 -no-integrated-as \
+// RUN:   --gcc-toolchain=%S/Inputs/basic_cross_linux_tree/usr \
+// RUN:   --target=x86_64-unknown-linux-gnu -m32 \
+// RUN:   | FileCheck --check-prefix=CHECK-I386 %s
+//
+// RUN: %clang -### -o %t %s 2>&1 -no-integrated-as \
+// RUN:   --gcc-toolchain=%S/Inputs/basic_cross_linux_tree/usr \
+// RUN:   --target=i386-unknown-linux-gnu -m64 \
+// RUN:   | FileCheck --check-prefix=CHECK-X86-64 %s
+//
+// RUN: %clang -### -o %t %s 2>&1 -no-integrated-as \
+// RUN:   --gcc-toolchain=%S/Inputs/multilib_32bit_linux_tree/usr \
+// RUN:   --target=i386-unknown-linux \
+// RUN:   | FileCheck --check-prefix=CHECK-MULTI32-I386 %s
+// CHECK-MULTI32-I386: "-cc1" "-triple" "i386-unknown-linux"
+// CHECK-MULTI32-I386: "{{.*}}/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/4.6.0/../../../../i386-unknown-linux/bin/as"
+// CHECK-MULTI32-I386: "{{.*}}/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/4.6.0/../../../../i386-unknown-linux/bin/ld"
+//
+// RUN: %clang -### -o %t %s 2>&1 -no-integrated-as \
+// RUN:   --gcc-toolchain=%S/Inputs/multilib_64bit_linux_tree/usr \
+// RUN:   --target=x86_64-unknown-linux \
+// RUN:   | FileCheck --check-prefix=CHECK-MULTI64-X86-64 %s
+// CHECK-MULTI64-X86-64: "-cc1" "-triple" "x86_64-unknown-linux"
+// CHECK-MULTI64-X86-64: "{{.*}}/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/4.6.0/../../../../x86_64-unknown-linux/bin/as"
+// CHECK-MULTI64-X86-64: "{{.*}}/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/4.6.0/../../../../x86_64-unknown-linux/bin/ld"