comparison CMakeLists.txt @ 13:4faee409a98d

Disable SINGLE_D_OBJECT option for ldc compiler.
author SokoL_SD
date Thu, 14 May 2009 15:04:16 +0000
parents 74465e760fde
children 6faf3d3cb95e
comparison
equal deleted inserted replaced
12:74465e760fde 13:4faee409a98d
61 if(D_IS_MARS) 61 if(D_IS_MARS)
62 option(SINGLE_D_OBJECT "Build all d sources to one object file" "ON") 62 option(SINGLE_D_OBJECT "Build all d sources to one object file" "ON")
63 elseif(D_IS_LLVM) 63 elseif(D_IS_LLVM)
64 option(SINGLE_D_OBJECT "Build all d sources to one object file" "OFF") 64 option(SINGLE_D_OBJECT "Build all d sources to one object file" "OFF")
65 if(SINGLE_D_OBJECT) 65 if(SINGLE_D_OBJECT)
66 set(D_FLAGS ${D_FLAGS} -singleobj) 66 message(STATUS "LDC not support build multiple source files in one .obj file")
67 set(SINGLE_D_OBJECT "OFF")
68 #set(D_FLAGS ${D_FLAGS} -singleobj)
67 endif(SINGLE_D_OBJECT) 69 endif(SINGLE_D_OBJECT)
68 endif(D_IS_MARS) 70 endif(D_IS_MARS)
69 71
70 # Check D compiler version 72 # Check D compiler version
71 if(D_VERSION EQUAL "1") 73 if(D_VERSION EQUAL "1")
335 foreach(d_source ${d_files}) 337 foreach(d_source ${d_files})
336 set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/qt/${d_source}.d) 338 set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/qt/${d_source}.d)
337 endforeach(d_source) 339 endforeach(d_source)
338 foreach(d_source ${d_generated_files}) 340 foreach(d_source ${d_generated_files})
339 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${d_source}.d) 341 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${d_source}.d)
342 get_filename_component(path ${d_source}.d PATH)
343 get_filename_component(path ${d_source}.d NAME_WE)
344 if(NOT GENERATE_DI_FILES)
345 install(FILES ${d_source} DESTINATION include/d/qtd/${path} RENAME ${class}.di)
346 endif(NOT GENERATE_DI_FILES)
340 endforeach(d_source) 347 endforeach(d_source)
341 foreach (cpp_source ${cpp_files}) 348 foreach (cpp_source ${cpp_files})
342 set(cpp_sources ${cpp_sources} ${CMAKE_SOURCE_DIR}/cpp/${cpp_source}.cpp) 349 set(cpp_sources ${cpp_sources} ${CMAKE_SOURCE_DIR}/cpp/${cpp_source}.cpp)
343 endforeach(cpp_source) 350 endforeach(cpp_source)
344 set(classes ArrayOps ${classes}) 351 set(classes ArrayOps ${classes})
345 foreach(class ${classes}) 352 foreach(class ${classes})
346 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${package}/${class}.d) 353 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${package}/${class}.d)
347 set(cpp_sources ${cpp_sources} ${CMAKE_BINARY_DIR}/cpp/qt_${package}/${class}_shell.cpp) 354 set(cpp_sources ${cpp_sources} ${CMAKE_BINARY_DIR}/cpp/qt_${package}/${class}_shell.cpp)
348 add_sources_for_generating(${CMAKE_BINARY_DIR}/cpp/qt_${package}/${class}_shell.cpp) 355 add_sources_for_generating(${CMAKE_BINARY_DIR}/cpp/qt_${package}/${class}_shell.cpp)
349 add_sources_for_generating(${CMAKE_BINARY_DIR}/qt/${package}/${class}.d) 356 add_sources_for_generating(${CMAKE_BINARY_DIR}/qt/${package}/${class}.d)
357 if(NOT GENERATE_DI_FILES)
358 install(FILES ${d_source} DESTINATION include/d/qtd/${package} RENAME ${class}.di)
359 endif(NOT GENERATE_DI_FILES)
350 endforeach(class) 360 endforeach(class)
351 361
352 ## Link CPP library. 362 ## Link CPP library.
363 add_library(cpp_${package} SHARED ${cpp_sources})
364
365 ## Link D library.
353 set(lib_name ${D_LIB_PREFIX}qtd${package}${D_LIB_SUFFIX}) 366 set(lib_name ${D_LIB_PREFIX}qtd${package}${D_LIB_SUFFIX})
354 add_library(cpp_${package} SHARED ${cpp_sources}) 367 set(lib lib/${lib_name})
355
356 ## Link D library.
357 compile_d_files(${package}_dobjs objects ${d_sources}) 368 compile_d_files(${package}_dobjs objects ${d_sources})
358 set(d_objs ${d_objs} ${objects}) 369 set(d_objs ${d_objs} ${objects})
359 if(${CMAKE_SYSTEM_NAME} STREQUAL Windows) 370 if(${CMAKE_SYSTEM_NAME} STREQUAL Windows)
360 set_property(TARGET cpp_${package} PROPERTY RUNTIME_OUTPUT_DIRECTORY lib) 371 set_property(TARGET cpp_${package} PROPERTY RUNTIME_OUTPUT_DIRECTORY lib)
361 set_property(TARGET cpp_${package} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles) 372 set_property(TARGET cpp_${package} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles)
372 ARGS /system /PAGESIZE:32 ${d_implib_native} ${cpp_lib_native} 383 ARGS /system /PAGESIZE:32 ${d_implib_native} ${cpp_lib_native}
373 DEPENDS "cpp_${package}" 384 DEPENDS "cpp_${package}"
374 COMMENT "Creating implib ${lib_name}" 385 COMMENT "Creating implib ${lib_name}"
375 ) 386 )
376 add_custom_command( 387 add_custom_command(
377 OUTPUT "${lib_name}" 388 OUTPUT "${lib}"
378 COMMAND "${DC}" 389 COMMAND "${DC}"
379 ARGS -lib ${d_objs} ${d_implib} -oflib/${lib_name} 390 ARGS -lib ${d_objs} ${d_implib} -of${lib}
380 DEPENDS ${d_objs} ${d_implib} 391 DEPENDS ${d_objs} ${d_implib}
381 COMMENT "Linking ${lib_name}" 392 COMMENT "Linking ${lib_name}"
382 ) 393 )
394 install(FILES ${cpp_lib} DESTINATION lib)
383 else(${CMAKE_SYSTEM_NAME} STREQUAL Linux) 395 else(${CMAKE_SYSTEM_NAME} STREQUAL Linux)
384 set_property(TARGET cpp_${package} PROPERTY LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles) 396 set_property(TARGET cpp_${package} PROPERTY LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles)
385 foreach(cpp_source ${cpp_sources}) 397 foreach(cpp_source ${cpp_sources})
386 set(cpp_source ${cpp_source}) 398 set(cpp_source ${cpp_source})
387 obj_path(cpp_source) 399 obj_path(cpp_source)
388 set(cpp_objs ${cpp_objs} CMakeFiles/cpp_${package}.dir/${cpp_source}.o) 400 set(cpp_objs ${cpp_objs} CMakeFiles/cpp_${package}.dir/${cpp_source}${CMAKE_CXX_OUTPUT_EXTENSION})
389 endforeach(cpp_source) 401 endforeach(cpp_source)
390 add_custom_command( 402 add_custom_command(
391 OUTPUT "${lib_name}" 403 OUTPUT "${lib}"
392 COMMAND "${CMAKE_AR}" 404 COMMAND "${CMAKE_AR}"
393 ARGS rcs lib/${lib_name} ${d_objs} ${cpp_objs} 405 ARGS rcs ${lib} ${d_objs} ${cpp_objs}
394 DEPENDS ${d_objs} cpp_${package} 406 DEPENDS ${d_objs} cpp_${package}
395 COMMENT "Linking ${lib_name}" 407 COMMENT "Linking ${lib_name}"
396 ) 408 )
397 endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows) 409 endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows)
410 install(FILES ${lib} DESTINATION lib)
398 411
399 ## Dependences. 412 ## Dependences.
400 add_dependencies(cpp_${package} dgen) 413 add_dependencies(cpp_${package} dgen)
401 add_custom_target(${package} DEPENDS ${lib_name}) 414 add_custom_target(${package} DEPENDS ${lib})
402 foreach(depend ${depends}) 415 foreach(depend ${depends})
403 add_dependencies(cpp_${package} cpp_${depend}) 416 add_dependencies(cpp_${package} cpp_${depend})
404 add_dependencies(${package} ${depend}) 417 add_dependencies(${package} ${depend})
405 endforeach(depend ${depends}) 418 endforeach(depend ${depends})
406 add_dependencies(allpackages ${package}) 419 add_dependencies(allpackages ${package})
422 foreach(link ${link_example}) 435 foreach(link ${link_example})
423 set(${package}_lib_param ${${package}_lib_param} ${link}) 436 set(${package}_lib_param ${${package}_lib_param} ${link})
424 endforeach(link ${link_example}) 437 endforeach(link ${link_example})
425 endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS) 438 endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS)
426 439
427 set(regexp_str "(${CMAKE_BINARY_DIR}|${CMAKE_SOURCE_DIR})/([A-Za-z0-9\\-_\\\\/]+)[/]+([A-Za-z0-9\\-_\\\\]+).d") 440 if(GENERATE_DI_FILES)
428 foreach(source ${d_sources}) 441 set(regexp_str "(${CMAKE_BINARY_DIR}|${CMAKE_SOURCE_DIR})/([A-Za-z0-9\\-_\\\\/]+)[/]+([A-Za-z0-9\\-_\\\\]+).d")
429 # find_file(source ${source} PATHS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} 442 foreach(source ${d_sources})
430 # ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}) 443 # find_file(source ${source} PATHS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
431 string(REGEX REPLACE ${regexp_str} "\\2" inc_path "${source}") 444 # ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR})
432 string(REGEX REPLACE ${regexp_str} "\\3" file_name "${source}") 445 string(REGEX REPLACE ${regexp_str} "\\2" inc_path "${source}")
433 set(interface_file_path ${CMAKE_BINARY_DIR}/include/${inc_path}) 446 string(REGEX REPLACE ${regexp_str} "\\3" file_name "${source}")
434 set(interface_file "${interface_file_path}/${file_name}.di") 447 set(interface_file_path ${CMAKE_BINARY_DIR}/d/${inc_path})
435 if(NOT "${file_name}" STREQUAL "QGlobal" AND GENERATE_DI_FILES) 448 set(interface_file "${interface_file_path}/${file_name}.di")
436 add_custom_command(OUTPUT "${interface_file}" 449 if(NOT "${file_name}" STREQUAL "QGlobal")
437 COMMAND "${DC}" 450 add_custom_command(OUTPUT "${interface_file}"
438 ARGS ${D_FLAGS} -o- -H -Hd${interface_file_path} ${source} 451 COMMAND "${DC}"
439 COMMENT "Generating header for ${source}" 452 ARGS ${D_FLAGS} -o- -H -Hd${interface_file_path} ${source}
440 DEPENDS ${source} 453 COMMENT "Generating header for ${source}"
441 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 454 DEPENDS ${source}
442 ) 455 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
443 else(NOT "${file_name}" STREQUAL "QGlobal" AND GENERATE_DI_FILES) 456 )
444 add_custom_command(OUTPUT "${interface_file}" 457 else(NOT "${file_name}" STREQUAL "QGlobal") ## DMD frontend crash on this file.
445 COMMAND ${CMAKE_COMMAND} -E make_directory ${interface_file_path} 458 add_custom_command(OUTPUT "${interface_file}"
446 COMMAND ${CMAKE_COMMAND} -E remove -f ${interface_file} 459 COMMAND ${CMAKE_COMMAND} -E make_directory ${interface_file_path}
447 COMMAND ${CMAKE_COMMAND} -E copy ${source} ${interface_file} 460 COMMAND ${CMAKE_COMMAND} -E remove -f ${interface_file}
448 COMMENT "" 461 COMMAND ${CMAKE_COMMAND} -E copy ${source} ${interface_file}
449 DEPENDS ${source} 462 COMMENT ""
450 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 463 DEPENDS ${source}
451 ) 464 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
452 endif(NOT "${file_name}" STREQUAL "QGlobal" AND GENERATE_DI_FILES) 465 )
453 set(interfaces_list ${interfaces_list} ${interface_file_path}/${file_name}.di) 466 endif(NOT "${file_name}" STREQUAL "QGlobal" AND GENERATE_DI_FILES)
454 endforeach(source) 467 set(interfaces_list ${interfaces_list} ${interface_file_path}/${file_name}.di)
455 endforeach(package_big ${packages_big}) 468 install(FILES ${interface_file} DESTINATION include/d/${inc_path})
456 # add_custom_target(generate_headers DEPENDS ${interfaces_list}) 469 endforeach(source)
470 endif(GENERATE_DI_FILES)
471 endforeach(package_big ${packages_big})
472 if(GENERATE_DI_FILES)
473 add_custom_target(generate_headers ALL DEPENDS ${interfaces_list})
474 endif(GENERATE_DI_FILES)
457 475
458 ##-------------------------------------------- 476 ##--------------------------------------------
459 ## Build other parts of the QtD. 477 ## Build other parts of the QtD.
460 ##-------------------------------------------- 478 ##--------------------------------------------
461 if(BUILD_EXAMPLES) 479 if(BUILD_EXAMPLES)