aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Driver/Tools.cpp
diff options
context:
space:
mode:
authorAlexey Bataev <a.bataev@hotmail.com>2015-05-20 04:24:19 +0000
committerAlexey Bataev <a.bataev@hotmail.com>2015-05-20 04:24:19 +0000
commitdb39021ceebbd311125785d407402b74ec668528 (patch)
tree6a1a9692eb1269740cf03e7ebf02f9d5626dd4cb /clang/lib/Driver/Tools.cpp
parent16dc7b68c4d90cd3abac7015c27030f3d6c710f9 (diff)
downloadllvm-db39021ceebbd311125785d407402b74ec668528.zip
llvm-db39021ceebbd311125785d407402b74ec668528.tar.gz
llvm-db39021ceebbd311125785d407402b74ec668528.tar.bz2
[OPENMP] -fopenmp enables OpenMP support (fix for http://llvm.org/PR23492)
-fopenmp turns on OpenMP support and links libiomp5 as OpenMP library. Also there is -fopenmp={libiomp5|libgomp} option that allows to override effect of -fopenmp and link libgomp library (if -fopenmp=libgomp is specified). Differential Revision: http://reviews.llvm.org/D9736 llvm-svn: 237769
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
-rw-r--r--clang/lib/Driver/Tools.cpp26
1 files changed, 16 insertions, 10 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index 0f191f34..138a31b 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/lib/Driver/Tools.cpp
@@ -3793,6 +3793,12 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
Args.AddLastArg(CmdArgs, options::OPT_fdiagnostics_show_template_tree);
Args.AddLastArg(CmdArgs, options::OPT_fno_elide_type);
+ // Forward flags for OpenMP
+ if (Args.hasArg(options::OPT_fopenmp_EQ) ||
+ Args.hasArg(options::OPT_fopenmp)) {
+ CmdArgs.push_back("-fopenmp");
+ }
+
const SanitizerArgs &Sanitize = getToolChain().getSanitizerArgs();
Sanitize.addArgs(Args, CmdArgs);
@@ -6273,9 +6279,7 @@ void darwin::Link::ConstructJob(Compilation &C, const JobAction &JA,
Args.AddAllArgs(CmdArgs, options::OPT_L);
LibOpenMP UsedOpenMPLib = LibUnknown;
- if (Args.hasArg(options::OPT_fopenmp)) {
- UsedOpenMPLib = LibGOMP;
- } else if (const Arg *A = Args.getLastArg(options::OPT_fopenmp_EQ)) {
+ if (const Arg *A = Args.getLastArg(options::OPT_fopenmp_EQ)) {
UsedOpenMPLib = llvm::StringSwitch<LibOpenMP>(A->getValue())
.Case("libgomp", LibGOMP)
.Case("libiomp5", LibIOMP5)
@@ -6283,6 +6287,8 @@ void darwin::Link::ConstructJob(Compilation &C, const JobAction &JA,
if (UsedOpenMPLib == LibUnknown)
getToolChain().getDriver().Diag(diag::err_drv_unsupported_option_argument)
<< A->getOption().getName() << A->getValue();
+ } else if (Args.hasArg(options::OPT_fopenmp)) {
+ UsedOpenMPLib = LibIOMP5;
}
switch (UsedOpenMPLib) {
case LibGOMP:
@@ -7998,16 +8004,16 @@ void gnutools::Link::ConstructJob(Compilation &C, const JobAction &JA,
linkSanitizerRuntimeDeps(ToolChain, CmdArgs);
LibOpenMP UsedOpenMPLib = LibUnknown;
- if (Args.hasArg(options::OPT_fopenmp)) {
- UsedOpenMPLib = LibGOMP;
- } else if (const Arg *A = Args.getLastArg(options::OPT_fopenmp_EQ)) {
+ if (const Arg *A = Args.getLastArg(options::OPT_fopenmp_EQ)) {
UsedOpenMPLib = llvm::StringSwitch<LibOpenMP>(A->getValue())
- .Case("libgomp", LibGOMP)
- .Case("libiomp5", LibIOMP5)
- .Default(LibUnknown);
+ .Case("libgomp", LibGOMP)
+ .Case("libiomp5", LibIOMP5)
+ .Default(LibUnknown);
if (UsedOpenMPLib == LibUnknown)
D.Diag(diag::err_drv_unsupported_option_argument)
- << A->getOption().getName() << A->getValue();
+ << A->getOption().getName() << A->getValue();
+ } else if (Args.hasArg(options::OPT_fopenmp)) {
+ UsedOpenMPLib = LibIOMP5;
}
switch (UsedOpenMPLib) {
case LibGOMP: