comparison cmake/FindD.cmake @ 181:b426da0c9720

CMake: New option D_MODULES_PER_OBJECT. Max number of modules per object file.
author SokoL_SD
date Fri, 03 Jul 2009 14:25:58 +0000
parents 52da31f967f0
children d3383b16f1d7
comparison
equal deleted inserted replaced
180:39921f499a22 181:b426da0c9720
62 set(opt_tmp "ON") 62 set(opt_tmp "ON")
63 else(D_IS_MARS) 63 else(D_IS_MARS)
64 set(opt_tmp "OFF") 64 set(opt_tmp "OFF")
65 endif(D_IS_MARS) 65 endif(D_IS_MARS)
66 option(SINGLE_D_OBJECT "Build all d sources to one object file" ${opt_tmp}) 66 option(SINGLE_D_OBJECT "Build all d sources to one object file" ${opt_tmp})
67 if(SINGLE_D_OBJECT AND D_IS_LLVM) 67 if(D_IS_LLVM)
68 set(D_FLAGS ${D_FLAGS} -singleobj) 68 set(D_FLAGS ${D_FLAGS} -singleobj)
69 endif(SINGLE_D_OBJECT AND D_IS_LLVM) 69 endif(D_IS_LLVM)
70 set(D_MODULES_PER_OBJECT 10000 CACHE STRING "Max number of modules per object file")
70 endif(NOT ONE_BUILD_COMMAND) 71 endif(NOT ONE_BUILD_COMMAND)
71 72
72 ## Specifics flags for build configurations. 73 ## Specifics flags for build configurations.
73 ## TODO: Add another targets. 74 ## TODO: Add another targets.
74 set(D_RELEASE_FLAGS -O -release) 75 set(D_RELEASE_FLAGS -O -release)
207 DEPENDS ${d_source_p} ${depends_tmp} 208 DEPENDS ${d_source_p} ${depends_tmp}
208 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 209 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
209 ) 210 )
210 endforeach (d_source_p_tmp ${SOURCES_tmp}) 211 endforeach (d_source_p_tmp ${SOURCES_tmp})
211 else(NOT SINGLE_D_OBJECT) 212 else(NOT SINGLE_D_OBJECT)
212 set(object_tmp ${tmp_dir_tmp}/${target}${D_OBJECT_SUFFIX}) 213 set(count_objects_tmp 0)
213 set(d_obj_out_tmp ${${objects_list}}) 214 set(files${count_objects_tmp}_tmp )
214 obj_path(d_obj_out_tmp) 215 set(counter_tmp 0)
215 set(parameters_tmp ${FLAGS_tmp} -c ${SOURCES_tmp} -of${object_tmp}) 216 set(files_tmp )
216 set(parameters_list_file_tmp ${tmp_dir_tmp}/parameters_obj) 217 set(objects_tmp )
217 if(CMAKE_HOST_WIN32) 218 foreach (d_source_p_tmp ${SOURCES_tmp})
218 file(REMOVE ${parameters_list_file_tmp}) 219 math(EXPR counter_tmp "${counter_tmp} + 1")
219 foreach(arg_tmp ${parameters_tmp}) 220 set(files${count_objects_tmp}_tmp ${files${count_objects_tmp}_tmp} ${d_source_p_tmp})
220 file(APPEND ${parameters_list_file_tmp} "${arg_tmp}\n") 221 if(counter_tmp GREATER D_MODULES_PER_OBJECT)
221 endforeach(arg_tmp) 222 math(EXPR count_objects_tmp "${count_objects_tmp} + 1")
222 set(param_tmp @${parameters_list_file_tmp}) 223 set(files${count_objects_tmp}_tmp )
223 elseif(CMAKE_HOST_UNIX) 224 set(counter_tmp 0)
224 set(param_tmp ${parameters_tmp}) 225 endif(counter_tmp GREATER D_MODULES_PER_OBJECT)
225 endif(CMAKE_HOST_WIN32) 226 endforeach (d_source_p_tmp ${SOURCES_tmp})
226 #get_imported_files(depends_tmp ${ARGN}) 227
227 add_custom_command(OUTPUT "${object_tmp}" 228 if(files${count_objects_tmp}_tmp)
228 COMMAND "${DC}" 229 math(EXPR count_objects_tmp "${count_objects_tmp} + 1")
229 ARGS ${param_tmp} 230 endif(files${count_objects_tmp}_tmp)
230 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 231
231 DEPENDS ${SOURCES_tmp} ${depends_tmp} 232 set(id_tmp 0)
232 COMMENT "" 233 while(id_tmp LESS ${count_objects_tmp})
233 ) 234 set(object_tmp ${tmp_dir_tmp}/${target}${id_tmp}${D_OBJECT_SUFFIX})
234 set(${objects_list} ${object_tmp}) 235 set(d_obj_out_tmp ${${object_tmp}})
236 obj_path(d_obj_out_tmp)
237 set(parameters_tmp ${FLAGS_tmp} -c ${files${id_tmp}_tmp} -of${object_tmp})
238 set(parameters_list_file_tmp ${tmp_dir_tmp}/parameters${id_tmp}_obj)
239 if(CMAKE_HOST_WIN32)
240 file(REMOVE ${parameters_list_file_tmp})
241 foreach(arg_tmp ${parameters_tmp})
242 file(APPEND ${parameters_list_file_tmp} "${arg_tmp}\n")
243 endforeach(arg_tmp)
244 set(param_tmp @${parameters_list_file_tmp})
245 elseif(CMAKE_HOST_UNIX)
246 set(param_tmp ${parameters_tmp})
247 endif(CMAKE_HOST_WIN32)
248 #get_imported_files(depends_tmp ${ARGN})
249 add_custom_command(OUTPUT "${object_tmp}"
250 COMMAND "${DC}"
251 ARGS ${param_tmp}
252 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
253 DEPENDS ${files${id_tmp}_tmp} ${depends_tmp}
254 COMMENT ""
255 )
256 set(objects_tmp ${objects_tmp} ${object_tmp})
257 math(EXPR id_tmp "${id_tmp} + 1")
258 endwhile(id_tmp LESS ${count_objects_tmp})
259
260 set(${objects_list} ${objects_tmp})
235 endif(NOT SINGLE_D_OBJECT) 261 endif(NOT SINGLE_D_OBJECT)
236 #add_custom_target(${target} DEPENDS "${${objects_list}}") 262 #add_custom_target(${target} DEPENDS "${${objects_list}}")
237 endmacro(compile_d_files objects_list) 263 endmacro(compile_d_files objects_list)
238 264
239 265