Re: [PATCH] D11932: [OPENMP] Link libomp.lib on Windows
This revision was automatically updated to reflect the committed changes. Closed by commit rL245414: [OPENMP] Link libomp.lib on Windows (authored by ABataev). Changed prior to commit: http://reviews.llvm.org/D11932?vs=32275&id=32502#toc Repository: rL LLVM http://reviews.llvm.org/D11932 Files: cfe/trunk/lib/Driver/Tools.cpp cfe/trunk/test/OpenMP/linking.c Index: cfe/trunk/test/OpenMP/linking.c === --- cfe/trunk/test/OpenMP/linking.c +++ cfe/trunk/test/OpenMP/linking.c @@ -69,3 +69,21 @@ // CHECK-LD-OVERRIDE-64: "-lgomp" "-lrt" "-lgcc" // CHECK-LD-OVERRIDE-64: "-lpthread" "-lc" // +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -fopenmp=libomp -target x86_64-msvc-win32 \ +// RUN: | FileCheck --check-prefix=CHECK-MSVC-LINK-64 %s +// CHECK-MSVC-LINK-64: link.exe +// CHECK-MSVC-LINK-64-SAME: -nodefaultlib:vcomp.lib +// CHECK-MSVC-LINK-64-SAME: -nodefaultlib:vcompd.lib +// CHECK-MSVC-LINK-64-SAME: -libpath:{{.+}}/../lib +// CHECK-MSVC-LINK-64-SAME: -defaultlib:libomp.lib +// +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -fopenmp=libiomp5 -target x86_64-msvc-win32 \ +// RUN: | FileCheck --check-prefix=CHECK-MSVC-ILINK-64 %s +// CHECK-MSVC-ILINK-64: link.exe +// CHECK-MSVC-ILINK-64-SAME: -nodefaultlib:vcomp.lib +// CHECK-MSVC-ILINK-64-SAME: -nodefaultlib:vcompd.lib +// CHECK-MSVC-ILINK-64-SAME: -libpath:{{.+}}/../lib +// CHECK-MSVC-ILINK-64-SAME: -defaultlib:libiomp5md.lib +// Index: cfe/trunk/lib/Driver/Tools.cpp === --- cfe/trunk/lib/Driver/Tools.cpp +++ cfe/trunk/lib/Driver/Tools.cpp @@ -8885,6 +8885,27 @@ Args.AddAllArgValues(CmdArgs, options::OPT__SLASH_link); + if (Args.hasFlag(options::OPT_fopenmp, options::OPT_fopenmp_EQ, + options::OPT_fno_openmp, false)) { +CmdArgs.push_back("-nodefaultlib:vcomp.lib"); +CmdArgs.push_back("-nodefaultlib:vcompd.lib"); +CmdArgs.push_back(Args.MakeArgString(std::string("-libpath:") + + TC.getDriver().Dir + "/../lib")); +switch (getOpenMPRuntime(getToolChain(), Args)) { +case OMPRT_OMP: + CmdArgs.push_back("-defaultlib:libomp.lib"); + break; +case OMPRT_IOMP5: + CmdArgs.push_back("-defaultlib:libiomp5md.lib"); + break; +case OMPRT_GOMP: + break; +case OMPRT_Unknown: + // Already diagnosed. + break; +} + } + // Add filenames, libraries, and other linker inputs. for (const auto &Input : Inputs) { if (Input.isFilename()) { Index: cfe/trunk/test/OpenMP/linking.c === --- cfe/trunk/test/OpenMP/linking.c +++ cfe/trunk/test/OpenMP/linking.c @@ -69,3 +69,21 @@ // CHECK-LD-OVERRIDE-64: "-lgomp" "-lrt" "-lgcc" // CHECK-LD-OVERRIDE-64: "-lpthread" "-lc" // +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -fopenmp=libomp -target x86_64-msvc-win32 \ +// RUN: | FileCheck --check-prefix=CHECK-MSVC-LINK-64 %s +// CHECK-MSVC-LINK-64: link.exe +// CHECK-MSVC-LINK-64-SAME: -nodefaultlib:vcomp.lib +// CHECK-MSVC-LINK-64-SAME: -nodefaultlib:vcompd.lib +// CHECK-MSVC-LINK-64-SAME: -libpath:{{.+}}/../lib +// CHECK-MSVC-LINK-64-SAME: -defaultlib:libomp.lib +// +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -fopenmp=libiomp5 -target x86_64-msvc-win32 \ +// RUN: | FileCheck --check-prefix=CHECK-MSVC-ILINK-64 %s +// CHECK-MSVC-ILINK-64: link.exe +// CHECK-MSVC-ILINK-64-SAME: -nodefaultlib:vcomp.lib +// CHECK-MSVC-ILINK-64-SAME: -nodefaultlib:vcompd.lib +// CHECK-MSVC-ILINK-64-SAME: -libpath:{{.+}}/../lib +// CHECK-MSVC-ILINK-64-SAME: -defaultlib:libiomp5md.lib +// Index: cfe/trunk/lib/Driver/Tools.cpp === --- cfe/trunk/lib/Driver/Tools.cpp +++ cfe/trunk/lib/Driver/Tools.cpp @@ -8885,6 +8885,27 @@ Args.AddAllArgValues(CmdArgs, options::OPT__SLASH_link); + if (Args.hasFlag(options::OPT_fopenmp, options::OPT_fopenmp_EQ, + options::OPT_fno_openmp, false)) { +CmdArgs.push_back("-nodefaultlib:vcomp.lib"); +CmdArgs.push_back("-nodefaultlib:vcompd.lib"); +CmdArgs.push_back(Args.MakeArgString(std::string("-libpath:") + + TC.getDriver().Dir + "/../lib")); +switch (getOpenMPRuntime(getToolChain(), Args)) { +case OMPRT_OMP: + CmdArgs.push_back("-defaultlib:libomp.lib"); + break; +case OMPRT_IOMP5: + CmdArgs.push_back("-defaultlib:libiomp5md.lib"); + break; +case OMPRT_GOMP: + break; +case OMPRT_Unknown: + // Already diagnosed. + break; +} + } + // Add filenames, libraries, and other linker inputs. for (const auto &Input : Inputs) { if (Input.isFilename()) { ___ cfe-commits mailing list cfe
Re: [PATCH] D11932: [OPENMP] Link libomp.lib on Windows
rnk accepted this revision. rnk added a comment. lgtm http://reviews.llvm.org/D11932 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D11932: [OPENMP] Link libomp.lib on Windows
ismail accepted this revision. ismail added a reviewer: ismail. ismail added a comment. This revision is now accepted and ready to land. Great work. Tested fine on Windows. Next step would be mapping /openmp flag to -fopenmp but I guess thats for another bug. http://reviews.llvm.org/D11932 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D11932: [OPENMP] Link libomp.lib on Windows
ABataev updated this revision to Diff 32275. ABataev added a comment. Add path to libomp.lib. http://reviews.llvm.org/D11932 Files: lib/Driver/Tools.cpp test/OpenMP/linking.c Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -8884,6 +8884,27 @@ Args.AddAllArgValues(CmdArgs, options::OPT__SLASH_link); + if (Args.hasFlag(options::OPT_fopenmp, options::OPT_fopenmp_EQ, + options::OPT_fno_openmp, false)) { +CmdArgs.push_back("-nodefaultlib:vcomp.lib"); +CmdArgs.push_back("-nodefaultlib:vcompd.lib"); +CmdArgs.push_back(Args.MakeArgString(std::string("-libpath:") + + TC.getDriver().Dir + "/../lib")); +switch (getOpenMPRuntime(getToolChain(), Args)) { +case OMPRT_OMP: + CmdArgs.push_back("-defaultlib:libomp.lib"); + break; +case OMPRT_IOMP5: + CmdArgs.push_back("-defaultlib:libiomp5md.lib"); + break; +case OMPRT_GOMP: + break; +case OMPRT_Unknown: + // Already diagnosed. + break; +} + } + // Add filenames, libraries, and other linker inputs. for (const auto &Input : Inputs) { if (Input.isFilename()) { Index: test/OpenMP/linking.c === --- test/OpenMP/linking.c +++ test/OpenMP/linking.c @@ -69,3 +69,21 @@ // CHECK-LD-OVERRIDE-64: "-lgomp" "-lrt" "-lgcc" // CHECK-LD-OVERRIDE-64: "-lpthread" "-lc" // +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -fopenmp=libomp -target x86_64-msvc-win32 \ +// RUN: | FileCheck --check-prefix=CHECK-MSVC-LINK-64 %s +// CHECK-MSVC-LINK-64: link.exe +// CHECK-MSVC-LINK-64-SAME: -nodefaultlib:vcomp.lib +// CHECK-MSVC-LINK-64-SAME: -nodefaultlib:vcompd.lib +// CHECK-MSVC-LINK-64-SAME: -libpath:{{.+}}/../lib +// CHECK-MSVC-LINK-64-SAME: -defaultlib:libomp.lib +// +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -fopenmp=libiomp5 -target x86_64-msvc-win32 \ +// RUN: | FileCheck --check-prefix=CHECK-MSVC-ILINK-64 %s +// CHECK-MSVC-ILINK-64: link.exe +// CHECK-MSVC-ILINK-64-SAME: -nodefaultlib:vcomp.lib +// CHECK-MSVC-ILINK-64-SAME: -nodefaultlib:vcompd.lib +// CHECK-MSVC-ILINK-64-SAME: -libpath:{{.+}}/../lib +// CHECK-MSVC-ILINK-64-SAME: -defaultlib:libiomp5md.lib +// Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -8884,6 +8884,27 @@ Args.AddAllArgValues(CmdArgs, options::OPT__SLASH_link); + if (Args.hasFlag(options::OPT_fopenmp, options::OPT_fopenmp_EQ, + options::OPT_fno_openmp, false)) { +CmdArgs.push_back("-nodefaultlib:vcomp.lib"); +CmdArgs.push_back("-nodefaultlib:vcompd.lib"); +CmdArgs.push_back(Args.MakeArgString(std::string("-libpath:") + + TC.getDriver().Dir + "/../lib")); +switch (getOpenMPRuntime(getToolChain(), Args)) { +case OMPRT_OMP: + CmdArgs.push_back("-defaultlib:libomp.lib"); + break; +case OMPRT_IOMP5: + CmdArgs.push_back("-defaultlib:libiomp5md.lib"); + break; +case OMPRT_GOMP: + break; +case OMPRT_Unknown: + // Already diagnosed. + break; +} + } + // Add filenames, libraries, and other linker inputs. for (const auto &Input : Inputs) { if (Input.isFilename()) { Index: test/OpenMP/linking.c === --- test/OpenMP/linking.c +++ test/OpenMP/linking.c @@ -69,3 +69,21 @@ // CHECK-LD-OVERRIDE-64: "-lgomp" "-lrt" "-lgcc" // CHECK-LD-OVERRIDE-64: "-lpthread" "-lc" // +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -fopenmp=libomp -target x86_64-msvc-win32 \ +// RUN: | FileCheck --check-prefix=CHECK-MSVC-LINK-64 %s +// CHECK-MSVC-LINK-64: link.exe +// CHECK-MSVC-LINK-64-SAME: -nodefaultlib:vcomp.lib +// CHECK-MSVC-LINK-64-SAME: -nodefaultlib:vcompd.lib +// CHECK-MSVC-LINK-64-SAME: -libpath:{{.+}}/../lib +// CHECK-MSVC-LINK-64-SAME: -defaultlib:libomp.lib +// +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -fopenmp=libiomp5 -target x86_64-msvc-win32 \ +// RUN: | FileCheck --check-prefix=CHECK-MSVC-ILINK-64 %s +// CHECK-MSVC-ILINK-64: link.exe +// CHECK-MSVC-ILINK-64-SAME: -nodefaultlib:vcomp.lib +// CHECK-MSVC-ILINK-64-SAME: -nodefaultlib:vcompd.lib +// CHECK-MSVC-ILINK-64-SAME: -libpath:{{.+}}/../lib +// CHECK-MSVC-ILINK-64-SAME: -defaultlib:libiomp5md.lib +// ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D11932: [OPENMP] Link libomp.lib on Windows
ismail added a comment. In http://reviews.llvm.org/D11932#225158, @hfinkel wrote: > What library path should be passed (where did you build the OpenMP runtime > library)? This is a default installation so the lib path is $PATH_TO_CLANG_EXE/../lib which in my case is C:\Program Files\LLVM\lib http://reviews.llvm.org/D11932 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D11932: [OPENMP] Link libomp.lib on Windows
hfinkel added a subscriber: hfinkel. hfinkel added a comment. In http://reviews.llvm.org/D11932#222515, @ismail wrote: > Tests pass but, now when I tried to compile a file with -fopenmp I get: > > LINK: fatal error LNK1104: cannot open file 'libomp.lib' > > libomp.lib does exist in "C:\Program Files\LLVM\lib" but I guess we need to > pass the library path down to linker. What library path should be passed (where did you build the OpenMP runtime library)? http://reviews.llvm.org/D11932 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D11932: [OPENMP] Link libomp.lib on Windows
ismail added a comment. Tests pass but, now when I tried to compile a file with -fopenmp I get: LINK: fatal error LNK1104: cannot open file 'libomp.lib' libomp.lib does exist in "C:\Program Files\LLVM\lib" but I guess we need to pass the library path down to linker. http://reviews.llvm.org/D11932 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D11932: [OPENMP] Link libomp.lib on Windows
ABataev updated this revision to Diff 31792. ABataev added a comment. Test fix http://reviews.llvm.org/D11932 Files: lib/Driver/Tools.cpp test/OpenMP/linking.c Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -8878,6 +8878,25 @@ Args.AddAllArgValues(CmdArgs, options::OPT__SLASH_link); + if (Args.hasFlag(options::OPT_fopenmp, options::OPT_fopenmp_EQ, + options::OPT_fno_openmp, false)) { +CmdArgs.push_back("-nodefaultlib:vcomp.lib"); +CmdArgs.push_back("-nodefaultlib:vcompd.lib"); +switch (getOpenMPRuntime(getToolChain(), Args)) { +case OMPRT_OMP: + CmdArgs.push_back("-defaultlib:libomp.lib"); + break; +case OMPRT_IOMP5: + CmdArgs.push_back("-defaultlib:libiomp5md.lib"); + break; +case OMPRT_GOMP: + break; +case OMPRT_Unknown: + // Already diagnosed. + break; +} + } + // Add filenames, libraries, and other linker inputs. for (const auto &Input : Inputs) { if (Input.isFilename()) { Index: test/OpenMP/linking.c === --- test/OpenMP/linking.c +++ test/OpenMP/linking.c @@ -69,3 +69,19 @@ // CHECK-LD-OVERRIDE-64: "-lgomp" "-lrt" "-lgcc" // CHECK-LD-OVERRIDE-64: "-lpthread" "-lc" // +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -fopenmp=libomp -target x86_64-msvc-win32 \ +// RUN: | FileCheck --check-prefix=CHECK-MSVC-LINK-64 %s +// CHECK-MSVC-LINK-64: link.exe +// CHECK-MSVC-LINK-64-SAME: -nodefaultlib:vcomp.lib +// CHECK-MSVC-LINK-64-SAME: -nodefaultlib:vcompd.lib +// CHECK-MSVC-LINK-64-SAME: -defaultlib:libomp.lib +// +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -fopenmp=libiomp5 -target x86_64-msvc-win32 \ +// RUN: | FileCheck --check-prefix=CHECK-MSVC-ILINK-64 %s +// CHECK-MSVC-ILINK-64: link.exe +// CHECK-MSVC-ILINK-64-SAME: -nodefaultlib:vcomp.lib +// CHECK-MSVC-ILINK-64-SAME: -nodefaultlib:vcompd.lib +// CHECK-MSVC-ILINK-64-SAME: -defaultlib:libiomp5md.lib +// Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -8878,6 +8878,25 @@ Args.AddAllArgValues(CmdArgs, options::OPT__SLASH_link); + if (Args.hasFlag(options::OPT_fopenmp, options::OPT_fopenmp_EQ, + options::OPT_fno_openmp, false)) { +CmdArgs.push_back("-nodefaultlib:vcomp.lib"); +CmdArgs.push_back("-nodefaultlib:vcompd.lib"); +switch (getOpenMPRuntime(getToolChain(), Args)) { +case OMPRT_OMP: + CmdArgs.push_back("-defaultlib:libomp.lib"); + break; +case OMPRT_IOMP5: + CmdArgs.push_back("-defaultlib:libiomp5md.lib"); + break; +case OMPRT_GOMP: + break; +case OMPRT_Unknown: + // Already diagnosed. + break; +} + } + // Add filenames, libraries, and other linker inputs. for (const auto &Input : Inputs) { if (Input.isFilename()) { Index: test/OpenMP/linking.c === --- test/OpenMP/linking.c +++ test/OpenMP/linking.c @@ -69,3 +69,19 @@ // CHECK-LD-OVERRIDE-64: "-lgomp" "-lrt" "-lgcc" // CHECK-LD-OVERRIDE-64: "-lpthread" "-lc" // +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -fopenmp=libomp -target x86_64-msvc-win32 \ +// RUN: | FileCheck --check-prefix=CHECK-MSVC-LINK-64 %s +// CHECK-MSVC-LINK-64: link.exe +// CHECK-MSVC-LINK-64-SAME: -nodefaultlib:vcomp.lib +// CHECK-MSVC-LINK-64-SAME: -nodefaultlib:vcompd.lib +// CHECK-MSVC-LINK-64-SAME: -defaultlib:libomp.lib +// +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -fopenmp=libiomp5 -target x86_64-msvc-win32 \ +// RUN: | FileCheck --check-prefix=CHECK-MSVC-ILINK-64 %s +// CHECK-MSVC-ILINK-64: link.exe +// CHECK-MSVC-ILINK-64-SAME: -nodefaultlib:vcomp.lib +// CHECK-MSVC-ILINK-64-SAME: -nodefaultlib:vcompd.lib +// CHECK-MSVC-ILINK-64-SAME: -defaultlib:libiomp5md.lib +// ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D11932: [OPENMP] Link libomp.lib on Windows
ismail added a comment. OpenMP/linking.c fails here with VS2015 (building with -DCLANG_DEFAULT_OPENMP_RUNTIME=libomp) Command 21 Stderr: C:\cygwin64\home\ismail\src\llvm\tools\clang\test\OpenMP\linking.c:75:24: error: expected string not found in input // CHECK-MSVC-LINK-64: "link.exe" ^ :1:1: note: scanning from here clang version 3.8.0 (http://llvm.org/git/clang d7efa4b285d2464f1844b52b220381c64cd64bf6) (http://llvm.org/git/llvm bee32461e9d 466ed85439a026c62cb896b638653) ^ :6:73: note: possible intended match here "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\amd64\\link.exe" "-out:C:\\cygwin64\\home\\ismail\\src\\llvm \\dist\\tools\\clang\\test\\OpenMP\\Output\\linking.c.tmp.o" "-defaultlib:libcmt" "-libpath:C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\lib\\amd64" "-libpath:C:\\Program Files (x86)\\Windows Kits\\8.1\\Lib\\winv6.3\\um\\x64" "-nologo" "- nodefaultlib:vcomp.lib" "-nodefaultlib:vcompd.lib" "-defaultlib:libomp.lib" "C:\\cygwin64\\tmp\\linking-19e90e.o" ^ http://reviews.llvm.org/D11932 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D11932: [OPENMP] Link libomp.lib on Windows
ABataev created this revision. ABataev added reviewers: chandlerc, rsmith. ABataev added a subscriber: cfe-commits. Adds libomp.lib for -fopenmp=libomp and libiomp5md.lib for -fopenmp=libiomp5 on Windows http://reviews.llvm.org/D11932 Files: lib/Driver/Tools.cpp test/OpenMP/linking.c Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -8878,6 +8878,25 @@ Args.AddAllArgValues(CmdArgs, options::OPT__SLASH_link); + if (Args.hasFlag(options::OPT_fopenmp, options::OPT_fopenmp_EQ, + options::OPT_fno_openmp, false)) { +CmdArgs.push_back("-nodefaultlib:vcomp.lib"); +CmdArgs.push_back("-nodefaultlib:vcompd.lib"); +switch (getOpenMPRuntime(getToolChain(), Args)) { +case OMPRT_OMP: + CmdArgs.push_back("-defaultlib:libomp.lib"); + break; +case OMPRT_IOMP5: + CmdArgs.push_back("-defaultlib:libiomp5md.lib"); + break; +case OMPRT_GOMP: + break; +case OMPRT_Unknown: + // Already diagnosed. + break; +} + } + // Add filenames, libraries, and other linker inputs. for (const auto &Input : Inputs) { if (Input.isFilename()) { Index: test/OpenMP/linking.c === --- test/OpenMP/linking.c +++ test/OpenMP/linking.c @@ -69,3 +69,15 @@ // CHECK-LD-OVERRIDE-64: "-lgomp" "-lrt" "-lgcc" // CHECK-LD-OVERRIDE-64: "-lpthread" "-lc" // +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -fopenmp=libomp -target x86_64-msvc-win32 \ +// RUN: | FileCheck --check-prefix=CHECK-MSVC-LINK-64 %s +// CHECK-MSVC-LINK-64: "link.exe" +// CHECK-MSVC-LINK-64-SAME: "-nodefaultlib:vcomp.lib" "-nodefaultlib:vcompd.lib" "-defaultlib:libomp.lib" +// +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -fopenmp=libiomp5 -target x86_64-msvc-win32 \ +// RUN: | FileCheck --check-prefix=CHECK-MSVC-ILINK-64 %s +// CHECK-MSVC-ILINK-64: "link.exe" +// CHECK-MSVC-ILINK-64-SAME: "-nodefaultlib:vcomp.lib" "-nodefaultlib:vcompd.lib" "-defaultlib:libiomp5md.lib" +// Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -8878,6 +8878,25 @@ Args.AddAllArgValues(CmdArgs, options::OPT__SLASH_link); + if (Args.hasFlag(options::OPT_fopenmp, options::OPT_fopenmp_EQ, + options::OPT_fno_openmp, false)) { +CmdArgs.push_back("-nodefaultlib:vcomp.lib"); +CmdArgs.push_back("-nodefaultlib:vcompd.lib"); +switch (getOpenMPRuntime(getToolChain(), Args)) { +case OMPRT_OMP: + CmdArgs.push_back("-defaultlib:libomp.lib"); + break; +case OMPRT_IOMP5: + CmdArgs.push_back("-defaultlib:libiomp5md.lib"); + break; +case OMPRT_GOMP: + break; +case OMPRT_Unknown: + // Already diagnosed. + break; +} + } + // Add filenames, libraries, and other linker inputs. for (const auto &Input : Inputs) { if (Input.isFilename()) { Index: test/OpenMP/linking.c === --- test/OpenMP/linking.c +++ test/OpenMP/linking.c @@ -69,3 +69,15 @@ // CHECK-LD-OVERRIDE-64: "-lgomp" "-lrt" "-lgcc" // CHECK-LD-OVERRIDE-64: "-lpthread" "-lc" // +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -fopenmp=libomp -target x86_64-msvc-win32 \ +// RUN: | FileCheck --check-prefix=CHECK-MSVC-LINK-64 %s +// CHECK-MSVC-LINK-64: "link.exe" +// CHECK-MSVC-LINK-64-SAME: "-nodefaultlib:vcomp.lib" "-nodefaultlib:vcompd.lib" "-defaultlib:libomp.lib" +// +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -fopenmp=libiomp5 -target x86_64-msvc-win32 \ +// RUN: | FileCheck --check-prefix=CHECK-MSVC-ILINK-64 %s +// CHECK-MSVC-ILINK-64: "link.exe" +// CHECK-MSVC-ILINK-64-SAME: "-nodefaultlib:vcomp.lib" "-nodefaultlib:vcompd.lib" "-defaultlib:libiomp5md.lib" +// ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits