CMakeLists.txt 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. cmake_minimum_required(VERSION 3.7)
  2. project (ResolveDeviceSymbols 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. #Goal for this example:
  17. # 1. Build two static libraries that defines multiple methods and kernels
  18. # 2. Resolve the device symbols into the second static library, therefore
  19. # confirming that the first static library is on the device link line
  20. # 3. Verify that we can't use those device symbols from anything that links
  21. # to the static library
  22. set(CMAKE_CUDA_ARCHITECTURES 30 50)
  23. add_library(CUDAResolveDeviceDepsA STATIC file1.cu)
  24. add_library(CUDAResolveDeviceDepsB STATIC file2.cu)
  25. target_compile_features(CUDAResolveDeviceDepsA PUBLIC cuda_std_11)
  26. target_compile_features(CUDAResolveDeviceDepsB PUBLIC cuda_std_11)
  27. set_target_properties(CUDAResolveDeviceDepsA CUDAResolveDeviceDepsB
  28. PROPERTIES
  29. CUDA_SEPARABLE_COMPILATION ON
  30. POSITION_INDEPENDENT_CODE ON)
  31. add_library(CUDAResolveDeviceLib STATIC file2_launch.cu)
  32. set_target_properties(CUDAResolveDeviceLib
  33. PROPERTIES
  34. CUDA_SEPARABLE_COMPILATION ON
  35. CUDA_RESOLVE_DEVICE_SYMBOLS ON
  36. POSITION_INDEPENDENT_CODE ON)
  37. target_link_libraries(CUDAResolveDeviceLib PRIVATE CUDAResolveDeviceDepsA CUDAResolveDeviceDepsB)
  38. if(dump_command)
  39. add_custom_command(TARGET CUDAResolveDeviceLib POST_BUILD
  40. COMMAND ${CMAKE_COMMAND}
  41. -DDUMP_COMMAND=${dump_command}
  42. -DDUMP_ARGS=${dump_args}
  43. -DTEST_LIBRARY_PATH=$<TARGET_FILE:CUDAResolveDeviceLib>
  44. -P ${CMAKE_CURRENT_SOURCE_DIR}/verify.cmake
  45. )
  46. endif()
  47. add_executable(CudaOnlyResolveDeviceSymbols main.cu)
  48. set_target_properties(CudaOnlyResolveDeviceSymbols
  49. PROPERTIES
  50. CUDA_SEPARABLE_COMPILATION OFF
  51. CUDA_RESOLVE_DEVICE_SYMBOLS OFF)
  52. target_link_libraries(CudaOnlyResolveDeviceSymbols PRIVATE CUDAResolveDeviceLib)
  53. if(APPLE)
  54. # Help the static cuda runtime find the driver (libcuda.dyllib) at runtime.
  55. set_property(TARGET CudaOnlyResolveDeviceSymbols PROPERTY BUILD_RPATH ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES})
  56. endif()