================
@@ -519,6 +520,31 @@ void Flang::AddAMDGPUTargetArgs(const ArgList &Args,
   TC.addClangTargetOptions(Args, CmdArgs, Action::OffloadKind::OFK_OpenMP);
 }
 
+void Flang::AddNVPTXTargetArgs(const ArgList &Args,
+                               ArgStringList &CmdArgs) const {
+
+  // we cannot use addClangTargetOptions, as it appends unsupported args for
+  // flang: -fcuda-is-device, -fno-threadsafe-statics,
+  // -fcuda-allow-variadic-functions and -target-sdk-version Instead we 
manually
+  // detect the CUDA installation and link libdevice
+  const ToolChain &TC = getToolChain();
+  const Driver &D = TC.getDriver();
+  const llvm::Triple &Triple = TC.getEffectiveTriple();
+
+  // Detect CUDA installation and link libdevice
+  CudaInstallationDetector CudaInstallation(D, Triple, Args);
+  if (CudaInstallation.isValid()) {
+    StringRef GpuArch = Args.getLastArgValue(options::OPT_march_EQ);
+    if (!GpuArch.empty()) {
+      std::string LibDeviceFile = CudaInstallation.getLibDeviceFile(GpuArch);
+      if (!LibDeviceFile.empty()) {
----------------
Jason-Van-Beusekom wrote:

It would result in a linker error:

```c++
flang -fopenmp --offload-arch=sm_80 test.f90
nvlink error   : Undefined reference to '__nv_fabs' in 
'/tmp/test-953628-nvptx64-nvidia-cuda-sm_80-c1abbf-179701.cubin'
/clang_install/bin/clang-nvlink-wrapper: error: 'nvlink' failed
clang: error: nvlink command failed with exit code 1 (use -v to see invocation)
```

https://github.com/llvm/llvm-project/pull/180060
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to