comparison CMakeLists.txt @ 753:405e40f20ef9

Switch to Elrood's rewritten CMakeLists.txt.
author Christian Kamm <kamm incasoftware de>
date Wed, 05 Nov 2008 16:53:03 +0100
parents d05fc504a3a0
children f04dde6e882c
comparison
equal deleted inserted replaced
752:2d7bcfa68128 753:405e40f20ef9
1 project (ldc) 1 project(ldc)
2 2
3 set (LDC_SOURCE_FILES 3 cmake_minimum_required(VERSION 2.6)
4 dmd/access.c 4 # actually, 2.4 will work, with a warning
5 dmd/array.c 5 # if we required 2.4, 2.6+ would switch to a compatibility mode and cause problems on 2.6+ specifics
6 dmd/arrayop.c 6
7 dmd/attrib.c 7 include(FindPerl)
8 dmd/cast.c 8 if(NOT PERL)
9 dmd/class.c 9 message(FATAL_ERROR "perl not found")
10 dmd/clone.c 10 endif(NOT PERL)
11 dmd/cond.c 11
12 dmd/constfold.c 12 set(LLVM_INSTDIR CACHE PATH "LLVM installation directory")
13 dmd/dchar.c 13
14 dmd/declaration.c 14 find_program(LLVM_CONFIG llvm-config ${LLVM_INSTDIR}/bin DOC "path to llvm-config tool")
15 dmd/delegatize.c 15 if(NOT LLVM_CONFIG)
16 dmd/doc.c 16 message(FATAL_ERROR "llvm-config not found")
17 dmd/dsymbol.c 17 endif(NOT LLVM_CONFIG)
18 dmd/dump.c 18
19 dmd/entity.c 19 execute_process(
20 dmd/enum.c 20 COMMAND ${PERL_EXECUTABLE} ${LLVM_CONFIG} --host-target
21 dmd/expression.c 21 OUTPUT_VARIABLE HOST_TARGET
22 dmd/func.c 22 OUTPUT_STRIP_TRAILING_WHITESPACE
23 dmd/gnuc.c 23 )
24 dmd/hdrgen.c 24 execute_process(
25 dmd/html.c 25 COMMAND ${PERL_EXECUTABLE} ${LLVM_CONFIG} --cxxflags
26 dmd/identifier.c 26 OUTPUT_VARIABLE LLVM_CXXFLAGS
27 dmd/import.c 27 OUTPUT_STRIP_TRAILING_WHITESPACE
28 dmd/inifile.c 28 )
29 dmd/init.c 29 execute_process(
30 dmd/inline.c 30 COMMAND ${PERL_EXECUTABLE} ${LLVM_CONFIG} --ldflags
31 dmd/interpret.c 31 OUTPUT_VARIABLE LLVM_LDFLAGS
32 dmd/lexer.c 32 OUTPUT_STRIP_TRAILING_WHITESPACE
33 dmd/lstring.c 33 )
34 dmd/macro.c 34 execute_process(
35 dmd/man.c 35 COMMAND ${PERL_EXECUTABLE} ${LLVM_CONFIG} --libfiles bitwriter linker ipo instrumentation backend
36 dmd/mangle.c 36 OUTPUT_VARIABLE LLVM_LIBS
37 dmd/mars.c 37 OUTPUT_STRIP_TRAILING_WHITESPACE
38 dmd/mem.c 38 )
39 dmd/module.c 39 # get llvm's install dir. a little hackish, we could do something like llvm-config --prefix, but this does as well
40 dmd/mtype.c 40 string(REPLACE "/bin/llvm-config" "" LLVM_INSTDIR ${LLVM_CONFIG})
41 dmd/opover.c 41
42 dmd/optimize.c 42 file(MAKE_DIRECTORY
43 dmd/parse.c 43 ${PROJECT_BINARY_DIR}/bin
44 dmd/root.c 44 ${PROJECT_BINARY_DIR}/dmd
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
86 ) 45 )
87 46
88 set (LDC_GENERATED_SOURCE_FILES 47 # idgen and impcnvgen
89 ${CMAKE_CURRENT_BINARY_DIR}/impcnvtab.c 48 set_source_files_properties(
90 ${CMAKE_CURRENT_BINARY_DIR}/id.c 49 dmd/idgen.c
50 dmd/impcnvgen.c
51 PROPERTIES LANGUAGE CXX
91 ) 52 )
92 set (LDC_GENERATED_HEADER_FILES 53 add_executable(idgen dmd/idgen.c)
93 ${CMAKE_CURRENT_BINARY_DIR}/id.h 54 add_executable(impcnvgen dmd/impcnvgen.c)
55 # cmake 2.4
56 set_target_properties(
57 idgen impcnvgen PROPERTIES
58 LINKER_LANGUAGE CXX
59 )
60 get_target_property(IDGEN_LOC idgen LOCATION)
61 get_target_property(IMPCNVGEN_LOC impcnvgen LOCATION)
62 #
63 add_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 )
73 add_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 )
81 set(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
88 set(DEFAULT_TARGET ${HOST_TARGET} CACHE STRING "default target")
89
90 include_directories(. dmd ${PROJECT_BINARY_DIR}/dmd ${LLVM_INSTDIR}/include)
91
92 file(GLOB FE_SRC dmd/*.c)
93 file(GLOB GEN_SRC gen/*.cpp)
94 file(GLOB IR_SRC ir/*.cpp)
95 # exclude idgen and impcnvgen and generated sources, just in case
96 list(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 )
102 set(LDC_SOURCE_FILES
103 ${LDC_GENERATED}
104 ${FE_SRC}
105 ${GEN_SRC}
106 ${IR_SRC}
107 )
108 set_source_files_properties(
109 ${LDC_SOURCE_FILES} PROPERTIES
110 LANGUAGE CXX
94 ) 111 )
95 112
96 # some sources are generated 113 add_definitions(
97 set_source_files_properties ( 114 -DIN_LLVM
98 ${LDC_GENERATED_SOURCE_FILES} 115 -D_DH
99 ${LDC_GENERATED_HEADER_FILES} 116 -DOPAQUE_VTBLS
100 PROPERTIES GENERATED 1 117 -DUSE_BOEHM_GC=0
118 -DDMDV1
119 -DX86_REVERSE_PARAMS
120 -DX86_PASS_IN_EAX
101 ) 121 )
102 122
103 # mark all source as c++ 123 if(UNIX)
104 set_source_files_properties ( 124 add_definitions(-DPOSIX)
105 ${LDC_SOURCE_FILES} ${LDC_GENERATED_SOURCE_FILES} 125 #set(CONF_SUFFIX conf)
106 PROPERTIES LANGUAGE CXX 126 endif(UNIX)
127
128 if(CMAKE_MINOR_VERSION LESS 6)
129 add_definitions(-DDEFAULT_TARGET_TRIPLE=\\"${DEFAULT_TARGET}\\")
130 else(CMAKE_MINOR_VERSION LESS 6)
131 add_definitions(-DDEFAULT_TARGET_TRIPLE="${DEFAULT_TARGET}")
132 endif(CMAKE_MINOR_VERSION LESS 6)
133
134 add_executable(ldc ${LDC_SOURCE_FILES})
135
136 set_target_properties(
137 ldc PROPERTIES
138 RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin
139 COMPILE_FLAGS "${LLVM_CXXFLAGS} -Wno-deprecated"
107 ) 140 )
108 141
109 # build and run idgen and impcnvgen 142 # LDFLAGS should actually be in target property LINK_FLAGS, but this works, and gets around linking problems
110 set_source_files_properties ( 143 target_link_libraries(ldc "${LLVM_LDFLAGS} ${LLVM_LIBS}")
111 dmd/impcnvgen.c 144 if(WIN32)
112 dmd/idgen.c 145 target_link_libraries(ldc psapi)
113 PROPERTIES LANGUAGE CXX 146 #set(CONF_SUFFIX ini)
114 ) 147 endif(WIN32)
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 )
130 148
131 # ldc itself 149 # cmake pre 2.6 doesn't support the RUNTIME_OUTPUT_DIRECTORY target property
132 add_executable (ldc ${LDC_SOURCE_FILES} ${LDC_GENERATED_SOURCE_FILES} ${LDC_GENERATED_HEADER_FILES}) 150 if(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 )
158 endif(CMAKE_MINOR_VERSION LESS 6)
133 159
134 160 #configure_file(${PROJECT_SOURCE_DIR}/ldc.conf.in ${PROJECT_BINARY_DIR}/bin/ldc.${CONF_SUFFIX})
135 # setup DEFAULT_TARGET_TRIPLE 161
136 execute_process (COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/config.guess OUTPUT_VARIABLE DEFAULT_TARGET_TRIPLE_GUESS OUTPUT_STRIP_TRAILING_WHITESPACE) 162 # TODO: runtime build
137 set (DEFAULT_TARGET_TRIPLE ${DEFAULT_TARGET_TRIPLE_GUESS} CACHE STRING "the default target triple LDC should compile for") 163 # possible problems:
138 164 # with an oos-build, how to set up a working environment, with conf/ini and tango in place?
139 # setup POSIX 165 # patch tango? how to determine if that's already been done?
140 if (WIN32) 166 # std but compatible runtime build, or shared, which doesn't yet work on every platform
141 set (POSIX_GUESS 0) 167 #
142 else (WIN32) 168 # TODO: install target
143 set (POSIX_GUESS 1) 169 # TODO: testrun
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