unitybuild_cxx_and_cuda.cmake 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. set(CMAKE_CUDA_ARCHITECTURES all-major)
  2. project(unitybuild_c_and_cxx CUDA CXX)
  3. set(srcs f.cu)
  4. foreach(s RANGE 1 8)
  5. set(src_cu "${CMAKE_CURRENT_BINARY_DIR}/s${s}.cu")
  6. file(WRITE "${src_cu}" "
  7. int f(int);\n
  8. int s${s}(void) { return f(${s}); }\n"
  9. )
  10. set(src_cxx "${CMAKE_CURRENT_BINARY_DIR}/s${s}.cxx")
  11. file(WRITE "${src_cxx}" "
  12. extern \"C\" { \n
  13. int f(int); \n
  14. }\n
  15. int s${s}(void) { return f(${s}); }\n"
  16. )
  17. list(APPEND srcs "${src_cu}")
  18. list(APPEND srcs "${src_cxx}")
  19. endforeach()
  20. add_library(tgt SHARED ${srcs})
  21. set_target_properties(tgt PROPERTIES UNITY_BUILD ON
  22. UNITY_BUILD_MODE GROUP
  23. #UNITY_BUILD_BATCH_SIZE will be ignored
  24. UNITY_BUILD_BATCH_SIZE 2)
  25. set_source_files_properties(s1.cu s2.cu s3.cu s4.cu
  26. s1.cxx s2.cxx s3.cxx s4.cxx
  27. PROPERTIES UNITY_GROUP "a"
  28. )
  29. set_source_files_properties(s5.cu s6.cu s7.cu s8.cu
  30. s5.cxx s6.cxx s7.cxx s8.cxx
  31. PROPERTIES UNITY_GROUP "b"
  32. )