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