diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt --- a/llvm/CMakeLists.txt +++ b/llvm/CMakeLists.txt @@ -964,12 +964,12 @@ endif() endforeach() -add_subdirectory(projects) - if( LLVM_INCLUDE_TOOLS ) add_subdirectory(tools) endif() +add_subdirectory(projects) + if( LLVM_INCLUDE_RUNTIMES ) add_subdirectory(runtimes) endif() diff --git a/openmp/libomptarget/deviceRTLs/nvptx/CMakeLists.txt b/openmp/libomptarget/deviceRTLs/nvptx/CMakeLists.txt --- a/openmp/libomptarget/deviceRTLs/nvptx/CMakeLists.txt +++ b/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 (TARGET clang) # Or query LLVM_TOOL_CLANG_BUILD + # 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 espicially high on sustems 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()