Closed
Description
I have do a patch for fix some build problem:
- multiple definition of bitop
- choose rigth llvm config header
- perform installation process
- generate di file for files in druntime/ldc (to druntime/import/core) like: bitop, eh, memory, arrayinit
On fedora you could have llvm in 32 and 64 bits so llvm config header could be:
- config-32.h
- config-64.h
- default config.h
i.e run cmake with -DLLVM_CONFIG_HEADER=config-64.h
current system build with O2, if you try O3 == segfault
me i override like this:
-DD_FLAGS:STRING="-O2;-g;-w;-d;-release"
I do not know if it is better to use gc instead g for code debugging
Now install process install devel file for phobos usefull for programmer.
PATCH:
diff -up ldc/CMakeLists.txt.fix ldc/CMakeLists.txt
--- ldc/CMakeLists.txt.fix 2011-10-03 12:02:34.145947341 +0200
+++ ldc/CMakeLists.txt 2011-10-03 17:11:33.071106536 +0200
@@ -15,8 +15,8 @@ if(NOT PKG_CONFIG_FOUND)
else(NOT PKG_CONFIG_FOUND)
pkg_search_module(LIBCONFIGPP libconfig++)
if(NOT LIBCONFIGPP_FOUND)
- set(LIBCONFIG_CXXFLAGS "" CACHE STRING "libconfig++ compiler flags")
- set(LIBCONFIG_LDFLAGS "" CACHE STRING "libconfig++ linker flags")
+ set(LIBCONFIG_CXXFLAGS "" CACHE STRING "libconfig++ compiler flags")
+ set(LIBCONFIG_LDFLAGS "" CACHE STRING "libconfig++ linker flags")
else(NOT LIBCONFIGPP_FOUND)
set(LIBCONFIG_CXXFLAGS ${LIBCONFIGPP_CFLAGS} CACHE STRING "libconfig++ compiler flags")
set(LIBCONFIG_LDFLAGS ${LIBCONFIGPP_LDFLAGS} CACHE STRING "libconfig++ linker flags")
@@ -31,6 +31,7 @@ set(LLVM_INSTDIR ${LLVM_DIR} CACHE PATH
if(NOT LLVM_INSTDIR)
message(FATAL_ERROR "llvm not found")
endif(NOT LLVM_INSTDIR)
+set(LLVM_CONFIG_HEADER "config.h" CACHE STRING "llvm config header file name")
execute_process(
COMMAND ${PERL_EXECUTABLE} ${LLVM_CONFIG} --host-target
@@ -53,23 +54,27 @@ execute_process(
OUTPUT_STRIP_TRAILING_WHITESPACE
)
-set(D_VERSION 1 CACHE STRING "D language version")
-set(CONF_INST_DIR "${CMAKE_INSTALL_PREFIX}/etc" CACHE STRING "set ldc.conf directory for installation")
-set(PROGRAM_PREFIX CACHE STRING "prepended to ldc binary name")
-set(PROGRAM_SUFFIX CACHE STRING "appended to ldc binary name")
-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")
+set(D_VERSION 1 CACHE STRING "D language version")
+set(CONF_INST_DIR "${CMAKE_INSTALL_PREFIX}/etc" CACHE STRING "set ldc.conf directory for installation")
+set(CMAKE_INSTALL_LIBDIR "lib" CACHE STRING "directory where lib will be installed")
+set(LIB_SUFFIX "" CACHE STRING "take empty string or 64. Directory where lib will be installed: lib or lib64")
+set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib${LIB_SUFFIX} CACHE PATH "output dir for built libraries")
+set(INCLUDE_INSTALL_DIR /usr/include/d CACHE PATH "Directory wher will be put header file")
+set(PROGRAM_PREFIX CACHE STRING "prepended to ldc binary name")
+set(PROGRAM_SUFFIX CACHE STRING "appended to ldc binary name")
+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")
if(D_VERSION EQUAL 1)
- set(DMDFE_PATH dmd)
- set(LDC_EXE ldc)
- set(LDMD_EXE ldmd)
+ set(DMDFE_PATH dmd)
+ set(LDC_EXE ldc)
+ set(LDMD_EXE ldmd)
add_definitions(-DDMDV1)
elseif(D_VERSION EQUAL 2)
- set(DMDFE_PATH dmd2)
- set(LDC_EXE ldc2)
- set(LDMD_EXE ldmd2)
+ set(DMDFE_PATH dmd2)
+ set(LDC_EXE ldc2)
+ set(LDMD_EXE ldmd2)
add_definitions(-DDMDV2)
else(D_VERSION EQUAL 1)
message(FATAL_ERROR "unsupported D version")
@@ -136,24 +141,24 @@ execute_process(
# build a define that contains all LLVM targets required and is usable for
# preprocessor code generation. start with the native target.
-find_path(LLVM_CONFIG_FILE_PATH config.h PATHS ${LLVM_INCLUDEDIR}/llvm/Config ${LLVM_INCLUDEDIR}/Config NO_DEFAULT_PATH)
+find_path(LLVM_CONFIG_FILE_PATH ${LLVM_CONFIG_HEADER} PATHS ${LLVM_INCLUDEDIR}/llvm/Config ${LLVM_INCLUDEDIR}/Config NO_DEFAULT_PATH)
if(LLVM_CONFIG_FILE_PATH STREQUAL "LLVM_CONFIG_FILE_PATH-NOTFOUND")
- message("Couldn't find your llvm Config.h file in ${LLVM_INCLUDEDIR}, no native target will be initialized.")
+ message("Couldn't find your llvm ${LLVM_CONFIG_HEADER} file in ${LLVM_INCLUDEDIR}, no native target will be initialized.")
else(LLVM_CONFIG_FILE_PATH STREQUAL "LLVM_CONFIG_FILE_PATH-NOTFOUND")
if(NOT HOST_TARGET AND NOT DEFAULT_TARGET)
- file(STRINGS ${LLVM_CONFIG_FILE_PATH}/config.h LLVM_HOSTTRIPLE REGEX "^#define LLVM_HOSTTRIPLE")
+ file(STRINGS ${LLVM_CONFIG_FILE_PATH}/${LLVM_CONFIG_HEADER} LLVM_HOSTTRIPLE REGEX "^#define LLVM_HOSTTRIPLE")
if(LLVM_HOSTTRIPLE)
string(REGEX REPLACE "^#define LLVM_HOSTTRIPLE \"(.*)\"$" "\\1" HOST_TARGET ${LLVM_HOSTTRIPLE})
endif(LLVM_HOSTTRIPLE)
endif(NOT HOST_TARGET AND NOT DEFAULT_TARGET)
- file(STRINGS ${LLVM_CONFIG_FILE_PATH}/config.h LLVM_NATIVE_ARCH REGEX "^#define LLVM_NATIVE_ARCH")
+ file(STRINGS ${LLVM_CONFIG_FILE_PATH}/${LLVM_CONFIG_HEADER} LLVM_NATIVE_ARCH REGEX "^#define LLVM_NATIVE_ARCH")
if(LLVM_NATIVE_ARCH)
string(REGEX REPLACE "^#define LLVM_NATIVE_ARCH (.*)(Target|)$" "\\1" LLVM_NATIVE_ARCH ${LLVM_NATIVE_ARCH})
message(STATUS "Found native target ${LLVM_NATIVE_ARCH}")
set(LLVM_MODULES_DEFINE "LLVM_TARGET(${LLVM_NATIVE_ARCH})")
else(LLVM_NATIVE_ARCH)
- message("Couldn't find the LLVM_NATIVE_ARCH define in ${LLVM_CONFIG_FILE_PATH}/config.h. Probably you have an older LLVM and can ignore this warning.")
+ message("Couldn't find the LLVM_NATIVE_ARCH define in ${LLVM_CONFIG_FILE_PATH}/${LLVM_CONFIG_HEADER}. Probably you have an older LLVM and can ignore this warning.")
endif(LLVM_NATIVE_ARCH)
endif(LLVM_CONFIG_FILE_PATH STREQUAL "LLVM_CONFIG_FILE_PATH-NOTFOUND")
# chain the extra target list to the define
@@ -176,9 +181,9 @@ set(DEFAULT_ALT_TARGET ${HOST_ALT_TARGET
# Also add the header files to the build so that they are available in IDE
# project files generated via CMake.
-file(GLOB_RECURSE FE_SRC ${DMDFE_PATH}/*.c ${DMDFE_PATH}/*.h)
-file(GLOB_RECURSE GEN_SRC gen/*.cpp gen/*.h)
-file(GLOB IR_SRC ir/*.cpp ir/*.h)
+file(GLOB_RECURSE FE_SRC ${DMDFE_PATH}/*.c ${DMDFE_PATH}/*.h)
+file(GLOB_RECURSE GEN_SRC gen/*.cpp gen/*.h)
+file(GLOB IR_SRC ir/*.cpp ir/*.h)
# exclude idgen and impcnvgen and generated sources, just in case
list(REMOVE_ITEM FE_SRC
${PROJECT_SOURCE_DIR}/${DMDFE_PATH}/idgen.c
@@ -222,7 +227,6 @@ endif(USE_METADATA)
if(CMAKE_MINOR_VERSION LESS 6)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin CACHE PATH "output dir for built executables")
- set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib CACHE PATH "output dir for built libraries")
add_definitions(-DDEFAULT_TARGET_TRIPLE=\\"${DEFAULT_TARGET}\\")
add_definitions(-DDEFAULT_ALT_TARGET_TRIPLE=\\"${DEFAULT_ALT_TARGET}\\")
add_definitions(-DLDC_INSTALL_PREFIX=\\"${CMAKE_INSTALL_PREFIX}\\")
@@ -237,10 +241,10 @@ add_executable(${LDC_EXE} ${LDC_SOURCE_F
set(LDC_EXE_NAME ${PROGRAM_PREFIX}${LDC_EXE}${PROGRAM_SUFFIX})
set_target_properties(
- ${LDC_EXE} PROPERTIES
- OUTPUT_NAME ${LDC_EXE_NAME}
- RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin
- COMPILE_FLAGS "${LLVM_CXXFLAGS} ${LIBCONFIG_CXXFLAGS} -Wno-deprecated -Wno-write-strings -fexceptions"
+ ${LDC_EXE} PROPERTIES
+ OUTPUT_NAME ${LDC_EXE_NAME}
+ RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin
+ COMPILE_FLAGS "${LLVM_CXXFLAGS} ${LIBCONFIG_CXXFLAGS} -Wno-deprecated -Wno-write-strings -fexceptions"
)
# LDFLAGS should actually be in target property LINK_FLAGS, but this works, and gets around linking problems
@@ -257,10 +261,14 @@ get_target_property(LDC_LOC ${LDC_EXE} L
# TODO: testrun
-install(TARGETS ${LDC_EXE} DESTINATION bin)
-install(PROGRAMS ${PROJECT_SOURCE_DIR}/bin/${LDMD_EXE} DESTINATION bin)
-install(FILES ${PROJECT_BINARY_DIR}/bin/${LDC_EXE}.conf DESTINATION ${CONF_INST_DIR})
-install(FILES ${PROJECT_BINARY_DIR}/bin/${LDC_EXE}.rebuild.conf DESTINATION ${CONF_INST_DIR})
-install(DIRECTORY ${PROJECT_BINARY_DIR}/lib DESTINATION . USE_SOURCE_PERMISSIONS)
+install(TARGETS ${LDC_EXE} DESTINATION bin)
+install(PROGRAMS ${PROJECT_SOURCE_DIR}/bin/${LDMD_EXE} DESTINATION bin)
+install(FILES ${PROJECT_BINARY_DIR}/bin/${LDC_EXE}.conf DESTINATION ${CONF_INST_DIR})
+install(FILES ${PROJECT_BINARY_DIR}/bin/${LDC_EXE}.rebuild.conf DESTINATION ${CONF_INST_DIR})
+install(DIRECTORY ${LIBRARY_OUTPUT_PATH} DESTINATION . USE_SOURCE_PERMISSIONS)
+install(DIRECTORY ${PROJECT_BINARY_DIR}/import/core DESTINATION ${INCLUDE_INSTALL_DIR}/)
+install(DIRECTORY ${PROJECT_BINARY_DIR}/phobos DESTINATION ${INCLUDE_INSTALL_DIR}/)
+install(DIRECTORY ${PROJECT_BINARY_DIR}/druntime/import/ldc DESTINATION ${INCLUDE_INSTALL_DIR}/)
+install(FILES ${PROJECT_BINARY_DIR}/druntime/import/object.di DESTINATION ${INCLUDE_INSTALL_DIR}/ldc)
add_subdirectory(runtime EXCLUDE_FROM_ALL)
diff -up ldc/runtime/CMakeLists.txt.fix ldc/runtime/CMakeLists.txt
--- ldc/runtime/CMakeLists.txt.fix 2011-10-03 12:50:23.364721772 +0200
+++ ldc/runtime/CMakeLists.txt 2011-10-04 01:19:19.555360961 +0200
@@ -2,10 +2,10 @@ 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)
-set(D_FLAGS -g -w -d CACHE STRING "runtime build flags, separated by ;")
+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)
+set(D_FLAGS -g -w -d CACHE STRING "runtime build flags, separated by ;")
if(BUILD_SHARED_LIBS)
list(APPEND D_FLAGS -relocation-model=pic)
@@ -62,20 +62,23 @@ if(D_VERSION EQUAL 1)
file(GLOB DCRT_C ${RUNTIME_DC_DIR}/*.c)
set(CONFIG_NAME ${LDC_EXE})
elseif(D_VERSION EQUAL 2)
- set(PHOBOS2_DIR ${PROJECT_PARENT_DIR}/phobos CACHE PATH "phobos2 source dir")
- set(RUNTIME_CC druntime-core)
- set(RUNTIME_GC druntime-gc-basic)
- set(RUNTIME_DC druntime-rt-ldc)
- set(RUNTIME_AIO druntime-ldc)
- set(RUNTIME_DC_DIR ${RUNTIME_DIR}/src/rt)
- set(RUNTIME_GC_DIR ${RUNTIME_DIR}/src/gc)
+ set(PHOBOS2_DIR ${PROJECT_PARENT_DIR}/phobos CACHE PATH "phobos2 source dir")
+ set(RUNTIME_CC druntime-core)
+ set(RUNTIME_GC druntime-gc-basic)
+ set(RUNTIME_DC druntime-rt-ldc)
+ set(RUNTIME_AIO druntime-ldc)
+ set(RUNTIME_DC_DIR ${RUNTIME_DIR}/src/rt)
+ set(RUNTIME_GC_DIR ${RUNTIME_DIR}/src/gc)
set(RUNTIME_INCLUDE ${RUNTIME_DIR}/src)
- file(GLOB CORE_D ${RUNTIME_DIR}/src/core/*.d )
- file(GLOB CORE_D_SYNC ${RUNTIME_DIR}/src/core/sync/*.d )
- file(GLOB CORE_D_STDC ${RUNTIME_DIR}/src/core/stdc/*.d )
- file(GLOB_RECURSE GC_D ${RUNTIME_GC_DIR}/*.d)
- file(GLOB_RECURSE DCRT_D ${RUNTIME_DC_DIR}/*.d)
- file(GLOB_RECURSE LDC_D ${RUNTIME_DIR}/src/ldc/*.d)
+ file(GLOB CORE_D ${RUNTIME_DIR}/src/core/*.d )
+ file(GLOB CORE_D_SYNC ${RUNTIME_DIR}/src/core/sync/*.d )
+ file(GLOB CORE_D_STDC ${RUNTIME_DIR}/src/core/stdc/*.d )
+ file(GLOB_RECURSE GC_D ${RUNTIME_GC_DIR}/*.d)
+ file(GLOB_RECURSE DCRT_D ${RUNTIME_DC_DIR}/*.d)
+ file(GLOB_RECURSE LDC_D ${RUNTIME_DIR}/src/ldc/*.d)
+ list(REMOVE_ITEM CORE_D
+ ${RUNTIME_DIR}/src/core/bitop.d
+ )
list(REMOVE_ITEM DCRT_D
${RUNTIME_DC_DIR}/alloca.d
${RUNTIME_DC_DIR}/arraybyte.d
@@ -102,7 +105,7 @@ elseif(D_VERSION EQUAL 2)
file(GLOB_RECURSE CORE_D_SYS ${RUNTIME_DIR}/src/core/sys/osx/*.d)
endif(UNIX)
list(APPEND CORE_D ${CORE_D_SYNC} ${CORE_D_SYS} ${CORE_D_STDC} )
- set(GENERATE_DI ${CORE_D})
+ list(APPEND GENERATE_DI ${CORE_D} ${LDC_D})
list(APPEND CORE_D ${LDC_D} ${RUNTIME_DIR}/src/object_.d)
file(GLOB CORE_C ${RUNTIME_DIR}/src/core/stdc/*.c)
@@ -198,13 +201,14 @@ macro(dc INPUT_D OUTLIST_O OUTLIST_BC IN
endif ("${path}" STREQUAL "")
set(OUTPUT_O ${PROJECT_BINARY_DIR}/${output}.o)
set(OUTPUT_BC ${PROJECT_BINARY_DIR}/${output}.bc)
- list(APPEND ${OUTLIST_O} ${OUTPUT_O})
- list(APPEND ${OUTLIST_BC} ${OUTPUT_BC})
+ list(APPEND ${OUTLIST_O} ${OUTPUT_O})
+ list(APPEND ${OUTLIST_BC} ${OUTPUT_BC})
list(FIND GENERATE_DI "${INPUT_D}" INDEX)
if (INDEX EQUAL -1)
set(DI_CMD "")
else (INDEX EQUAL -1)
+ string(REGEX REPLACE "src/ldc" "src/core" output ${output})
string(REGEX REPLACE "^src/" "" di_output ${output})
set(DI_CMD -Hf=${CMAKE_BINARY_DIR}/import/${di_output}.di)
list(REMOVE_AT GENERATE_DI ${INDEX})
@@ -271,7 +275,7 @@ if(BUILD_BC_LIBS)
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 ${PROJECT_BINARY_DIR}/../lib
+ WORKING_DIRECTORY ${LIBRARY_OUTPUT_PATH}
DEPENDS
${CORE_BC}
${GC_BC}
@@ -282,10 +286,10 @@ if(BUILD_BC_LIBS)
endif(BUILD_BC_LIBS)
set_target_properties(
- ${LIBS} PROPERTIES
- LINKER_LANGUAGE C
- ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/../lib
- LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/../lib
+ ${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
@@ -307,10 +311,10 @@ if(PHOBOS2_DIR)
)
add_dependencies(lphobos2 runtime)
set_target_properties(
- lphobos2 PROPERTIES
- LINKER_LANGUAGE C
- ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/../lib
- LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/../lib
+ lphobos2 PROPERTIES
+ LINKER_LANGUAGE C
+ ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH}
+ LIBRARY_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH}
)
add_custom_target(phobos2 DEPENDS lphobos2)
endif(PHOBOS2_DIR)
Metadata
Metadata
Assignees
Labels
No labels