xref: /llvm-project/libc/utils/gpu/loader/CMakeLists.txt (revision 5e326983b620507940816f4c30ab4d80fa6250ad)
1add_library(gpu_loader OBJECT Main.cpp)
2
3target_include_directories(gpu_loader PUBLIC
4  ${CMAKE_CURRENT_SOURCE_DIR}
5  ${LIBC_SOURCE_DIR}/include
6  ${LIBC_SOURCE_DIR}
7  ${LLVM_MAIN_INCLUDE_DIR}
8  ${LLVM_BINARY_DIR}/include
9)
10if(NOT LLVM_ENABLE_RTTI)
11  target_compile_options(gpu_loader PUBLIC -fno-rtti)
12endif()
13
14find_package(hsa-runtime64 QUIET 1.2.0 HINTS ${CMAKE_INSTALL_PREFIX} PATHS /opt/rocm)
15if(hsa-runtime64_FOUND)
16  add_subdirectory(amdgpu)
17endif()
18
19# The CUDA loader requires LLVM to traverse the ELF image for symbols.
20find_package(CUDAToolkit 11.2 QUIET)
21if(CUDAToolkit_FOUND)
22  add_subdirectory(nvptx)
23endif()
24
25if(TARGET amdhsa-loader AND LIBC_TARGET_ARCHITECTURE_IS_AMDGPU)
26  add_custom_target(libc.utils.gpu.loader)
27  add_dependencies(libc.utils.gpu.loader amdhsa-loader)
28  set_target_properties(
29    libc.utils.gpu.loader
30    PROPERTIES
31      TARGET amdhsa-loader
32      EXECUTABLE "$<TARGET_FILE:amdhsa-loader>"
33  )
34elseif(TARGET nvptx-loader AND LIBC_TARGET_ARCHITECTURE_IS_NVPTX)
35  add_custom_target(libc.utils.gpu.loader)
36  add_dependencies(libc.utils.gpu.loader nvptx-loader)
37  set_target_properties(
38    libc.utils.gpu.loader
39    PROPERTIES
40      TARGET nvptx-loader
41      EXECUTABLE "$<TARGET_FILE:nvptx-loader>"
42  )
43endif()
44
45foreach(gpu_loader_tgt amdhsa-loader nvptx-loader)
46  if(TARGET ${gpu_loader_tgt})
47    install(TARGETS ${gpu_loader_tgt}
48            DESTINATION ${CMAKE_INSTALL_BINDIR}
49            COMPONENT libc)
50  endif()
51endforeach()
52