[Openmp-commits] [PATCH] D101265: [OpenMP][CMake] Use in-project clang as CUDA->IR compiler.
Michael Kruse via Phabricator via Openmp-commits
openmp-commits at lists.llvm.org
Thu Apr 29 23:35:43 PDT 2021
Meinersbur updated this revision to Diff 341778.
Meinersbur added a comment.
- Rebase
- Fix typos, remove risky change, fix cross-compiling
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D101265/new/
https://reviews.llvm.org/D101265
Files:
openmp/README.rst
openmp/libomptarget/deviceRTLs/nvptx/CMakeLists.txt
Index: openmp/libomptarget/deviceRTLs/nvptx/CMakeLists.txt
===================================================================
--- openmp/libomptarget/deviceRTLs/nvptx/CMakeLists.txt
+++ openmp/libomptarget/deviceRTLs/nvptx/CMakeLists.txt
@@ -30,7 +30,17 @@
if (NOT LIBOMPTARGET_NVPTX_CUDA_COMPILER STREQUAL "")
set(cuda_compiler ${LIBOMPTARGET_NVPTX_CUDA_COMPILER})
+elseif (LLVM_TOOL_CLANG_BUILD AND NOT CMAKE_CROSSCOMPILING)
+ # Compile the deviceRTL with the clang that is built in the project.
+ set(cuda_compiler clang)
elseif(${CMAKE_C_COMPILER_ID} STREQUAL "Clang")
+ # Compile the device runtime with the compiler that OpenMP is built with.
+ # This is the case with LLVM_ENABLE_RUNTIMES=openmp.
+ # FIXME: This is unreliable; the compiler can be on older version of clang
+ # that does not support compiling CUDA, or only an older version of it. The
+ # risk is especially high on sytems where clang is the default compiler
+ # (MacOS, BSDs). LLVM_ENABLE_RUNTIMES=openmp should itself set
+ # LIBOMPTARGET_NVPTX_CUDA_COMPILER instead.
set(cuda_compiler ${CMAKE_C_COMPILER})
else()
libomptarget_say("Not building NVPTX deviceRTL: clang not found")
@@ -44,7 +54,12 @@
if (NOT LIBOMPTARGET_NVPTX_BC_LINKER STREQUAL "")
set(bc_linker ${LIBOMPTARGET_NVPTX_BC_LINKER})
elseif (EXISTS ${llvm_link})
+ # Try to use the linker consistent with the CUDA compiler unless explicitly
+ # set to a different linker.
set(bc_linker ${llvm_link})
+elseif (TARGET llvm-link)
+ # Use the linker also built in the same project.
+ set(bc_linker llvm-link)
else()
libomptarget_say("Not building NVPTX deviceRTL: llvm-link not found")
return()
Index: openmp/README.rst
===================================================================
--- openmp/README.rst
+++ openmp/README.rst
@@ -263,14 +263,18 @@
**LIBOMPTARGET_NVPTX_CUDA_COMPILER** = ``""``
Location of a CUDA compiler capable of emitting LLVM bitcode. Currently only
the Clang compiler is supported. This is only used when building the CUDA LLVM
- bitcode offloading device RTL. If unspecified and the CMake C compiler is
- Clang, then Clang is used.
+ bitcode offloading device RTL. If unspecified, either the Clang from the build
+ itself is used (i.e. an in-tree build with LLVM_ENABLE_PROJECTS including
+ clang), or the Clang compiler that the build uses as C compiler
+ (CMAKE_C_COMPILER; only if it is Clang). The latter is common for a
+ stage2-build or when using -DLLVM_ENABLE_RUNTIMES=openmp.
**LIBOMPTARGET_NVPTX_BC_LINKER** = ``""``
Location of a linker capable of linking LLVM bitcode objects. This is only
- used when building the CUDA LLVM bitcode offloading device RTL. If unspecified
- and the CMake C compiler is Clang and there exists a llvm-link binary in the
- directory containing Clang, then this llvm-link binary is used.
+ used when building the CUDA LLVM bitcode offloading device RTL. If
+ unspecified, either the llvm-link in that same directory as
+ LIBOMPTARGET_NVPTX_CUDA_COMPILER is used, or the llvm-link from the
+ same build (available in an in-tree build).
**LIBOMPTARGET_NVPTX_ALTERNATE_HOST_COMPILER** = ``""``
Host compiler to use with NVCC. This compiler is not going to be used to
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D101265.341778.patch
Type: text/x-patch
Size: 3243 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20210430/6bd6af56/attachment.bin>
More information about the Openmp-commits
mailing list