Fixed #17 and #23 — added 'MULTILIB' option to cmake script and fixed 'make install'

This commit is contained in:
Alexey Prokhin
2011-12-02 18:35:02 +04:00
parent 250d8ed214
commit 7d74a801bb
5 changed files with 209 additions and 122 deletions

View File

@@ -76,12 +76,7 @@ endif (NOT DEFINED SYSCONF_INSTALL_DIR)
set(D_VERSION 2 CACHE STRING "D language version") set(D_VERSION 2 CACHE STRING "D language version")
set(PROGRAM_PREFIX "" CACHE STRING "prepended to ldc binary name") set(PROGRAM_PREFIX "" CACHE STRING "prepended to ldc binary name")
set(PROGRAM_SUFFIX "" CACHE STRING "appended 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(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(USE_BOEHM_GC "use the Boehm garbage collector internally")
option(GENERATE_OFFTI "generate complete ClassInfo.offTi arrays") option(GENERATE_OFFTI "generate complete ClassInfo.offTi arrays")
option(USE_METADATA "use metadata and related custom optimization passes") 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) get_target_property(LDC_LOC ${LDC_EXE} LOCATION)
# TODO: testrun
install(TARGETS ${LDC_EXE} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) install(TARGETS ${LDC_EXE} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
install(PROGRAMS ${PROJECT_SOURCE_DIR}/bin/${LDMD_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.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) 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") if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
install(DIRECTORY bash_completion.d DESTINATION ${CONF_INST_DIR}) install(DIRECTORY bash_completion.d DESTINATION ${CONF_INST_DIR})
endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
add_subdirectory(runtime EXCLUDE_FROM_ALL) add_subdirectory(runtime)

View File

@@ -10,7 +10,7 @@ default:
"-I@PROJECT_BINARY_DIR@/../import", "-I@PROJECT_BINARY_DIR@/../import",
"-I@RUNTIME_DIR@/import", "-I@RUNTIME_DIR@/import",
"-I@RUNTIME_DIR@/src", "-I@RUNTIME_DIR@/src",
"-L-L@PROJECT_BINARY_DIR@/../lib", "-L-L@PROJECT_BINARY_DIR@/../lib", @MUTILIB_ADDITIONAL_PATH@
"-defaultlib=@RUNTIME_AIO@", "-defaultlib=@RUNTIME_AIO@",
"-debuglib=@RUNTIME_AIO@" "-debuglib=@RUNTIME_AIO@"
]; ];

View File

@@ -7,10 +7,9 @@ default:
// 'switches' holds array of string that are appends to the command line // 'switches' holds array of string that are appends to the command line
// arguments before they are parsed. // arguments before they are parsed.
switches = [ switches = [
"-I@INCLUDE_INSTALL_DIR@/phobos",
"-I@INCLUDE_INSTALL_DIR@/ldc", "-I@INCLUDE_INSTALL_DIR@/ldc",
"-I@INCLUDE_INSTALL_DIR@", "-I@INCLUDE_INSTALL_DIR@",
"-L-L@CMAKE_INSTALL_LIBDIR@", "-L-L@CMAKE_INSTALL_LIBDIR@", @MUTILIB_ADDITIONAL_INSTALL_PATH@
"-defaultlib=lphobos2", "-defaultlib=lphobos2",
"-debuglib=lphobos2" "-debuglib=lphobos2"
]; ];

View File

@@ -7,11 +7,11 @@ default:
// 'switches' holds array of string that are appends to the command line // 'switches' holds array of string that are appends to the command line
// arguments before they are parsed. // arguments before they are parsed.
switches = [ switches = [
"-I@PROJECT_BINARY_DIR@/../import", "-I@PROJECT_BINARY_DIR@/../import",
"-I@RUNTIME_DIR@/import", "-I@RUNTIME_DIR@/import",
"-I@RUNTIME_DIR@/src", "-I@RUNTIME_DIR@/src",
"-I@PHOBOS2_DIR@/", "-I@PHOBOS2_DIR@/",
"-L-L@PROJECT_BINARY_DIR@/../lib", "-L-L@PROJECT_BINARY_DIR@/../lib", @MUTILIB_ADDITIONAL_PATH@
"-defaultlib=lphobos2", "-defaultlib=lphobos2",
"-debuglib=lphobos2" "-debuglib=lphobos2"
]; ];

View File

