set(CMAKE_CUDA_ARCHITECTURES all-major) project(unitybuild_c_and_cxx CUDA CXX) set(srcs f.cu) foreach(s RANGE 1 8) set(src_cu "${CMAKE_CURRENT_BINARY_DIR}/s${s}.cu") file(WRITE "${src_cu}" " int f(int);\n int s${s}(void) { return f(${s}); }\n" ) set(src_cxx "${CMAKE_CURRENT_BINARY_DIR}/s${s}.cxx") file(WRITE "${src_cxx}" " extern \"C\" { \n int f(int); \n }\n int s${s}(void) { return f(${s}); }\n" ) list(APPEND srcs "${src_cu}") list(APPEND srcs "${src_cxx}") endforeach() add_library(tgt SHARED ${srcs}) set_target_properties(tgt PROPERTIES UNITY_BUILD ON UNITY_BUILD_MODE GROUP #UNITY_BUILD_BATCH_SIZE will be ignored UNITY_BUILD_BATCH_SIZE 2) set_source_files_properties(s1.cu s2.cu s3.cu s4.cu s1.cxx s2.cxx s3.cxx s4.cxx PROPERTIES UNITY_GROUP "a" ) set_source_files_properties(s5.cu s6.cu s7.cu s8.cu s5.cxx s6.cxx s7.cxx s8.cxx PROPERTIES UNITY_GROUP "b" )