cmake_minimum_required(VERSION 3.20) include("${CMAKE_CURRENT_SOURCE_DIR}/../../../cmake/DetectCudaArch.cmake") if(SAMPLE_SKIP_BUILD) return() endif() project(simpleDrvRuntime LANGUAGES C CXX CUDA) include("${CMAKE_CURRENT_SOURCE_DIR}/../../../cmake/CudaSampleCommon.cmake") find_package(CUDAToolkit REQUIRED) include_directories(../../../Common) add_executable(simpleDrvRuntime simpleDrvRuntime.cpp) target_compile_options(simpleDrvRuntime PRIVATE $<$:--extended-lambda>) target_compile_features(simpleDrvRuntime PRIVATE cxx_std_17 cuda_std_17) target_include_directories(simpleDrvRuntime PRIVATE ${CUDAToolkit_INCLUDE_DIRS} ) target_link_libraries(simpleDrvRuntime PUBLIC CUDA::cudart CUDA::cuda_driver ) # Generate accompanying fatbin set(CUDA_FATBIN_FILE "${CMAKE_CURRENT_BINARY_DIR}/vectorAdd_kernel64.fatbin") set(CUDA_KERNEL_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/vectorAdd_kernel.cu") # Construct GENCODE_FLAGS explicitly from CUDA architectures set(GENCODE_FLAGS "") foreach(arch ${CMAKE_CUDA_ARCHITECTURES}) list(APPEND GENCODE_FLAGS "-gencode=arch=compute_${arch},code=sm_${arch}") endforeach() if(CMAKE_SYSTEM_NAME STREQUAL "QNX") set(INCLUDES_LIST) foreach(dir ${CUDAToolkit_INCLUDE_DIRS}) list(APPEND INCLUDES_LIST "-I${dir}") endforeach() string(JOIN " " INCLUDES "${INCLUDES_LIST}") endif() add_custom_command( OUTPUT ${CUDA_FATBIN_FILE} COMMAND ${CMAKE_CUDA_COMPILER} ${INCLUDES} -Wno-deprecated-gpu-targets ${GENCODE_FLAGS} -o ${CUDA_FATBIN_FILE} -fatbin ${CUDA_KERNEL_SOURCE} DEPENDS ${CUDA_KERNEL_SOURCE} COMMENT "Building CUDA fatbin: ${CUDA_FATBIN_FILE}" ) # Create a dummy target for fatbin generation add_custom_target(generate_fatbin_simpleDrv ALL DEPENDS ${CUDA_FATBIN_FILE}) # Ensure simpleDrvRuntime depends on the fatbin add_dependencies(simpleDrvRuntime generate_fatbin_simpleDrv) include(InstallSamples) setup_samples_install()