# HG changeset patch # User SokoL_SD # Date 1246631158 0 # Node ID b426da0c97202b44e1ba7e03aa1dc949fa679d4e # Parent 39921f499a2291100dc7640e2104ea2625c62b6e CMake: New option D_MODULES_PER_OBJECT. Max number of modules per object file. diff -r 39921f499a22 -r b426da0c9720 cmake/FindD.cmake --- a/cmake/FindD.cmake Thu Jul 02 12:04:40 2009 +0000 +++ b/cmake/FindD.cmake Fri Jul 03 14:25:58 2009 +0000 @@ -64,9 +64,10 @@ set(opt_tmp "OFF") endif(D_IS_MARS) option(SINGLE_D_OBJECT "Build all d sources to one object file" ${opt_tmp}) - if(SINGLE_D_OBJECT AND D_IS_LLVM) + if(D_IS_LLVM) set(D_FLAGS ${D_FLAGS} -singleobj) - endif(SINGLE_D_OBJECT AND D_IS_LLVM) + endif(D_IS_LLVM) + set(D_MODULES_PER_OBJECT 10000 CACHE STRING "Max number of modules per object file") endif(NOT ONE_BUILD_COMMAND) ## Specifics flags for build configurations. @@ -209,29 +210,54 @@ ) endforeach (d_source_p_tmp ${SOURCES_tmp}) else(NOT SINGLE_D_OBJECT) - set(object_tmp ${tmp_dir_tmp}/${target}${D_OBJECT_SUFFIX}) - set(d_obj_out_tmp ${${objects_list}}) - obj_path(d_obj_out_tmp) - set(parameters_tmp ${FLAGS_tmp} -c ${SOURCES_tmp} -of${object_tmp}) - set(parameters_list_file_tmp ${tmp_dir_tmp}/parameters_obj) - if(CMAKE_HOST_WIN32) - file(REMOVE ${parameters_list_file_tmp}) - foreach(arg_tmp ${parameters_tmp}) - file(APPEND ${parameters_list_file_tmp} "${arg_tmp}\n") - endforeach(arg_tmp) - set(param_tmp @${parameters_list_file_tmp}) - elseif(CMAKE_HOST_UNIX) - set(param_tmp ${parameters_tmp}) - endif(CMAKE_HOST_WIN32) - #get_imported_files(depends_tmp ${ARGN}) - add_custom_command(OUTPUT "${object_tmp}" - COMMAND "${DC}" - ARGS ${param_tmp} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS ${SOURCES_tmp} ${depends_tmp} - COMMENT "" - ) - set(${objects_list} ${object_tmp}) + set(count_objects_tmp 0) + set(files${count_objects_tmp}_tmp ) + set(counter_tmp 0) + set(files_tmp ) + set(objects_tmp ) + foreach (d_source_p_tmp ${SOURCES_tmp}) + math(EXPR counter_tmp "${counter_tmp} + 1") + set(files${count_objects_tmp}_tmp ${files${count_objects_tmp}_tmp} ${d_source_p_tmp}) + if(counter_tmp GREATER D_MODULES_PER_OBJECT) + math(EXPR count_objects_tmp "${count_objects_tmp} + 1") + set(files${count_objects_tmp}_tmp ) + set(counter_tmp 0) + endif(counter_tmp GREATER D_MODULES_PER_OBJECT) + endforeach (d_source_p_tmp ${SOURCES_tmp}) + + if(files${count_objects_tmp}_tmp) + math(EXPR count_objects_tmp "${count_objects_tmp} + 1") + endif(files${count_objects_tmp}_tmp) + + set(id_tmp 0) + while(id_tmp LESS ${count_objects_tmp}) + set(object_tmp ${tmp_dir_tmp}/${target}${id_tmp}${D_OBJECT_SUFFIX}) + set(d_obj_out_tmp ${${object_tmp}}) + obj_path(d_obj_out_tmp) + set(parameters_tmp ${FLAGS_tmp} -c ${files${id_tmp}_tmp} -of${object_tmp}) + set(parameters_list_file_tmp ${tmp_dir_tmp}/parameters${id_tmp}_obj) + if(CMAKE_HOST_WIN32) + file(REMOVE ${parameters_list_file_tmp}) + foreach(arg_tmp ${parameters_tmp}) + file(APPEND ${parameters_list_file_tmp} "${arg_tmp}\n") + endforeach(arg_tmp) + set(param_tmp @${parameters_list_file_tmp}) + elseif(CMAKE_HOST_UNIX) + set(param_tmp ${parameters_tmp}) + endif(CMAKE_HOST_WIN32) + #get_imported_files(depends_tmp ${ARGN}) + add_custom_command(OUTPUT "${object_tmp}" + COMMAND "${DC}" + ARGS ${param_tmp} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${files${id_tmp}_tmp} ${depends_tmp} + COMMENT "" + ) + set(objects_tmp ${objects_tmp} ${object_tmp}) + math(EXPR id_tmp "${id_tmp} + 1") + endwhile(id_tmp LESS ${count_objects_tmp}) + + set(${objects_list} ${objects_tmp}) endif(NOT SINGLE_D_OBJECT) #add_custom_target(${target} DEPENDS "${${objects_list}}") endmacro(compile_d_files objects_list)