diff options
| -rw-r--r-- | clang/lib/Driver/ToolChains/MinGW.cpp | 28 | ||||
| -rw-r--r-- | clang/test/Driver/mingw-windowsapp.c | 6 | 
2 files changed, 26 insertions, 8 deletions
diff --git a/clang/lib/Driver/ToolChains/MinGW.cpp b/clang/lib/Driver/ToolChains/MinGW.cpp index da71a84b760..a88e00f0c8e 100644 --- a/clang/lib/Driver/ToolChains/MinGW.cpp +++ b/clang/lib/Driver/ToolChains/MinGW.cpp @@ -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"); diff --git a/clang/test/Driver/mingw-windowsapp.c b/clang/test/Driver/mingw-windowsapp.c new file mode 100644 index 00000000000..bf6f2ec3fa3 --- /dev/null +++ b/clang/test/Driver/mingw-windowsapp.c @@ -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"  | 

