mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-01-11 18:33:14 +01:00
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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@"
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -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"
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -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"
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user