@@ -600,11 +600,6 @@ void NVPTX::OpenMPLinker::ConstructJob(Compilation &C, const JobAction &JA,
600600 CmdArgs.push_back (" -arch" );
601601 CmdArgs.push_back (Args.MakeArgString (GPUArch));
602602
603- // Assume that the directory specified with --libomptarget_nvptx_path
604- // contains the static library libomptarget-nvptx.a.
605- if (const Arg *A = Args.getLastArg (options::OPT_libomptarget_nvptx_path_EQ))
606- CmdArgs.push_back (Args.MakeArgString (Twine (" -L" ) + A->getValue ()));
607-
608603 // Add paths specified in LIBRARY_PATH environment variable as -L options.
609604 addDirectoryList (Args, CmdArgs, " -L" , " LIBRARY_PATH" );
610605
@@ -614,9 +609,6 @@ void NVPTX::OpenMPLinker::ConstructJob(Compilation &C, const JobAction &JA,
614609 llvm::sys::path::append (DefaultLibPath, " lib" CLANG_LIBDIR_SUFFIX);
615610 CmdArgs.push_back (Args.MakeArgString (Twine (" -L" ) + DefaultLibPath));
616611
617- // Add linking against library implementing OpenMP calls on NVPTX target.
618- CmdArgs.push_back (" -lomptarget-nvptx" );
619-
620612 for (const auto &II : Inputs) {
621613 if (II.getType () == types::TY_LLVM_IR ||
622614 II.getType () == types::TY_LTO_IR ||
@@ -810,9 +802,6 @@ void CudaToolChain::addClangTargetOptions(
810802
811803 if (DeviceOffloadingKind == Action::OFK_OpenMP) {
812804 SmallVector<StringRef, 8 > LibraryPaths;
813- if (const Arg *A = DriverArgs.getLastArg (options::OPT_libomptarget_nvptx_path_EQ))
814- LibraryPaths.push_back (A->getValue ());
815-
816805 // Add user defined library paths from LIBRARY_PATH.
817806 llvm::Optional<std::string> LibPath =
818807 llvm::sys::Process::GetEnv (" LIBRARY_PATH" );
@@ -830,22 +819,37 @@ void CudaToolChain::addClangTargetOptions(
830819 llvm::sys::path::append (DefaultLibPath, Twine (" lib" ) + CLANG_LIBDIR_SUFFIX);
831820 LibraryPaths.emplace_back (DefaultLibPath.c_str ());
832821
833- std::string LibOmpTargetName =
834- " libomptarget-nvptx-" + GpuArch.str () + " .bc" ;
835- bool FoundBCLibrary = false ;
836- for (StringRef LibraryPath : LibraryPaths) {
837- SmallString<128 > LibOmpTargetFile (LibraryPath);
838- llvm::sys::path::append (LibOmpTargetFile, LibOmpTargetName);
839- if (llvm::sys::fs::exists (LibOmpTargetFile)) {
822+ // First check whether user specifies bc library
823+ if (const Arg *A =
824+ DriverArgs.getLastArg (options::OPT_libomptarget_nvptx_bc_path_EQ)) {
825+ std::string LibOmpTargetName (A->getValue ());
826+ if (llvm::sys::fs::exists (LibOmpTargetName)) {
840827 CC1Args.push_back (" -mlink-builtin-bitcode" );
841- CC1Args.push_back (DriverArgs.MakeArgString (LibOmpTargetFile));
842- FoundBCLibrary = true ;
843- break ;
828+ CC1Args.push_back (DriverArgs.MakeArgString (LibOmpTargetName));
829+ } else {
830+ getDriver ().Diag (diag::err_drv_omp_offload_target_bcruntime_not_found)
831+ << LibOmpTargetName;
832+ }
833+ } else {
834+ bool FoundBCLibrary = false ;
835+
836+ std::string LibOmpTargetName =
837+ " libomptarget-nvptx-" + GpuArch.str () + " .bc" ;
838+
839+ for (StringRef LibraryPath : LibraryPaths) {
840+ SmallString<128 > LibOmpTargetFile (LibraryPath);
841+ llvm::sys::path::append (LibOmpTargetFile, LibOmpTargetName);
842+ if (llvm::sys::fs::exists (LibOmpTargetFile)) {
843+ CC1Args.push_back (" -mlink-builtin-bitcode" );
844+ CC1Args.push_back (DriverArgs.MakeArgString (LibOmpTargetFile));
845+ FoundBCLibrary = true ;
846+ break ;
847+ }
844848 }
849+ if (!FoundBCLibrary)
850+ getDriver ().Diag (diag::err_drv_omp_offload_target_missingbcruntime)
851+ << LibOmpTargetName;
845852 }
846- if (!FoundBCLibrary)
847- getDriver ().Diag (diag::warn_drv_omp_offload_target_missingbcruntime)
848- << LibOmpTargetName;
849853 }
850854}
851855
0 commit comments