diff options
-rw-r--r-- | lib/Driver/Tools.cpp | 11 | ||||
-rw-r--r-- | test/OpenMP/linking.c | 16 |
2 files changed, 26 insertions, 1 deletions
diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 30562f1ba3..199bb719de 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -5705,10 +5705,19 @@ void linuxtools::Link::ConstructJob(Compilation &C, const JobAction &JA, if (Args.hasArg(options::OPT_static)) CmdArgs.push_back("--start-group"); + bool OpenMP = Args.hasArg(options::OPT_fopenmp); + if (OpenMP) { + CmdArgs.push_back("-lgomp"); + + // FIXME: Exclude this for platforms whith libgomp that doesn't require + // librt. Most modern Linux platfroms require it, but some may not. + CmdArgs.push_back("-lrt"); + } + AddLibgcc(ToolChain.getTriple(), D, CmdArgs, Args); if (Args.hasArg(options::OPT_pthread) || - Args.hasArg(options::OPT_pthreads)) + Args.hasArg(options::OPT_pthreads) || OpenMP) CmdArgs.push_back("-lpthread"); CmdArgs.push_back("-lc"); diff --git a/test/OpenMP/linking.c b/test/OpenMP/linking.c new file mode 100644 index 0000000000..31fd57de92 --- /dev/null +++ b/test/OpenMP/linking.c @@ -0,0 +1,16 @@ +// Test the that the driver produces reasonable linker invocations with +// -fopenmp. +// +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -fopenmp -target i386-unknown-linux \ +// RUN: | FileCheck --check-prefix=CHECK-LD-32 %s +// CHECK-LD-32: "{{.*}}ld{{(.exe)?}}" +// CHECK-LD-32: "-lgomp" "-lrt" "-lgcc" +// CHECK-LD-32: "-lpthread" "-lc" +// +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -fopenmp -target x86_64-unknown-linux \ +// RUN: | FileCheck --check-prefix=CHECK-LD-64 %s +// CHECK-LD-64: "{{.*}}ld{{(.exe)?}}" +// CHECK-LD-64: "-lgomp" "-lrt" "-lgcc" +// CHECK-LD-64: "-lpthread" "-lc" |