diff options
| author | Dave Lee <davelee.com@gmail.com> | 2017-11-06 21:18:05 +0000 |
|---|---|---|
| committer | Dave Lee <davelee.com@gmail.com> | 2017-11-06 21:18:05 +0000 |
| commit | f96bedfce301aa3ebaa14968558cfd5e9431818e (patch) | |
| tree | bbb48a39df081a3d4e006645a88f7fdfbd62a669 /clang | |
| parent | 89176473336a28859db7d0ba548e5647a1482751 (diff) | |
| download | bcm5719-llvm-f96bedfce301aa3ebaa14968558cfd5e9431818e.tar.gz bcm5719-llvm-f96bedfce301aa3ebaa14968558cfd5e9431818e.zip | |
Vary Windows toolchain selection by -fuse-ld
Summary:
This change allows binutils to be used for linking with MSVC. Currently, when
using an MSVC target and `-fuse-ld=bfd`, the driver produces an invalid linker
invocation.
Reviewers: rnk, compnerd
Reviewed By: compnerd
Subscribers: smeenai, cfe-commits
Differential Revision: https://reviews.llvm.org/D39509
llvm-svn: 317511
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/Driver/Driver.cpp | 8 | ||||
| -rwxr-xr-x | clang/test/Driver/Inputs/Windows/usr/bin/ld.bfd | 0 | ||||
| -rw-r--r-- | clang/test/Driver/fuse-ld.c | 26 |
3 files changed, 33 insertions, 1 deletions
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 765b006e909..e14a596d981 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -3880,7 +3880,13 @@ const ToolChain &Driver::getToolChain(const ArgList &Args, break; case llvm::Triple::MSVC: case llvm::Triple::UnknownEnvironment: - TC = llvm::make_unique<toolchains::MSVCToolChain>(*this, Target, Args); + if (Args.getLastArgValue(options::OPT_fuse_ld_EQ) + .startswith_lower("bfd")) + TC = llvm::make_unique<toolchains::CrossWindowsToolChain>( + *this, Target, Args); + else + TC = + llvm::make_unique<toolchains::MSVCToolChain>(*this, Target, Args); break; } break; diff --git a/clang/test/Driver/Inputs/Windows/usr/bin/ld.bfd b/clang/test/Driver/Inputs/Windows/usr/bin/ld.bfd new file mode 100755 index 00000000000..e69de29bb2d --- /dev/null +++ b/clang/test/Driver/Inputs/Windows/usr/bin/ld.bfd diff --git a/clang/test/Driver/fuse-ld.c b/clang/test/Driver/fuse-ld.c index bd8c9a53862..b043ce624ed 100644 --- a/clang/test/Driver/fuse-ld.c +++ b/clang/test/Driver/fuse-ld.c @@ -67,3 +67,29 @@ // RUN: -gcc-toolchain %S/Inputs/basic_android_tree 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK-ANDROID-ARM-GOLD-TC // CHECK-ANDROID-ARM-GOLD-TC: Inputs/basic_android_tree/lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin{{/|\\+}}ld.gold + + +// RUN: %clang %s -### -fuse-ld=link \ +// RUN: -target i686-unknown-windows-msvc 2>&1 \ +// RUN: | FileCheck %s --check-prefix CHECK-WINDOWS-MSVC-LINK +// CHECK-WINDOWS-MSVC-LINK: "{{.*}}link.exe" +// CHECK-WINDOWS-MSVC-LINK-SAME: "-out:{{.*}}" + +// RUN: %clang %s -### -fuse-ld=lld \ +// RUN: -target i686-unknown-windows-msvc 2>&1 \ +// RUN: | FileCheck %s --check-prefix CHECK-WINDOWS-MSVC-LLD +// CHECK-WINDOWS-MSVC-LLD: "{{.*}}lld-link" +// CHECK-WINDOWS-MSVC-LLD-SAME: "-out:{{.*}}" + +// RUN: %clang %s -### -fuse-ld=lld-link \ +// RUN: -target i686-unknown-windows-msvc 2>&1 \ +// RUN: | FileCheck %s --check-prefix CHECK-WINDOWS-MSVC-LLD-LINK +// CHECK-WINDOWS-MSVC-LLD-LINK: "{{.*}}lld-link" +// CHECK-WINDOWS-MSVC-LLD-LINK-SAME: "-out:{{.*}}" + +// RUN: %clang %s -### -fuse-ld=bfd \ +// RUN: -target i686-unknown-windows-msvc \ +// RUN: -B %S/Inputs/Windows/usr/bin 2>&1 \ +// RUN: | FileCheck %s --check-prefix CHECK-WINDOWS-MSVC-BFD +// CHECK-WINDOWS-MSVC-BFD: "{{.*}}ld.bfd" +// CHECK-WINDOWS-MSVC-BFD-SAME: "-o" |

