Mercurial > projects > ldc
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 |