@@ -2,9 +2,23 @@ project(runtime)
cmake_minimum_required(VERSION 2.6) 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") # Main configuration.
option(BUILD_SINGLE_LIB "build single runtime library" ON) #
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 ;") set(D_FLAGS -g -w -d CACHE STRING "runtime build flags, separated by ;")
if(BUILD_SHARED_LIBS) 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) get_directory_property(PROJECT_PARENT_DIR DIRECTORY ${PROJECT_SOURCE_DIR} PARENT_DIRECTORY)
set(RUNTIME_DIR ${PROJECT_PARENT_DIR}/${RUNTIME} CACHE PATH "runtime source dir") set(RUNTIME_DIR ${PROJECT_PARENT_DIR}/${RUNTIME} CACHE PATH "runtime source dir")
#
# Gather source files.
#
if(D_VERSION EQUAL 1) if(D_VERSION EQUAL 1)
# copy imports to runtime dir # copy imports to runtime dir
set(LDC_IMPORTS) set(LDC_IMPORTS)
@@ -66,7 +84,7 @@ elseif(D_VERSION EQUAL 2)
set(RUNTIME_CC druntime-core) set(RUNTIME_CC druntime-core)
set(RUNTIME_GC druntime-gc-basic) set(RUNTIME_GC druntime-gc-basic)
set(RUNTIME_DC druntime-rt-ldc) 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_DC_DIR ${RUNTIME_DIR}/src/rt)
set(RUNTIME_GC_DIR ${RUNTIME_DIR}/src/gc) set(RUNTIME_GC_DIR ${RUNTIME_DIR}/src/gc)
set(RUNTIME_INCLUDE ${RUNTIME_DIR}/src) set(RUNTIME_INCLUDE ${RUNTIME_DIR}/src)
@@ -163,12 +181,25 @@ if(NOT LDC_LOC)
set(LDC_EXE_NAME ${LDC_EXE}) set(LDC_EXE_NAME ${LDC_EXE})
endif(NOT LDC_LOC) 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) configure_file(${PROJECT_PARENT_DIR}/${CONFIG_NAME}.conf.in ${PROJECT_BINARY_DIR}/../bin/${LDC_EXE}.conf)
# Prepare the config files for installation in bin. # 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}_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) 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 "") if ("${PATH}" STREQUAL "")
file(RELATIVE_PATH output ${RUNTIME_DIR} ${INPUT_D}) file(RELATIVE_PATH output ${RUNTIME_DIR} ${INPUT_D})
else ("${PATH}" STREQUAL "") else ("${PATH}" STREQUAL "")
@@ -181,8 +212,8 @@ macro(dc INPUT_D OUTLIST_O OUTLIST_BC INCDIR MOREFLAGS PATH)
else ("${path}" STREQUAL "") else ("${path}" STREQUAL "")
set(output ${path}/${name}) set(output ${path}/${name})
endif ("${path}" STREQUAL "") endif ("${path}" STREQUAL "")
set(OUTPUT_O ${PROJECT_BINARY_DIR}/${output}.o) set(OUTPUT_O ${PROJECT_BINARY_DIR}/${output}${SUFFIX}.o)
set(OUTPUT_BC ${PROJECT_BINARY_DIR}/${output}.bc) set(OUTPUT_BC ${PROJECT_BINARY_DIR}/${output}${SUFFIX}.bc)
list(APPEND ${OUTLIST_O} ${OUTPUT_O}) list(APPEND ${OUTLIST_O} ${OUTPUT_O})
list(APPEND ${OUTLIST_BC} ${OUTPUT_BC}) list(APPEND ${OUTLIST_BC} ${OUTPUT_BC})
@@ -201,7 +232,7 @@ macro(dc INPUT_D OUTLIST_O OUTLIST_BC INCDIR MOREFLAGS PATH)
OUTPUT OUTPUT
${OUTPUT_O} ${OUTPUT_O}
${OUTPUT_BC} ${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} WORKING_DIRECTORY ${PROJECT_PARENT_DIR}
DEPENDS ${LDC_LOC} DEPENDS ${LDC_LOC}
${INPUT_D} ${INPUT_D}
@@ -210,103 +241,175 @@ macro(dc INPUT_D OUTLIST_O OUTLIST_BC INCDIR MOREFLAGS PATH)
) )
endmacro(dc) endmacro(dc)
foreach(f ${CORE_D}) macro(build_runtime d_flags c_flags ld_flags lib_suffix path_suffix)
dc(${f} CORE_O CORE_BC ${RUNTIME_INCLUDE} "-disable-invariants" "") set(output_path ${CMAKE_BINARY_DIR}/lib${path_suffix})
endforeach(f)
foreach(f ${GC_D}) set(target_suffix "")
dc(${f} GC_O GC_BC ${RUNTIME_INCLUDE} "-disable-invariants" "") if(NOT "${lib_suffix}" STREQUAL "")
endforeach(f) 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}) set(CORE_O "")
if(D_VERSION EQUAL 1) set(CORE_BC "")
dc(${f} DCRT_O DCRT_BC ${RUNTIME_INCLUDE} "" ${RUNTIME_DC_DIR}) foreach(f ${CORE_D})
else(D_VERSION EQUAL 1) dc(${f} CORE_O CORE_BC "${d_flags};-disable-invariants" "" "${target_suffix}")
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})
endforeach(f) endforeach(f)
add_library(lphobos2 ${D_LIBRARY_TYPE} set(GC_O "")
${ZLIB_C} set(GC_BC "")
${PHOBOS2_O} foreach(f ${GC_D})
${CORE_O} dc(${f} GC_O GC_BC "${d_flags};-disable-invariants" "" "${target_suffix}")
${CORE_C} endforeach(f)
${GC_O}
${DCRT_O} set(DCRT_O "")
${DCRT_C} set(DCRT_BC "")
) foreach(f ${DCRT_D})
add_dependencies(lphobos2 runtime) 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( set_target_properties(
lphobos2 PROPERTIES ${LIBS} PROPERTIES
LINKER_LANGUAGE C LINKER_LANGUAGE C
ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} ARCHIVE_OUTPUT_DIRECTORY ${output_path}
LIBRARY_OUTPUT_DIRECTORY ${LIBRARY_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) 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)