Wiki Roadmap Timeline Tickets New Ticket Source Search Help / Guide About Trac Login

Changeset 753:405e40f20ef9

Show
Ignore:
Timestamp:
11/05/08 10:53:03 (2 months ago)
Author:
Christian Kamm <kamm incasoftware de>
branch:
default
Message:

Switch to Elrood's rewritten CMakeLists.txt.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • CMakeLists.txt

    r750 r753  
    1 project (ldc) 
     1project(ldc) 
    22 
    3 set (LDC_SOURCE_FILES  
    4 dmd/access.c 
    5 dmd/array.c 
    6 dmd/arrayop.c 
    7 dmd/attrib.c 
    8 dmd/cast.c 
    9 dmd/class.c 
    10 dmd/clone.c 
    11 dmd/cond.c 
    12 dmd/constfold.c 
    13 dmd/dchar.c 
    14 dmd/declaration.c 
    15 dmd/delegatize.c 
    16 dmd/doc.c 
    17 dmd/dsymbol.c 
    18 dmd/dump.c 
    19 dmd/entity.c 
    20 dmd/enum.c 
    21 dmd/expression.c 
    22 dmd/func.c 
    23 dmd/gnuc.c 
    24 dmd/hdrgen.c 
    25 dmd/html.c 
    26 dmd/identifier.c 
    27 dmd/import.c 
    28 dmd/inifile.c 
    29 dmd/init.c 
    30 dmd/inline.c 
    31 dmd/interpret.c 
    32 dmd/lexer.c 
    33 dmd/lstring.c 
    34 dmd/macro.c 
    35 dmd/man.c 
    36 dmd/mangle.c 
    37 dmd/mars.c 
    38 dmd/mem.c 
    39 dmd/module.c 
    40 dmd/mtype.c 
    41 dmd/opover.c 
    42 dmd/optimize.c 
    43 dmd/parse.c 
    44 dmd/root.c 
    45 dmd/scope.c 
    46 dmd/statement.c 
    47 dmd/staticassert.c 
    48 dmd/stringtable.c 
    49 dmd/struct.c 
    50 dmd/template.c 
    51 dmd/unialpha.c 
    52 dmd/utf.c 
    53 dmd/version.c 
    54 gen/aa.cpp 
    55 gen/arrays.cpp 
    56 gen/asmstmt.cpp 
    57 gen/binops.cpp 
    58 gen/classes.cpp 
    59 gen/complex.cpp 
    60 gen/dvalue.cpp 
    61 gen/dwarftypes.cpp 
    62 gen/functions.cpp 
    63 gen/irstate.cpp 
    64 gen/linker.cpp 
    65 gen/llvmhelpers.cpp 
    66 gen/logger.cpp 
    67 gen/optimizer.cpp 
    68 gen/runtime.cpp 
    69 gen/statements.cpp 
    70 gen/structs.cpp 
    71 gen/tocall.cpp 
    72 gen/tocsym.cpp 
    73 gen/todebug.cpp 
    74 gen/todt.cpp 
    75 gen/toir.cpp 
    76 gen/tollvm.cpp 
    77 gen/toobj.cpp 
    78 gen/typinf.cpp 
    79 ir/irfunction.cpp 
    80 ir/irlandingpad.cpp 
    81 ir/irmodule.cpp 
    82 ir/irstruct.cpp 
    83 ir/irsymbol.cpp 
    84 ir/irtype.cpp 
    85 ir/irvar.cpp 
     3cmake_minimum_required(VERSION 2.6) 
     4# actually, 2.4 will work, with a warning 
     5# if we required 2.4, 2.6+ would switch to a compatibility mode and cause problems on 2.6+ specifics 
     6 
     7include(FindPerl) 
     8if(NOT PERL) 
     9    message(FATAL_ERROR "perl not found") 
     10endif(NOT PERL) 
     11 
     12set(LLVM_INSTDIR CACHE PATH "LLVM installation directory") 
     13 
     14find_program(LLVM_CONFIG llvm-config ${LLVM_INSTDIR}/bin DOC "path to llvm-config tool") 
     15if(NOT LLVM_CONFIG) 
     16    message(FATAL_ERROR "llvm-config not found") 
     17endif(NOT LLVM_CONFIG) 
     18 
     19execute_process( 
     20    COMMAND ${PERL_EXECUTABLE} ${LLVM_CONFIG} --host-target 
     21    OUTPUT_VARIABLE HOST_TARGET 
     22    OUTPUT_STRIP_TRAILING_WHITESPACE 
     23
     24execute_process( 
     25    COMMAND ${PERL_EXECUTABLE} ${LLVM_CONFIG} --cxxflags 
     26    OUTPUT_VARIABLE LLVM_CXXFLAGS 
     27    OUTPUT_STRIP_TRAILING_WHITESPACE 
     28
     29execute_process( 
     30    COMMAND ${PERL_EXECUTABLE} ${LLVM_CONFIG} --ldflags 
     31    OUTPUT_VARIABLE LLVM_LDFLAGS 
     32    OUTPUT_STRIP_TRAILING_WHITESPACE 
     33
     34execute_process( 
     35    COMMAND ${PERL_EXECUTABLE} ${LLVM_CONFIG} --libfiles bitwriter linker ipo instrumentation backend 
     36    OUTPUT_VARIABLE LLVM_LIBS 
     37    OUTPUT_STRIP_TRAILING_WHITESPACE 
     38
     39# get llvm's install dir. a little hackish, we could do something like llvm-config --prefix, but this does as well 
     40string(REPLACE "/bin/llvm-config" "" LLVM_INSTDIR ${LLVM_CONFIG}) 
     41 
     42file(MAKE_DIRECTORY 
     43    ${PROJECT_BINARY_DIR}/bin 
     44    ${PROJECT_BINARY_DIR}/dmd 
    8645) 
    8746 
    88 set (LDC_GENERATED_SOURCE_FILES 
    89 ${CMAKE_CURRENT_BINARY_DIR}/impcnvtab.c 
    90 ${CMAKE_CURRENT_BINARY_DIR}/id.c 
     47# idgen and impcnvgen 
     48set_source_files_properties( 
     49    dmd/idgen.c 
     50    dmd/impcnvgen.c 
     51    PROPERTIES LANGUAGE CXX 
    9152) 
    92 set (LDC_GENERATED_HEADER_FILES 
    93 ${CMAKE_CURRENT_BINARY_DIR}/id.h 
     53add_executable(idgen dmd/idgen.c) 
     54add_executable(impcnvgen dmd/impcnvgen.c) 
     55# cmake 2.4 
     56set_target_properties( 
     57    idgen impcnvgen PROPERTIES 
     58    LINKER_LANGUAGE CXX 
     59
     60get_target_property(IDGEN_LOC idgen LOCATION) 
     61get_target_property(IMPCNVGEN_LOC impcnvgen LOCATION) 
     62#  
     63add_custom_command( 
     64    OUTPUT 
     65        ${PROJECT_BINARY_DIR}/dmd/id.c 
     66        ${PROJECT_BINARY_DIR}/dmd/id.h 
     67    # 2.4 
     68    COMMAND ${IDGEN_LOC} 
     69    #COMMAND idgen 
     70    WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/dmd 
     71    DEPENDS idgen 
     72
     73add_custom_command( 
     74    OUTPUT ${PROJECT_BINARY_DIR}/dmd/impcnvtab.c 
     75    # 2.4 
     76    COMMAND ${IMPCNVGEN_LOC} 
     77    #COMMAND impcnvgen  
     78    WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/dmd 
     79    DEPENDS impcnvgen 
     80
     81set(LDC_GENERATED 
     82    ${PROJECT_BINARY_DIR}/dmd/id.c 
     83    ${PROJECT_BINARY_DIR}/dmd/id.h 
     84    ${PROJECT_BINARY_DIR}/dmd/impcnvtab.c 
     85
     86# idgen and impcnvgen done 
     87 
     88set(DEFAULT_TARGET ${HOST_TARGET} CACHE STRING "default target") 
     89 
     90include_directories(. dmd ${PROJECT_BINARY_DIR}/dmd ${LLVM_INSTDIR}/include) 
     91 
     92file(GLOB FE_SRC dmd/*.c) 
     93file(GLOB GEN_SRC gen/*.cpp) 
     94file(GLOB IR_SRC ir/*.cpp) 
     95# exclude idgen and impcnvgen and generated sources, just in case 
     96list(REMOVE_ITEM FE_SRC 
     97    ${PROJECT_SOURCE_DIR}/dmd/idgen.c 
     98    ${PROJECT_SOURCE_DIR}/dmd/impcnvgen.c 
     99    ${PROJECT_SOURCE_DIR}/dmd/id.c 
     100    ${PROJECT_SOURCE_DIR}/dmd/impcnvtab.c 
     101
     102set(LDC_SOURCE_FILES 
     103    ${LDC_GENERATED} 
     104    ${FE_SRC} 
     105    ${GEN_SRC} 
     106    ${IR_SRC} 
     107
     108set_source_files_properties( 
     109    ${LDC_SOURCE_FILES} PROPERTIES 
     110    LANGUAGE CXX 
    94111) 
    95112 
    96 # some sources are generated 
    97 set_source_files_properties ( 
    98   ${LDC_GENERATED_SOURCE_FILES}  
    99   ${LDC_GENERATED_HEADER_FILES}  
    100   PROPERTIES GENERATED 1 
     113add_definitions( 
     114    -DIN_LLVM 
     115    -D_DH 
     116    -DOPAQUE_VTBLS 
     117    -DUSE_BOEHM_GC=0 
     118    -DDMDV1 
     119    -DX86_REVERSE_PARAMS 
     120    -DX86_PASS_IN_EAX 
    101121) 
    102122 
    103 # mark all source as c++ 
    104 set_source_files_properties ( 
    105   ${LDC_SOURCE_FILES} ${LDC_GENERATED_SOURCE_FILES}  
    106   PROPERTIES LANGUAGE CXX 
     123if(UNIX) 
     124    add_definitions(-DPOSIX) 
     125    #set(CONF_SUFFIX conf) 
     126endif(UNIX) 
     127 
     128if(CMAKE_MINOR_VERSION LESS 6) 
     129    add_definitions(-DDEFAULT_TARGET_TRIPLE=\\"${DEFAULT_TARGET}\\") 
     130else(CMAKE_MINOR_VERSION LESS 6) 
     131    add_definitions(-DDEFAULT_TARGET_TRIPLE="${DEFAULT_TARGET}") 
     132endif(CMAKE_MINOR_VERSION LESS 6) 
     133 
     134add_executable(ldc ${LDC_SOURCE_FILES}) 
     135 
     136set_target_properties( 
     137    ldc PROPERTIES 
     138    RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin 
     139    COMPILE_FLAGS "${LLVM_CXXFLAGS} -Wno-deprecated" 
    107140) 
    108141 
    109 # build and run idgen and impcnvgen 
    110 set_source_files_properties ( 
    111   dmd/impcnvgen.c 
    112   dmd/idgen.c 
    113   PROPERTIES LANGUAGE CXX 
    114 
    115 add_executable (impcnvgen dmd/impcnvgen.c) 
    116 add_executable (idgen dmd/idgen.c) 
    117 set_target_properties (impcnvgen idgen PROPERTIES LINKER_LANGUAGE CXX) 
    118 get_target_property (IMPCNVGEN_EXE impcnvgen LOCATION) 
    119 get_target_property (IDGEN_EXE idgen LOCATION) 
    120 add_custom_command ( 
    121   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/impcnvtab.c 
    122   COMMAND ${IMPCNVGEN_EXE} 
    123   DEPENDS impcnvgen 
    124 
    125 add_custom_command ( 
    126   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/id.c ${CMAKE_CURRENT_BINARY_DIR}/id.h 
    127   COMMAND ${IDGEN_EXE} 
    128   DEPENDS idgen 
    129 
     142# LDFLAGS should actually be in target property LINK_FLAGS, but this works, and gets around linking problems 
     143target_link_libraries(ldc "${LLVM_LDFLAGS} ${LLVM_LIBS}") 
     144if(WIN32) 
     145    target_link_libraries(ldc psapi) 
     146    #set(CONF_SUFFIX ini) 
     147endif(WIN32) 
    130148 
    131 # ldc itself 
    132 add_executable (ldc ${LDC_SOURCE_FILES} ${LDC_GENERATED_SOURCE_FILES} ${LDC_GENERATED_HEADER_FILES}) 
     149# cmake pre 2.6 doesn't support the RUNTIME_OUTPUT_DIRECTORY target property 
     150if(CMAKE_MINOR_VERSION LESS 6) 
     151    get_target_property(LDC_LOC ldc LOCATION) 
     152    add_custom_command( 
     153        TARGET ldc 
     154        POST_BUILD 
     155        COMMAND ${CMAKE_COMMAND} -E copy ${LDC_LOC} ${PROJECT_BINARY_DIR}/bin/ 
     156        COMMAND ${CMAKE_COMMAND} -E remove ${LDC_LOC} 
     157    ) 
     158endif(CMAKE_MINOR_VERSION LESS 6) 
    133159 
    134  
    135 # setup DEFAULT_TARGET_TRIPLE 
    136 execute_process (COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/config.guess OUTPUT_VARIABLE DEFAULT_TARGET_TRIPLE_GUESS OUTPUT_STRIP_TRAILING_WHITESPACE) 
    137 set (DEFAULT_TARGET_TRIPLE ${DEFAULT_TARGET_TRIPLE_GUESS} CACHE STRING "the default target triple LDC should compile for") 
    138  
    139 # setup POSIX 
    140 if (WIN32) 
    141   set (POSIX_GUESS 0) 
    142 else (WIN32) 
    143   set (POSIX_GUESS 1) 
    144 endif (WIN32) 
    145 set (POSIX ${POSIX_GUESS} CACHE BOOL "is LDC build on POSIX?") 
    146  
    147 # setup defines 
    148 set (LDC_DEFINES 
    149 -DIN_LLVM 
    150 -D_DH 
    151 -DOPAQUE_VTBLS 
    152 -DUSE_BOEHM_GC=0 
    153 -DDMDV1 
    154 -DPOSIX=${POSIX} 
    155 -DDEFAULT_TARGET_TRIPLE=\\"${DEFAULT_TARGET_TRIPLE}\\" 
    156 -DX86_REVERSE_PARAMS=1 
    157 -DX86_PASS_IN_EAX=1) 
    158 execute_process (COMMAND llvm-config --cxxflags OUTPUT_VARIABLE LLVM_CXXFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE) 
    159 # passing CXXFLAGS here is not good style 
    160 add_definitions (${LDC_DEFINES} ${LLVM_CXXFLAGS}) 
    161  
    162 include_directories (. dmd ${CMAKE_CURRENT_BINARY_DIR}) 
    163  
    164 # this is hackish, but works 
    165 target_link_libraries (ldc "`llvm-config --ldflags` `llvm-config --libs bitwriter linker ipo instrumentation backend`") 
    166  
    167 #TODO: runtime build 
     160#configure_file(${PROJECT_SOURCE_DIR}/ldc.conf.in ${PROJECT_BINARY_DIR}/bin/ldc.${CONF_SUFFIX}) 
     161     
     162# TODO: runtime build 
     163# possible problems: 
     164#   with an oos-build, how to set up a working environment, with conf/ini and tango in place? 
     165#   patch tango? how to determine if that's already been done? 
     166#   std but compatible runtime build, or shared, which doesn't yet work on every platform 
     167#    
     168# TODO: install target 
     169# TODO: testrun 
Copyright © 2008, LDC Development Team.