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 $<TARGET_NAME_IF_EXISTS:UsesNoCudaRT> 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=$<TARGET_FILE:UsesNoCudaRT>
    -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=$<TARGET_FILE:UsesStaticCudaRT>
    -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=$<TARGET_FILE:CudaOnlyRuntimeControls>
    -DEXTRA_LIB_DIRS="${dirs}"
    -P ${CMAKE_CURRENT_SOURCE_DIR}/verify_runtime.cmake
  )
endif()
