CMakeLists.txt 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. cmake_minimum_required(VERSION 3.7)
  2. project (RuntimeControls CUDA)
  3. # Find nm and dumpbin
  4. if(CMAKE_NM)
  5. set(dump_command ${CMAKE_NM})
  6. set(dump_args -g)
  7. else()
  8. include(GetPrerequisites)
  9. message(STATUS "calling list_prerequisites to find dumpbin")
  10. list_prerequisites("${CMAKE_COMMAND}" 0 0 0)
  11. if(gp_dumpbin)
  12. set(dump_command ${gp_dumpbin})
  13. set(dump_args /ARCHIVEMEMBERS)
  14. endif()
  15. endif()
  16. set(CMAKE_CUDA_STANDARD 11)
  17. set(CMAKE_CUDA_ARCHITECTURES 30)
  18. set(CMAKE_CUDA_RUNTIME_LIBRARY static)
  19. if(NOT "x${CMAKE_CUDA_SIMULATE_ID}" STREQUAL "xMSVC")
  20. add_library(UsesNoCudaRT SHARED file1.cu)
  21. set_target_properties(UsesNoCudaRT PROPERTIES CUDA_RUNTIME_LIBRARY none)
  22. endif()
  23. add_library(UsesStaticCudaRT SHARED file2.cu)
  24. add_executable(CudaOnlyRuntimeControls main.cu)
  25. set_target_properties(CudaOnlyRuntimeControls PROPERTIES CUDA_RUNTIME_LIBRARY shared)
  26. target_link_libraries(CudaOnlyRuntimeControls PRIVATE $<TARGET_NAME_IF_EXISTS:UsesNoCudaRT> UsesStaticCudaRT)
  27. if(dump_command)
  28. if(TARGET UsesNoCudaRT)
  29. add_custom_command(TARGET UsesNoCudaRT POST_BUILD
  30. COMMAND ${CMAKE_COMMAND}
  31. -DDUMP_COMMAND=${dump_command}
  32. -DDUMP_ARGS=${dump_args}
  33. -DTEST_LIBRARY_PATH=$<TARGET_FILE:UsesNoCudaRT>
  34. -P ${CMAKE_CURRENT_SOURCE_DIR}/no_runtime.cmake
  35. )
  36. endif()
  37. add_custom_command(TARGET UsesStaticCudaRT POST_BUILD
  38. COMMAND ${CMAKE_COMMAND}
  39. -DDUMP_COMMAND=${dump_command}
  40. -DDUMP_ARGS=${dump_args}
  41. -DTEST_LIBRARY_PATH=$<TARGET_FILE:UsesStaticCudaRT>
  42. -P ${CMAKE_CURRENT_SOURCE_DIR}/uses_static_runtime.cmake
  43. )
  44. string(REPLACE ";" "|" dirs "${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES}")
  45. add_custom_command(TARGET CudaOnlyRuntimeControls POST_BUILD
  46. COMMAND ${CMAKE_COMMAND}
  47. -DEXEC_PATH=$<TARGET_FILE:CudaOnlyRuntimeControls>
  48. -DEXTRA_LIB_DIRS="${dirs}"
  49. -P ${CMAKE_CURRENT_SOURCE_DIR}/verify_runtime.cmake
  50. )
  51. endif()