Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Patch] Build system #8

Closed
bioinfornatics opened this issue Oct 3, 2011 · 1 comment
Closed

[Patch] Build system #8

bioinfornatics opened this issue Oct 3, 2011 · 1 comment

Comments

@bioinfornatics
Copy link
Contributor

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)
@dnadlinger
Copy link
Member

I think this is covered by pull request #12 and friends, if not, please reopen.

dnadlinger added a commit that referenced this issue Sep 27, 2014
Added runtime function for arrays without memset.
timotheecour pushed a commit to timotheecour/ldc that referenced this issue Dec 13, 2017
Remove alias that is no longer needed in utility example.
Robertorosmaninho added a commit to Robertorosmaninho/ldc that referenced this issue Feb 8, 2020
Robertorosmaninho added a commit to Robertorosmaninho/ldc that referenced this issue Feb 12, 2020
MLIR: #2 CMake - Adding FindMLIR.cmake
MLIR: #3 CMake - Updating FindMLIR
MLIR: #4 CMake - Updating Path 
MLIR: #5 CMake - Adding MLIRLibs
MLIR: #6 CMake - Supporting Dialect on FindMLIR
MLIR: #7 CMake - Adding Message of Ops.ts
MLIR: ldc-developers#8 CMake - Removing duplicated messages
MLIR: ldc-developers#9 CMake: Updating paths and setting libs
MLIR: ldc-developers#10 CMake - Removing duplicated MLIR Headers
Make MLIR optional, use MLIR_LIBRARIES
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants