[flang] Link to libatomic with openmp and rtlib=libgcc (#112202)
Currently when using OpenMP atomics we depend on some symbols from libatomic. These symbols are provided in a separate library for the libgcc runtime, so we should link to that when rtlib=libgcc. For the compiler-rt case, the presence and location of the symbols is dependent on how compiler-rt itself was built so we cannot make that decision for the user. As such no extra flags are added in that case.
This commit is contained in:
@@ -1294,6 +1294,16 @@ void tools::addFortranRuntimeLibs(const ToolChain &TC, const ArgList &Args,
|
||||
CmdArgs.push_back("-lFortranRuntime");
|
||||
CmdArgs.push_back("-lFortranDecimal");
|
||||
}
|
||||
|
||||
// libomp needs libatomic for atomic operations if using libgcc
|
||||
if (Args.hasFlag(options::OPT_fopenmp, options::OPT_fopenmp_EQ,
|
||||
options::OPT_fno_openmp, false)) {
|
||||
Driver::OpenMPRuntimeKind OMPRuntime =
|
||||
TC.getDriver().getOpenMPRuntime(Args);
|
||||
ToolChain::RuntimeLibType RuntimeLib = TC.GetRuntimeLibType(Args);
|
||||
if (OMPRuntime == Driver::OMPRT_OMP && RuntimeLib == ToolChain::RLT_Libgcc)
|
||||
CmdArgs.push_back("-latomic");
|
||||
}
|
||||
}
|
||||
|
||||
void tools::addFortranRuntimeLibraryPath(const ToolChain &TC,
|
||||
|
||||
5
flang/test/Driver/atomic.f90
Normal file
5
flang/test/Driver/atomic.f90
Normal file
@@ -0,0 +1,5 @@
|
||||
!RUN: %flang --target=aarch64-unknown-linux-gnu -fuse-ld=ld -fopenmp -rtlib=libgcc -### %s 2>&1 | FileCheck --check-prefixes=GCC %s
|
||||
!RUN: %flang --target=aarch64-unknown-linux-gnu -fuse-ld=ld -fopenmp -rtlib=compiler-rt -### %s 2>&1 | FileCheck --check-prefixes=CRT %s
|
||||
|
||||
!GCC: -latomic
|
||||
!CRT-NOT: -latomic
|
||||
Reference in New Issue
Block a user