forked from OSchip/llvm-project
[MinGW, CrossWindows] Allow passing -static together with -shared
In these combinations, link a DLL as usual, but pass -Bstatic instead of -Bdynamic to indicate prefering static libraries. Differential Revision: https://reviews.llvm.org/D43811 llvm-svn: 326235
This commit is contained in:
parent
d1400213f5
commit
ca4a24eb72
|
@ -127,7 +127,8 @@ void tools::CrossWindows::Linker::ConstructJob(
|
|||
}
|
||||
|
||||
CmdArgs.push_back("-shared");
|
||||
CmdArgs.push_back("-Bdynamic");
|
||||
CmdArgs.push_back(Args.hasArg(options::OPT_static) ? "-Bstatic"
|
||||
: "-Bdynamic");
|
||||
|
||||
CmdArgs.push_back("--enable-auto-image-base");
|
||||
|
||||
|
|
|
@ -141,22 +141,21 @@ void tools::MinGW::Linker::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
CmdArgs.push_back("console");
|
||||
}
|
||||
|
||||
if (Args.hasArg(options::OPT_mdll))
|
||||
CmdArgs.push_back("--dll");
|
||||
else if (Args.hasArg(options::OPT_shared))
|
||||
CmdArgs.push_back("--shared");
|
||||
if (Args.hasArg(options::OPT_static))
|
||||
CmdArgs.push_back("-Bstatic");
|
||||
else {
|
||||
if (Args.hasArg(options::OPT_mdll))
|
||||
CmdArgs.push_back("--dll");
|
||||
else if (Args.hasArg(options::OPT_shared))
|
||||
CmdArgs.push_back("--shared");
|
||||
else
|
||||
CmdArgs.push_back("-Bdynamic");
|
||||
if (Args.hasArg(options::OPT_mdll) || Args.hasArg(options::OPT_shared)) {
|
||||
CmdArgs.push_back("-e");
|
||||
if (TC.getArch() == llvm::Triple::x86)
|
||||
CmdArgs.push_back("_DllMainCRTStartup@12");
|
||||
else
|
||||
CmdArgs.push_back("DllMainCRTStartup");
|
||||
CmdArgs.push_back("--enable-auto-image-base");
|
||||
}
|
||||
if (Args.hasArg(options::OPT_mdll) || Args.hasArg(options::OPT_shared)) {
|
||||
CmdArgs.push_back("-e");
|
||||
if (TC.getArch() == llvm::Triple::x86)
|
||||
CmdArgs.push_back("_DllMainCRTStartup@12");
|
||||
else
|
||||
CmdArgs.push_back("DllMainCRTStartup");
|
||||
CmdArgs.push_back("--enable-auto-image-base");
|
||||
}
|
||||
|
||||
CmdArgs.push_back("-o");
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
// Verified with gcc version 5.1.0 (i686-posix-dwarf-rev0, Built by MinGW-W64 project).
|
||||
|
||||
// gcc, static
|
||||
// RUN: %clang -v -target i686-pc-windows-gnu -rtlib=platform -### %s 2>&1 | FileCheck -check-prefix=CHECK_STATIC %s
|
||||
// RUN: %clang -static -v -target i686-pc-windows-gnu -rtlib=platform -### %s 2>&1 | FileCheck -check-prefix=CHECK_STATIC %s
|
||||
// RUN: %clang -static-libgcc -v -target i686-pc-windows-gnu -rtlib=platform -### %s 2>&1 | FileCheck -check-prefix=CHECK_STATIC %s
|
||||
// RUN: %clang -static -shared -v -target i686-pc-windows-gnu -rtlib=platform -### %s 2>&1 | FileCheck -check-prefix=CHECK_STATIC %s
|
||||
// RUN: %clang -static-libgcc -shared -v -target i686-pc-windows-gnu -rtlib=platform -### %s 2>&1 | FileCheck -check-prefix=CHECK_STATIC %s
|
||||
// RUN: %clang -v -target i686-pc-windows-gnu -rtlib=platform -### %s 2>&1 | FileCheck -check-prefixes=CHECK_STATIC,CHECK_BDYNAMIC %s
|
||||
// RUN: %clang -static -v -target i686-pc-windows-gnu -rtlib=platform -### %s 2>&1 | FileCheck -check-prefixes=CHECK_STATIC,CHECK_BSTATIC %s
|
||||
// RUN: %clang -static-libgcc -v -target i686-pc-windows-gnu -rtlib=platform -### %s 2>&1 | FileCheck -check-prefixes=CHECK_STATIC,CHECK_BDYNAMIC %s
|
||||
// RUN: %clang -static -shared -v -target i686-pc-windows-gnu -rtlib=platform -### %s 2>&1 | FileCheck -check-prefixes=CHECK_STATIC,CHECK_SHARED,CHECK_BSTATIC %s
|
||||
// RUN: %clang -static-libgcc -shared -v -target i686-pc-windows-gnu -rtlib=platform -### %s 2>&1 | FileCheck -check-prefixes=CHECK_STATIC,CHECK_SHARED,CHECK_BDYNAMIC %s
|
||||
|
||||
// gcc, dynamic
|
||||
// RUN: %clang -shared -v -target i686-pc-windows-gnu -rtlib=platform -### %s 2>&1 | FileCheck -check-prefix=CHECK_DYNAMIC %s
|
||||
|
@ -21,5 +21,8 @@
|
|||
// RUN: %clang --driver-mode=g++ -v -target i686-pc-windows-gnu -rtlib=platform -### %s 2>&1 | FileCheck -check-prefix=CHECK_DYNAMIC %s
|
||||
// RUN: %clang -shared --driver-mode=g++ -v -target i686-pc-windows-gnu -rtlib=platform -### %s 2>&1 | FileCheck -check-prefix=CHECK_DYNAMIC %s
|
||||
|
||||
// CHECK_SHARED: "--shared"
|
||||
// CHECK_BSTATIC: "-Bstatic"
|
||||
// CHECK_BDYNAMIC: "-Bdynamic"
|
||||
// CHECK_STATIC: "-lgcc" "-lgcc_eh"
|
||||
// CHECK_DYNAMIC: "-lgcc_s" "-lgcc"
|
||||
|
|
|
@ -3,6 +3,11 @@
|
|||
|
||||
// CHECK-BASIC-LIBCXX: armv7-windows-itanium-ld" "--sysroot={{.*}}/Inputs/Windows/ARM/8.1" "-m" "thumb2pe" "-Bdynamic" "--entry" "mainCRTStartup" "--allow-multiple-definition" "-o" "{{[^"]*}}" "{{[^"]*}}.o" "-lmsvcrt"
|
||||
|
||||
// RUN: %clang -### -target armv7-windows-itanium --sysroot %S/Inputs/Windows/ARM/8.1 -B %S/Inputs/Windows/ARM/8.1/usr/bin -fuse-ld=ld -stdlib=libstdc++ -rtlib=compiler-rt -static -o /dev/null %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix CHECK-STATIC
|
||||
|
||||
// CHECK-STATIC: armv7-windows-itanium-ld" "--sysroot={{.*}}/Inputs/Windows/ARM/8.1" "-m" "thumb2pe" "-Bstatic" "--entry" "mainCRTStartup" "--allow-multiple-definition" "-o" "{{[^"]*}}" "{{[^"]*}}.o" "-lmsvcrt"
|
||||
|
||||
// RUN: %clang -### -target armv7-windows-itanium --sysroot %s/Inputs/Windows/ARM/8.1 -B %S/Inputs/Windows/ARM/8.1/usr/bin -fuse-ld=ld -rtlib=compiler-rt -stdlib=libstdc++ -o /dev/null %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix CHECK-RTLIB
|
||||
|
||||
|
@ -23,6 +28,11 @@
|
|||
|
||||
// CHECK-SHARED: armv7-windows-itanium-ld" "--sysroot={{.*}}/Inputs/Windows/ARM/8.1" "-m" "thumb2pe" "-shared" "-Bdynamic" "--enable-auto-image-base" "--entry" "_DllMainCRTStartup" "--allow-multiple-definition" "-o" "shared.dll" "--out-implib" "shared.lib" "{{.*}}.o" "-lmsvcrt" "{{.*[\\/]}}clang_rt.builtins-arm.lib"
|
||||
|
||||
// RUN: %clang -### -target armv7-windows-itanium --sysroot %S/Inputs/Windows/ARM/8.1 -B %S/Inputs/Windows/ARM/8.1/usr/bin -fuse-ld=ld -shared -rtlib=compiler-rt -stdlib=libc++ -static -o shared.dll %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix CHECK-SHARED-STATIC
|
||||
|
||||
// CHECK-SHARED-STATIC: armv7-windows-itanium-ld" "--sysroot={{.*}}/Inputs/Windows/ARM/8.1" "-m" "thumb2pe" "-shared" "-Bstatic" "--enable-auto-image-base" "--entry" "_DllMainCRTStartup" "--allow-multiple-definition" "-o" "shared.dll" "--out-implib" "shared.lib" "{{.*}}.o" "-lmsvcrt" "{{.*[\\/]}}clang_rt.builtins-arm.lib"
|
||||
|
||||
// RUN: %clang -### -target armv7-windows-itanium --sysroot %s/Inputs/Windows/ARM/8.1 -B %S/Inputs/Windows/ARM/8.1/usr/bin -fuse-ld=ld -shared -rtlib=compiler-rt -stdlib=libc++ -nostartfiles -o shared.dll %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix CHECK-NOSTARTFILES
|
||||
|
||||
|
|
Loading…
Reference in New Issue