Mercurial > projects > qtd
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) |