mirror of https://github.com/microsoft/clang.git
[MinGW] Skip adding default win32 api libraries if -lwindowsapp is specified
In this setup, skip adding all the default windows import libraries, if linking to windowsapp (which replaces them, when targeting the windows store/UWP api subset). With GCC, the same is achieved by using a custom spec file, but since clang doesn't use spec files, we have to allow other means of overriding what default libraries to use (without going all the way to using -nostdlib, which would exclude everything). The same approach, in detecting certain user specified libraries and omitting others from the defaults, was already used in SVN r314138. Differential Revision: https://reviews.llvm.org/D49059 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@336655 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
fca87f4a0a
commit
c3b3b46612
|
@ -201,6 +201,14 @@ void tools::MinGW::Linker::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
CmdArgs.push_back("-Bdynamic");
|
||||
}
|
||||
|
||||
bool HasWindowsApp = false;
|
||||
for (auto Lib : Args.getAllArgValues(options::OPT_l)) {
|
||||
if (Lib == "windowsapp") {
|
||||
HasWindowsApp = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!Args.hasArg(options::OPT_nostdlib)) {
|
||||
if (!Args.hasArg(options::OPT_nodefaultlibs)) {
|
||||
if (Args.hasArg(options::OPT_static))
|
||||
|
@ -223,15 +231,19 @@ void tools::MinGW::Linker::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
if (Args.hasArg(options::OPT_pthread))
|
||||
CmdArgs.push_back("-lpthread");
|
||||
|
||||
// add system libraries
|
||||
if (Args.hasArg(options::OPT_mwindows)) {
|
||||
CmdArgs.push_back("-lgdi32");
|
||||
CmdArgs.push_back("-lcomdlg32");
|
||||
if (!HasWindowsApp) {
|
||||
// Add system libraries. If linking to libwindowsapp.a, that import
|
||||
// library replaces all these and we shouldn't accidentally try to
|
||||
// link to the normal desktop mode dlls.
|
||||
if (Args.hasArg(options::OPT_mwindows)) {
|
||||
CmdArgs.push_back("-lgdi32");
|
||||
CmdArgs.push_back("-lcomdlg32");
|
||||
}
|
||||
CmdArgs.push_back("-ladvapi32");
|
||||
CmdArgs.push_back("-lshell32");
|
||||
CmdArgs.push_back("-luser32");
|
||||
CmdArgs.push_back("-lkernel32");
|
||||
}
|
||||
CmdArgs.push_back("-ladvapi32");
|
||||
CmdArgs.push_back("-lshell32");
|
||||
CmdArgs.push_back("-luser32");
|
||||
CmdArgs.push_back("-lkernel32");
|
||||
|
||||
if (Args.hasArg(options::OPT_static))
|
||||
CmdArgs.push_back("--end-group");
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
// RUN: %clang -v -target i686-pc-windows-gnu -### %s 2>&1 | FileCheck -check-prefix=CHECK_DEFAULT %s
|
||||
// RUN: %clang -v -target i686-pc-windows-gnu -### %s -lwindowsapp 2>&1 | FileCheck -check-prefix=CHECK_WINDOWSAPP %s
|
||||
|
||||
// CHECK_DEFAULT: "-lmsvcrt" "-ladvapi32" "-lshell32" "-luser32" "-lkernel32" "-lmingw32"
|
||||
// CHECK_WINDOWSAPP: "-lwindowsapp" "-lmingw32"
|
||||
// CHECK_WINDOWSAPP-SAME: "-lmsvcrt" "-lmingw32"
|
Loading…
Reference in New Issue