From 7d74a801bb748b17185d6920d71bd70615af4f58 Mon Sep 17 00:00:00 2001 From: Alexey Prokhin Date: Fri, 2 Dec 2011 18:35:02 +0400 Subject: [PATCH] =?UTF-8?q?Fixed=20#17=20and=20#23=20=E2=80=94=20added=20'?= =?UTF-8?q?MULTILIB'=20option=20to=20cmake=20script=20and=20fixed=20'make?= =?UTF-8?q?=20install'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 19 +-- ldc2.conf.in | 2 +- ldc2_install.conf.in | 3 +- ldc2_phobos.conf.in | 4 +- runtime/CMakeLists.txt | 303 +++++++++++++++++++++++++++-------------- 5 files changed, 209 insertions(+), 122 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f606125..5a87da0d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -76,12 +76,7 @@ endif (NOT DEFINED SYSCONF_INSTALL_DIR) set(D_VERSION 2 CACHE STRING "D language version") set(PROGRAM_PREFIX "" CACHE STRING "prepended to ldc binary name") set(PROGRAM_SUFFIX "" CACHE STRING "appended to ldc binary name") -set(LIB_SUFFIX "" CACHE STRING "take empty string or 64. Directory where lib will be installed: lib or lib64") -set(CMAKE_INSTALL_LIBDIR ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX} CACHE PATH "Directory where lib will be installed") set(CONF_INST_DIR ${SYSCONF_INSTALL_DIR} CACHE PATH "Set ldc.conf directory for installation") -set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib${LIB_SUFFIX} CACHE PATH "output dir for built libraries") -set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/include/d CACHE PATH "Directory where will be put header files") -set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build as shared library or as static library") option(USE_BOEHM_GC "use the Boehm garbage collector internally") option(GENERATE_OFFTI "generate complete ClassInfo.offTi arrays") option(USE_METADATA "use metadata and related custom optimization passes") @@ -295,23 +290,13 @@ endif(USE_BOEHM_GC) get_target_property(LDC_LOC ${LDC_EXE} LOCATION) -# TODO: testrun install(TARGETS ${LDC_EXE} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) install(PROGRAMS ${PROJECT_SOURCE_DIR}/bin/${LDMD_EXE} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) install(FILES ${PROJECT_BINARY_DIR}/bin/${LDC_EXE}_install.conf DESTINATION ${CONF_INST_DIR} RENAME ${LDC_EXE}.conf) install(FILES ${PROJECT_BINARY_DIR}/bin/${LDC_EXE}_install.rebuild.conf DESTINATION ${CONF_INST_DIR} RENAME ${LDC_EXE}.rebuild.conf) -if(D_VERSION EQUAL 2) - install(DIRECTORY ${PROJECT_BINARY_DIR}/runtime/import/core DESTINATION ${INCLUDE_INSTALL_DIR}) - install(DIRECTORY ${PROJECT_SOURCE_DIR}/phobos DESTINATION ${INCLUDE_INSTALL_DIR} PATTERN ".git" EXCLUDE ) - install(DIRECTORY ${LIBRARY_OUTPUT_PATH} DESTINATION ${CMAKE_INSTALL_PREFIX} USE_SOURCE_PERMISSIONS) - install(FILES ${PROJECT_SOURCE_DIR}/${RUNTIME}/import/object.di DESTINATION ${INCLUDE_INSTALL_DIR}/ldc) - install(DIRECTORY ${PROJECT_SOURCE_DIR}/${RUNTIME}/import/ldc DESTINATION ${INCLUDE_INSTALL_DIR}) -else(D_VERSION EQUAL 2) - install(DIRECTORY ${PROJECT_SOURCE_DIR}/${RUNTIME}/internal/ldc/ DESTINATION ${INCLUDE_INSTALL_DIR}/ldc) - install(DIRECTORY ${PROJECT_SOURCE_DIR}/runtime/import/ldc DESTINATION ${INCLUDE_INSTALL_DIR}) -endif(D_VERSION EQUAL 2) + if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") install(DIRECTORY bash_completion.d DESTINATION ${CONF_INST_DIR}) endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") -add_subdirectory(runtime EXCLUDE_FROM_ALL) +add_subdirectory(runtime) diff --git a/ldc2.conf.in b/ldc2.conf.in index 09cd5b1d..aab1a26e 100644 --- a/ldc2.conf.in +++ b/ldc2.conf.in @@ -10,7 +10,7 @@ default: "-I@PROJECT_BINARY_DIR@/../import", "-I@RUNTIME_DIR@/import", "-I@RUNTIME_DIR@/src", - "-L-L@PROJECT_BINARY_DIR@/../lib", + "-L-L@PROJECT_BINARY_DIR@/../lib", @MUTILIB_ADDITIONAL_PATH@ "-defaultlib=@RUNTIME_AIO@", "-debuglib=@RUNTIME_AIO@" ]; diff --git a/ldc2_install.conf.in b/ldc2_install.conf.in index ab5a41ee..a7409bbb 100644 --- a/ldc2_install.conf.in +++ b/ldc2_install.conf.in @@ -7,10 +7,9 @@ default: // 'switches' holds array of string that are appends to the command line // arguments before they are parsed. switches = [ - "-I@INCLUDE_INSTALL_DIR@/phobos", "-I@INCLUDE_INSTALL_DIR@/ldc", "-I@INCLUDE_INSTALL_DIR@", - "-L-L@CMAKE_INSTALL_LIBDIR@", + "-L-L@CMAKE_INSTALL_LIBDIR@", @MUTILIB_ADDITIONAL_INSTALL_PATH@ "-defaultlib=lphobos2", "-debuglib=lphobos2" ]; diff --git a/ldc2_phobos.conf.in b/ldc2_phobos.conf.in index 301aaa23..e08cd58c 100644 --- a/ldc2_phobos.conf.in +++ b/ldc2_phobos.conf.in @@ -7,11 +7,11 @@ default: // 'switches' holds array of string that are appends to the command line // arguments before they are parsed. switches = [ - "-I@PROJECT_BINARY_DIR@/../import", + "-I@PROJECT_BINARY_DIR@/../import", "-I@RUNTIME_DIR@/import", "-I@RUNTIME_DIR@/src", "-I@PHOBOS2_DIR@/", - "-L-L@PROJECT_BINARY_DIR@/../lib", + "-L-L@PROJECT_BINARY_DIR@/../lib", @MUTILIB_ADDITIONAL_PATH@ "-defaultlib=lphobos2", "-debuglib=lphobos2" ]; diff --git a/runtime/CMakeLists.txt b/runtime/CMakeLists.txt index f354ba1d..4b77db37 100644 --- a/runtime/CMakeLists.txt +++ b/runtime/CMakeLists.txt @@ -2,9 +2,23 @@ project(runtime) cmake_minimum_required(VERSION 2.6) -option(BUILD_SHARED_LIBS "build the runtime as shared libraries (linux only)") -option(BUILD_BC_LIBS "build the runtime as bytecode libraries") -option(BUILD_SINGLE_LIB "build single runtime library" ON) +# +# Main configuration. +# + +include(CheckTypeSize) +check_type_size(void* ptr_size) + +if(${ptr_size} MATCHES "^8$") ## if it's 64-bit OS + set(MULTILIB OFF CACHE BOOL "Build both 64-bit and 32-bit libraries") +ENDIF(${ptr_size} MATCHES "^8$") + +set(BUILD_BC_LIBS OFF CACHE BOOL "Build the runtime as bytecode libraries") +set(BUILD_SINGLE_LIB ON CACHE BOOL "Build single runtime library") +set(LIB_SUFFIX "" CACHE STRING "Takes an empty string or 64. Directory where lib will be installed: lib or lib64") +set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/include/d CACHE PATH "Directory where will be put header files") +set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build as shared library or as static library") +set(CMAKE_INSTALL_LIBDIR ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX} CACHE PATH "Directory where lib will be installed") set(D_FLAGS -g -w -d CACHE STRING "runtime build flags, separated by ;") if(BUILD_SHARED_LIBS) @@ -26,6 +40,10 @@ endif(D_VERSION EQUAL 1) get_directory_property(PROJECT_PARENT_DIR DIRECTORY ${PROJECT_SOURCE_DIR} PARENT_DIRECTORY) set(RUNTIME_DIR ${PROJECT_PARENT_DIR}/${RUNTIME} CACHE PATH "runtime source dir") +# +# Gather source files. +# + if(D_VERSION EQUAL 1) # copy imports to runtime dir set(LDC_IMPORTS) @@ -66,7 +84,7 @@ elseif(D_VERSION EQUAL 2) set(RUNTIME_CC druntime-core) set(RUNTIME_GC druntime-gc-basic) set(RUNTIME_DC druntime-rt-ldc) - set(RUNTIME_AIO druntime-ldc) + set(RUNTIME_AIO ldruntime) set(RUNTIME_DC_DIR ${RUNTIME_DIR}/src/rt) set(RUNTIME_GC_DIR ${RUNTIME_DIR}/src/gc) set(RUNTIME_INCLUDE ${RUNTIME_DIR}/src) @@ -163,12 +181,25 @@ if(NOT LDC_LOC) set(LDC_EXE_NAME ${LDC_EXE}) endif(NOT LDC_LOC) +# +# Create configuration files. +# + +if(MULTILIB) + set(MUTILIB_ADDITIONAL_PATH "\n \"-L-L${CMAKE_BINARY_DIR}/lib32\",") + set(MUTILIB_ADDITIONAL_INSTALL_PATH "\n \"-L-L${CMAKE_INSTALL_PREFIX}/lib32\",") +endif(MULTILIB) + configure_file(${PROJECT_PARENT_DIR}/${CONFIG_NAME}.conf.in ${PROJECT_BINARY_DIR}/../bin/${LDC_EXE}.conf) # Prepare the config files for installation in bin. configure_file(${PROJECT_PARENT_DIR}/${LDC_EXE}_install.conf.in ${PROJECT_BINARY_DIR}/../bin/${LDC_EXE}_install.conf) configure_file(${PROJECT_PARENT_DIR}/${LDC_EXE}.rebuild.conf.in ${PROJECT_BINARY_DIR}/../bin/${LDC_EXE}_install.rebuild.conf) -macro(dc INPUT_D OUTLIST_O OUTLIST_BC INCDIR MOREFLAGS PATH) +# +# Macros. +# + +macro(dc INPUT_D OUTLIST_O OUTLIST_BC MOREFLAGS PATH SUFFIX) if ("${PATH}" STREQUAL "") file(RELATIVE_PATH output ${RUNTIME_DIR} ${INPUT_D}) else ("${PATH}" STREQUAL "") @@ -181,8 +212,8 @@ macro(dc INPUT_D OUTLIST_O OUTLIST_BC INCDIR MOREFLAGS PATH) else ("${path}" STREQUAL "") set(output ${path}/${name}) endif ("${path}" STREQUAL "") - set(OUTPUT_O ${PROJECT_BINARY_DIR}/${output}.o) - set(OUTPUT_BC ${PROJECT_BINARY_DIR}/${output}.bc) + set(OUTPUT_O ${PROJECT_BINARY_DIR}/${output}${SUFFIX}.o) + set(OUTPUT_BC ${PROJECT_BINARY_DIR}/${output}${SUFFIX}.bc) list(APPEND ${OUTLIST_O} ${OUTPUT_O}) list(APPEND ${OUTLIST_BC} ${OUTPUT_BC}) @@ -201,7 +232,7 @@ macro(dc INPUT_D OUTLIST_O OUTLIST_BC INCDIR MOREFLAGS PATH) OUTPUT ${OUTPUT_O} ${OUTPUT_BC} - COMMAND ${LDC_LOC} --output-o --output-bc -c -I${INCDIR} -I${RUNTIME_GC_DIR} ${INPUT_D} -of${OUTPUT_O} ${DI_CMD} ${D_FLAGS} ${MOREFLAGS} + COMMAND ${LDC_LOC} --output-o --output-bc -c -I${RUNTIME_INCLUDE} -I${RUNTIME_GC_DIR} ${INPUT_D} -of${OUTPUT_O} ${DI_CMD} ${D_FLAGS} ${MOREFLAGS} WORKING_DIRECTORY ${PROJECT_PARENT_DIR} DEPENDS ${LDC_LOC} ${INPUT_D} @@ -210,103 +241,175 @@ macro(dc INPUT_D OUTLIST_O OUTLIST_BC INCDIR MOREFLAGS PATH) ) endmacro(dc) -foreach(f ${CORE_D}) - dc(${f} CORE_O CORE_BC ${RUNTIME_INCLUDE} "-disable-invariants" "") -endforeach(f) +macro(build_runtime d_flags c_flags ld_flags lib_suffix path_suffix) + set(output_path ${CMAKE_BINARY_DIR}/lib${path_suffix}) -foreach(f ${GC_D}) - dc(${f} GC_O GC_BC ${RUNTIME_INCLUDE} "-disable-invariants" "") -endforeach(f) + set(target_suffix "") + if(NOT "${lib_suffix}" STREQUAL "") + set(target_suffix "_${lib_suffix}") + endif(NOT "${lib_suffix}" STREQUAL "") + if(NOT "${path_suffix}" STREQUAL "") + set(target_suffix "${target_suffix}_${path_suffix}") + endif(NOT "${path_suffix}" STREQUAL "") -foreach(f ${DCRT_D}) - if(D_VERSION EQUAL 1) - dc(${f} DCRT_O DCRT_BC ${RUNTIME_INCLUDE} "" ${RUNTIME_DC_DIR}) - else(D_VERSION EQUAL 1) - dc(${f} DCRT_O DCRT_BC ${RUNTIME_INCLUDE} "" "") - endif(D_VERSION EQUAL 1) -endforeach(f) - -if(EXISTS ${PROJECT_PARENT_DIR}/${RUNTIME}) - if(BUILD_SINGLE_LIB) - add_library(${RUNTIME_AIO} ${D_LIBRARY_TYPE} ${CORE_O} ${CORE_C} ${GC_O} ${DCRT_O} ${DCRT_C}) - set(LIBS ${RUNTIME_AIO}) - else(BUILD_SINGLE_LIB) - add_library(${RUNTIME_CC} ${D_LIBRARY_TYPE} ${CORE_O} ${CORE_C}) - add_library(${RUNTIME_GC} ${D_LIBRARY_TYPE} ${GC_O}) - add_library(${RUNTIME_DC} ${D_LIBRARY_TYPE} ${DCRT_O} ${DCRT_C}) - set(LIBS - ${RUNTIME_CC} - ${RUNTIME_GC} - ${RUNTIME_DC} - ) - endif(BUILD_SINGLE_LIB) -endif(EXISTS ${PROJECT_PARENT_DIR}/${RUNTIME}) - -if(BUILD_BC_LIBS) - find_program(LLVM_AR_EXE llvm-ar ${LLVM_INSTDIR}/bin DOC "path to llvm-ar tool") - if(NOT LLVM_AR_EXE) - message(SEND_ERROR "llvm-ar not found") - endif(NOT LLVM_AR_EXE) - - add_library(${RUNTIME_CC}-c ${CORE_C}) - add_library(${RUNTIME_DC}-c ${DCRT_C}) - list(APPEND LIBS - ${RUNTIME_CC}-c - ${RUNTIME_DC}-c - ) - add_custom_command( - OUTPUT bclibs - COMMAND ${LLVM_AR_EXE} rs lib${RUNTIME_CC}-bc.a ${CORE_BC} - COMMAND ${LLVM_AR_EXE} rs lib${RUNTIME_GC}-bc.a ${GC_BC} - # cannot parse genobj.bc if built with -g - # COMMAND ${LLVM_AR_EXE} rs lib${RUNTIME_DC}-bc.a ${DCRT_BC} - WORKING_DIRECTORY ${LIBRARY_OUTPUT_PATH} - DEPENDS - ${CORE_BC} - ${GC_BC} - ${DCRT_BC} - ${LDC_IMPORTS} - ) - set(BCLIBS bclibs) -endif(BUILD_BC_LIBS) - -if(D_VERSION EQUAL 2) - if(NOT PROJECT_BINARY_DIR STREQUAL "${PROJECT_SOURCE_DIR}") - file(COPY ${PROJECT_PARENT_DIR}/${RUNTIME} DESTINATION ${PROJECT_BINARY_DIR}/../) - file(COPY ${PROJECT_PARENT_DIR}/phobos DESTINATION ${PROJECT_BINARY_DIR}/../) - endif(NOT PROJECT_BINARY_DIR STREQUAL "${PROJECT_SOURCE_DIR}") -endif(D_VERSION EQUAL 2) - -set_target_properties( - ${LIBS} PROPERTIES - LINKER_LANGUAGE C - ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} - LIBRARY_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} -) - -# BCLIBS is empty if BUILD_BC_LIBS is not selected -add_custom_target(runtime DEPENDS ${LIBS} ${BCLIBS}) - -if(PHOBOS2_DIR) - foreach(f ${PHOBOS2_D}) - dc(${f} PHOBOS2_O PHOBOS2_BC ${RUNTIME_DIR}/src/ "-I${PHOBOS2_DIR}" ${PHOBOS2_DIR}) + set(CORE_O "") + set(CORE_BC "") + foreach(f ${CORE_D}) + dc(${f} CORE_O CORE_BC "${d_flags};-disable-invariants" "" "${target_suffix}") endforeach(f) - add_library(lphobos2 ${D_LIBRARY_TYPE} - ${ZLIB_C} - ${PHOBOS2_O} - ${CORE_O} - ${CORE_C} - ${GC_O} - ${DCRT_O} - ${DCRT_C} - ) - add_dependencies(lphobos2 runtime) + set(GC_O "") + set(GC_BC "") + foreach(f ${GC_D}) + dc(${f} GC_O GC_BC "${d_flags};-disable-invariants" "" "${target_suffix}") + endforeach(f) + + set(DCRT_O "") + set(DCRT_BC "") + foreach(f ${DCRT_D}) + if(D_VERSION EQUAL 1) + dc(${f} DCRT_O DCRT_BC "${d_flags}" ${RUNTIME_DC_DIR} "${target_suffix}") + else(D_VERSION EQUAL 1) + dc(${f} DCRT_O DCRT_BC "${d_flags}" "" "${target_suffix}") + endif(D_VERSION EQUAL 1) + endforeach(f) + + if(EXISTS ${PROJECT_PARENT_DIR}/${RUNTIME}) + if(BUILD_SINGLE_LIB) + add_library(${RUNTIME_AIO}${target_suffix} + ${D_LIBRARY_TYPE} + ${CORE_O} + ${CORE_C} + ${GC_O} + ${DCRT_O} + ${DCRT_C} + ) + set(LIBS ${RUNTIME_AIO}) + set_target_properties(${RUNTIME_AIO}${target_suffix} PROPERTIES OUTPUT_NAME ${RUNTIME_AIO}${lib_suffix}) + else(BUILD_SINGLE_LIB) + add_library(${RUNTIME_CC}${target_suffix} ${D_LIBRARY_TYPE} ${CORE_O} ${CORE_C}) + add_library(${RUNTIME_GC}${target_suffix} ${D_LIBRARY_TYPE} ${GC_O}) + add_library(${RUNTIME_DC}${target_suffix} ${D_LIBRARY_TYPE} ${DCRT_O} ${DCRT_C}) + set_target_properties(${RUNTIME_CC}${target_suffix} PROPERTIES OUTPUT_NAME ${RUNTIME_CC}${lib_suffix}) + set_target_properties(${RUNTIME_GC}${target_suffix} PROPERTIES OUTPUT_NAME ${RUNTIME_GC}${lib_suffix}) + set_target_properties(${RUNTIME_DC}${target_suffix} PROPERTIES OUTPUT_NAME ${RUNTIME_DC}${lib_suffix}) + set(LIBS + ${RUNTIME_CC}${lib_suffix} + ${RUNTIME_GC}${lib_suffix} + ${RUNTIME_DC}${lib_suffix} + ) + endif(BUILD_SINGLE_LIB) + endif(EXISTS ${PROJECT_PARENT_DIR}/${RUNTIME}) + + if(BUILD_BC_LIBS) + find_program(LLVM_AR_EXE llvm-ar ${LLVM_INSTDIR}/bin DOC "path to llvm-ar tool") + if(NOT LLVM_AR_EXE) + message(SEND_ERROR "llvm-ar not found") + endif(NOT LLVM_AR_EXE) + + add_library(${RUNTIME_CC}-c ${CORE_C}) + add_library(${RUNTIME_DC}-c ${DCRT_C}) + list(APPEND LIBS + ${RUNTIME_CC}-c + ${RUNTIME_DC}-c + ) + add_custom_command( + OUTPUT bclibs + COMMAND ${LLVM_AR_EXE} rs lib${RUNTIME_CC}-bc.a ${CORE_BC} + COMMAND ${LLVM_AR_EXE} rs lib${RUNTIME_GC}-bc.a ${GC_BC} + # cannot parse genobj.bc if built with -g + # COMMAND ${LLVM_AR_EXE} rs lib${RUNTIME_DC}-bc.a ${DCRT_BC} + WORKING_DIRECTORY ${output_path} + DEPENDS + ${CORE_BC} + ${GC_BC} + ${DCRT_BC} + ${LDC_IMPORTS} + ) + set(BCLIBS bclibs) + endif(BUILD_BC_LIBS) + + if(D_VERSION EQUAL 2) + if(NOT PROJECT_BINARY_DIR STREQUAL "${PROJECT_SOURCE_DIR}") + file(COPY ${PROJECT_PARENT_DIR}/${RUNTIME} DESTINATION ${PROJECT_BINARY_DIR}/../) + file(COPY ${PROJECT_PARENT_DIR}/phobos DESTINATION ${PROJECT_BINARY_DIR}/../) + endif(NOT PROJECT_BINARY_DIR STREQUAL "${PROJECT_SOURCE_DIR}") + endif(D_VERSION EQUAL 2) + set_target_properties( - lphobos2 PROPERTIES + ${LIBS} PROPERTIES LINKER_LANGUAGE C - ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} - LIBRARY_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} + ARCHIVE_OUTPUT_DIRECTORY ${output_path} + LIBRARY_OUTPUT_DIRECTORY ${output_path} + RUNTIME_OUTPUT_DIRECTORY ${output_path} + COMPILE_FLAGS "${c_flags}" + LINK_FLAGS "${ld_flags}" ) - add_custom_target(phobos2 DEPENDS lphobos2) + install(TARGETS ${LIBS} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib${path_suffix}) + + # BCLIBS is empty if BUILD_BC_LIBS is not selected + add_custom_target(runtime${target_suffix} DEPENDS ${LIBS} ${BCLIBS}) + + if(PHOBOS2_DIR) + set(PHOBOS2_O "") + set(PHOBOS2_BC "") + foreach(f ${PHOBOS2_D}) + dc(${f} PHOBOS2_O PHOBOS2_BC "${d_flags};-I${PHOBOS2_DIR}" ${PHOBOS2_DIR} "${target_suffix}") + endforeach(f) + + add_library(lphobos2${target_suffix} ${D_LIBRARY_TYPE} + ${ZLIB_C} + ${PHOBOS2_O} + ${CORE_O} + ${CORE_C} + ${GC_O} + ${DCRT_O} + ${DCRT_C} + ) + add_dependencies(lphobos2${target_suffix} runtime) + set_target_properties( + lphobos2${target_suffix} PROPERTIES + OUTPUT_NAME lphobos2${lib_suffix} + LINKER_LANGUAGE C + ARCHIVE_OUTPUT_DIRECTORY ${output_path} + LIBRARY_OUTPUT_DIRECTORY ${output_path} + RUNTIME_OUTPUT_DIRECTORY ${output_path} + COMPILE_FLAGS "${c_flags}" + LINK_FLAGS "${ld_flags}" + ) + install(TARGETS lphobos2${target_suffix} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib${path_suffix}) + add_dependencies(phobos2 DEPENDS lphobos2${target_suffix}) + endif(PHOBOS2_DIR) +endmacro(build_runtime d_flags c_flags ld_flags lib_suffix path_suffix) + +# +# Set up build targets. +# + +if(PHOBOS2_DIR) + add_custom_target(phobos2) endif(PHOBOS2_DIR) +build_runtime("" "" "" "" "${LIB_SUFFIX}") +set(GENERATE_DI "") +if(MULTILIB) + build_runtime("-m32" "-m32" "-m32" "" "32") +endif(MULTILIB) + +# +# Install target. +# + +if(D_VERSION EQUAL 2) + install(DIRECTORY ${PROJECT_BINARY_DIR}/import/core DESTINATION ${INCLUDE_INSTALL_DIR} FILES_MATCHING PATTERN "*.di") + if(PHOBOS2_DIR) + install(DIRECTORY ${PHOBOS2_DIR}/std DESTINATION ${INCLUDE_INSTALL_DIR} FILES_MATCHING PATTERN "*.d") + install(DIRECTORY ${PHOBOS2_DIR}/etc DESTINATION ${INCLUDE_INSTALL_DIR} FILES_MATCHING PATTERN "*.d") + install(FILES ${PHOBOS2_DIR}/crc32.d DESTINATION ${INCLUDE_INSTALL_DIR}) + endif(PHOBOS2_DIR) + install(FILES ${RUNTIME_DIR}/import/object.di DESTINATION ${INCLUDE_INSTALL_DIR}/ldc) + install(FILES ${RUNTIME_DIR}/src/ldc/bitop.d DESTINATION ${INCLUDE_INSTALL_DIR}/core) + install(DIRECTORY ${RUNTIME_DIR}/import/ldc DESTINATION ${INCLUDE_INSTALL_DIR} FILES_MATCHING PATTERN "*.di") +else(D_VERSION EQUAL 2) + install(DIRECTORY ${PROJECT_SOURCE_DIR}/${RUNTIME}/internal/ldc/ DESTINATION ${INCLUDE_INSTALL_DIR}/ldc) + install(DIRECTORY ${PROJECT_SOURCE_DIR}/runtime/import/ldc DESTINATION ${INCLUDE_INSTALL_DIR}) +endif(D_VERSION EQUAL 2)