cmake_minimum_required(VERSION 3.7) project (RuntimeControls CUDA) # Find nm and dumpbin if(CMAKE_NM) set(dump_command ${CMAKE_NM}) set(dump_args -g) else() include(GetPrerequisites) message(STATUS "calling list_prerequisites to find dumpbin") list_prerequisites("${CMAKE_COMMAND}" 0 0 0) if(gp_dumpbin) set(dump_command ${gp_dumpbin}) set(dump_args /ARCHIVEMEMBERS) endif() endif() set(CMAKE_CUDA_STANDARD 11) set(CMAKE_CUDA_ARCHITECTURES 30) set(CMAKE_CUDA_RUNTIME_LIBRARY static) if(NOT "x${CMAKE_CUDA_SIMULATE_ID}" STREQUAL "xMSVC") add_library(UsesNoCudaRT SHARED file1.cu) set_target_properties(UsesNoCudaRT PROPERTIES CUDA_RUNTIME_LIBRARY none) endif() add_library(UsesStaticCudaRT SHARED file2.cu) add_executable(CudaOnlyRuntimeControls main.cu) set_target_properties(CudaOnlyRuntimeControls PROPERTIES CUDA_RUNTIME_LIBRARY shared) target_link_libraries(CudaOnlyRuntimeControls PRIVATE $ UsesStaticCudaRT) if(dump_command) if(TARGET UsesNoCudaRT) add_custom_command(TARGET UsesNoCudaRT POST_BUILD COMMAND ${CMAKE_COMMAND} -DDUMP_COMMAND=${dump_command} -DDUMP_ARGS=${dump_args} -DTEST_LIBRARY_PATH=$ -P ${CMAKE_CURRENT_SOURCE_DIR}/no_runtime.cmake ) endif() add_custom_command(TARGET UsesStaticCudaRT POST_BUILD COMMAND ${CMAKE_COMMAND} -DDUMP_COMMAND=${dump_command} -DDUMP_ARGS=${dump_args} -DTEST_LIBRARY_PATH=$ -P ${CMAKE_CURRENT_SOURCE_DIR}/uses_static_runtime.cmake ) string(REPLACE ";" "|" dirs "${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES}") add_custom_command(TARGET CudaOnlyRuntimeControls POST_BUILD COMMAND ${CMAKE_COMMAND} -DEXEC_PATH=$ -DEXTRA_LIB_DIRS="${dirs}" -P ${CMAKE_CURRENT_SOURCE_DIR}/verify_runtime.cmake ) endif()