allow startup without any resource files present (ie: don't require pointer creation...
[openc2e.git] / CMakeLists.txt
blob047d90e3af128a10f5b0cc3edb579b6f84348c71
1 PROJECT (OPENC2E CXX C)
3 SET(SRC "${OPENC2E_SOURCE_DIR}")
4 SET(BIN "${OPENC2E_BINARY_DIR}")
5 SET(GEN "${BIN}/generated")
6 EXECUTE_PROCESS(COMMAND mkdir "${GEN}" -p)
8 SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS 1)
9 SET(CMAKE_MODULE_PATH "${SRC}/cmake")
11 SET(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "The type of build to perform. Valid values are: RelWithDebInfo (default), Debug, Release, MinSizeRel")
12 IF (CMAKE_BUILD_TYPE STREQUAL "")
13         SET(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "The type of build to perform. Valid values are: RelWithDebInfo (default), Debug, Release, MinSizeRel" FORCE)
14 ENDIF (CMAKE_BUILD_TYPE STREQUAL "")
16 SET(OPENC2E_USE_QT "TRUE" CACHE BOOL "Build the qt GUI")
17 SET(OPENC2E_USE_OPENAL "AUTO" CACHE STRING "Use OpenAL (YES/NO/AUTO)")
18 IF (OPENC2E_USE_OPENAL MATCHES "^(YES|NO|AUTO)$")
19 ELSE (OPENC2E_USE_OPENAL MATCHES "^(YES|NO|AUTO)$")
20         MESSAGE(SEND_ERROR "The value of OPENC2E_USE_OPENAL must be YES, NO, or AUTO.")
21 ENDIF (OPENC2E_USE_OPENAL MATCHES "^(YES|NO|AUTO)$")
23 SET(OPENC2E_USE_SERIALIZATION "FALSE" CACHE BOOL "Build the experimental serialization code")
24 MARK_AS_ADVANCED(FORCE OPENC2E_USE_SERIALIZATION)
25 IF (OPENC2E_USE_SERIALIZATION)
26         SET(SER_SRCS caosVM_ser_real.cpp)
27 ELSE (OPENC2E_USE_SERIALIZATION)
28         SET(SER_SRCS caosVM_ser_stub.cpp)
29 ENDIF (OPENC2E_USE_SERIALIZATION)
32 SET(OPENC2E_CORE
33         Agent.cpp
34         AgentHelpers.cpp
35         AgentRef.cpp
36         attFile.cpp
37         Backend.cpp
38         Blackboard.cpp
39         blkImage.cpp
40         bmpImage.cpp
41         bytecode.cpp
42         c16Image.cpp
43         c2eBrain.cpp
44         CallButton.cpp
45         Camera.cpp
46         caosScript.cpp
47         caosVar.cpp
48         caosVM_agent.cpp
49         caosVM_camera.cpp
50         caosVM_compound.cpp
51         caosVM_core.cpp
52         caosVM_creatures.cpp
53         caosVM_debug.cpp
54         caosVM_files.cpp
55         caosVM_flow.cpp
56         caosVM_genetics.cpp
57         caosVM_history.cpp
58         caosVM_input.cpp
59         caosVM_map.cpp
60         caosVM_motion.cpp
61         caosVM_net.cpp
62         caosVM.cpp
63         caosVM_ports.cpp
64         caosVM_resources.cpp
65         caosVM_scripts.cpp
66         caosVM_sounds.cpp
67         caosVM_time.cpp
68         caosVM_variables.cpp
69         caosVM_vectors.cpp
70         caosVM_vehicles.cpp
71         caosVM_world.cpp
72         ${GEN}/cataloglexer.cpp
73         Catalogue.cpp
74         ${GEN}/catalogue.tab.cpp
75         ${GEN}/cmddata.cpp
76         cobFile.cpp
77         CompoundAgent.cpp
78         CompoundPart.cpp
79         Creature.cpp
80         CreatureAgent.cpp
81         creaturesImage.cpp
82         dialect.cpp
83         Engine.cpp
84         exceptions.cpp
85         fileSwapper.cpp
86         genomeFile.cpp
87         historyManager.cpp
88         imageManager.cpp
89         #       ${GEN}/lex.mng.cpp
90         ${GEN}/caoslexer.cpp
91         Lift.cpp
92         Map.cpp
93         MetaRoom.cpp
94         mmapifstream.cpp
95         #       mngfile.cpp
96         #       ${GEN}/mngparser.tab.cpp
97         oldBrain.cpp
98         PathResolver.cpp
99         physics.cpp
100         PointerAgent.cpp
101         pray.cpp
102         prayManager.cpp
103         renderable.cpp
104         Room.cpp
105         Scriptorium.cpp
106         SDLBackend.cpp
107         SFCFile.cpp
108         SimpleAgent.cpp
109         SkeletalCreature.cpp
110         sprImage.cpp
111         streamutils.cpp
112         Vehicle.cpp
113         World.cpp
114         main.cpp
115         util.cpp
118 SET(OPENC2E_SDL
119         # all in the main openc2e listing
120         # XXX: non-sdl-based backends?
123 SET(OPENC2E_QT
124         qtgui/qtopenc2e.cpp
125         qtgui/openc2eview.cpp
126         qtgui/AgentInjector.cpp
127         qtgui/BrainViewer.cpp
128         qtgui/imagepreview.cpp
129         qtgui/c1cobfile.cpp
130         qtgui/QtBackend.cpp
131         qtgui/GraphWidget.cpp
132         qtgui/CreatureGrapher.cpp
133         tools/braininavat/brainview.cpp)
135 SET(OPENC2E_QT_MOC_HDRS
136         qtgui/qtopenc2e.h
137         qtgui/openc2eview.h
138         qtgui/AgentInjector.h
139         qtgui/BrainViewer.h
140         qtgui/imagepreview.h
141         qtgui/GraphWidget.h
142         qtgui/CreatureGrapher.h
143         tools/braininavat/brainview.h)
145 SET(OPENC2E_QT_UIS
146         qtgui/agents.ui)
150 cmake_minimum_required(VERSION 2.4.0)
152 FIND_PACKAGE(SDL REQUIRED)
153 FIND_PACKAGE(SDL_mixer REQUIRED)
154 FIND_PACKAGE(SDL_net REQUIRED)
155 FIND_PACKAGE(SDL_gfx REQUIRED)
156 IF(OPENC2E_USE_OPENAL MATCHES "^(YES|AUTO)$")
157         FIND_PACKAGE(OpenAL)
158 ELSE(OPENC2E_USE_OPENAL MATCHES "^(YES|AUTO)$")
159         SET(OPENAL_FOUND "NO")
160 ENDIF(OPENC2E_USE_OPENAL MATCHES "^(YES|AUTO)$")
161 FIND_PACKAGE(ALUT)
162 FIND_PACKAGE(Boost REQUIRED)
163 IF(OPENC2E_USE_QT)
164         find_package(Qt4 REQUIRED)
165 ENDIF(OPENC2E_USE_QT)
167 SET(USE_OPENAL "NO")
169 IF(OPENAL_FOUND STREQUAL "YES")
170     IF(ALUT_FOUND STREQUAL "YES")
171         SET(USE_OPENAL "YES")
172     ENDIF(ALUT_FOUND STREQUAL "YES")
173 ENDIF(OPENAL_FOUND STREQUAL "YES")
174      
175 IF(USE_OPENAL STREQUAL "NO")
176         IF (OPENC2E_USE_OPENAL MATCHES "^YES")
177                 MESSAGE(FATAL_ERROR "OpenAL not found.")
178         ENDIF (OPENC2E_USE_OPENAL MATCHES "^YES")
179         
180     SET(ALUT_INCLUDE_DIR "")
181     SET(OPENAL_INCLUDE_DIR "")
182     SET(ALUT_LIBRARY "")
183     SET(OPENAL_LIBRARY "")
184     SET(OPENAL_SRC "")
185     SET(OPENAL_DEF "")
186 ELSE(OPENAL_SRC STREQUAL "")
187     SET(OPENAL_SRC "OpenALBackend.cpp")
188     SET(OPENAL_DEF "-DOPENAL_SUPPORT")
189 ENDIF(OPENAL_SRC STREQUAL "")
191 IF(OPENC2E_USE_QT)
192         include(${QT_USE_FILE})
193         SET(SAVED_CMAKE_CURRENT_BINARY_DIR CMAKE_CURRENT_BINARY_DIR)
194         SET(CMAKE_CURRENT_BINARY_DIR ${GEN})
195         QT4_WRAP_UI(OPENC2E_QT_UIS_H ${OPENC2E_QT_UIS})
196         QT4_WRAP_CPP(OPENC2E_QT_MOC_SRCS ${OPENC2E_QT_MOC_HDRS})
197         SET(CMAKE_CURRENT_BINARY_DIR SAVED_CMAKE_CURRENT_BINARY_DIR)
198         SET(QT_DEF "-DQT_SUPPORT")
199 ENDIF(OPENC2E_USE_QT)
201 # Pass flags to the compiler
202 ADD_DEFINITIONS("-W -Wall -Wno-conversion -Wno-unused -pthread -D_REENTRANT -DYYERROR_VERBOSE ${OPENAL_DEF} ${QT_DEF}")
204 IF(OPENC2E_USE_QT)
205         SET(FRONTEND_SRCS ${OPENC2E_QT} ${OPENC2E_QT_UIS_H} ${OPENC2E_QT_MOC_SRCS})
206         SET(FRONTEND_LIBS ${QT_LIBRARIES})
207 ELSE(OPENC2E_USE_QT)
208         SET(FRONTEND_SRCS ${OPENC2E_SDL})
209         SET(FRONTEND_LIBS)
210 ENDIF(OPENC2E_USE_QT)
211 ADD_EXECUTABLE(openc2e ${OPENC2E_CORE} ${FRONTEND_SRCS} ${OPENAL_SRC} ${SER_SRCS})
213 TARGET_LINK_LIBRARIES(openc2e z m pthread 
214         ${SDL_LIBRARY}
215         ${SDLMIXER_LIBRARY} 
216         ${SDLNET_LIBRARY}
217         ${SDLGFX_LIBRARY}
218         ${OPENAL_LIBRARY}
219         ${ALUT_LIBRARY}
220         ${FRONTEND_LIBS}
221         boost_program_options-mt
222         boost_serialization-mt
223         boost_filesystem-mt
224         boost_thread-mt
225         boost_regex-mt
226         )
228 INCLUDE_DIRECTORIES(BEFORE
229         ${GEN}
230         ${SRC}
231         ${SDL_INCLUDE_DIR}
232         ${SDLMIXER_INCLUDE_DIR}
233         ${SDLNET_INCLUDE_DIR}
234         ${SDLGFX_INCLUDE_DIR}
235         ${OPENAL_INCLUDE_DIR}
236         ${ALUT_INCLUDE_DIR}
237         )
239 FILE(GLOB CAOSVM_FILES ${SRC}/caosVM_*.cpp)
240 ADD_CUSTOM_COMMAND(
241         OUTPUT ${GEN}/commandinfo.yml
242         COMMAND perl parsedocs.pl ${CAOSVM_FILES} > ${GEN}/commandinfo.yml
243         DEPENDS parsedocs.pl ${CAOSVM_FILES}
244         WORKING_DIRECTORY ${SRC})
246 ADD_CUSTOM_COMMAND(
247         OUTPUT ${BIN}/caosdocs.html
248         COMMAND perl writehtml.pl ${GEN}/commandinfo.yml > ${BIN}/caosdocs.html
249         DEPENDS writehtml.pl ${GEN}/commandinfo.yml
250         WORKING_DIRECTORY ${SRC})
251 ADD_CUSTOM_COMMAND(
252         OUTPUT ${BIN}/docs.css
253         COMMAND cp docs.css ${BIN}/docs.css -f
254         DEPENDS docs.css
255         WORKING_DIRECTORY ${SRC})
256 ADD_CUSTOM_COMMAND(
257         OUTPUT ${BIN}/openc2e.6
258         COMMAND pod2man --center="Openc2e Documentation" --section=6 ${SRC}/openc2e.pod ${BIN}/openc2e.6
259         DEPENDS openc2e.pod
260         )
261 # it seems these ADD_CUSTOM_COMMANDS for flex and bison could be made
262 # into a macro... e.g. FLEX(file1) FLEX(file2) etc...
263 ADD_CUSTOM_COMMAND(
264         OUTPUT ${GEN}/cataloglexer.cpp
265         COMMAND re2c -o ${GEN}/cataloglexer.cpp ${SRC}/cataloglexer.re2c
266         DEPENDS ${SRC}/cataloglexer.re2c
267         WORKING_DIRECTORY ${SRC})
269 ADD_CUSTOM_COMMAND(
270         OUTPUT ${GEN}/catalogue.tab.cpp ${GEN}/catalogue.tab.hpp
271         COMMAND bison -d --name-prefix=cata --file-prefix="${GEN}/catalogue" catalogue.ypp
272         DEPENDS catalogue.ypp
273         WORKING_DIRECTORY ${SRC})
275 ADD_CUSTOM_COMMAND(
276         OUTPUT ${GEN}/cmddata.cpp
277         COMMAND perl writecmds.pl ${GEN}/commandinfo.yml > ${GEN}/cmddata.cpp
278         DEPENDS ${GEN}/commandinfo.yml writecmds.pl
279         WORKING_DIRECTORY ${SRC})
281 ADD_CUSTOM_COMMAND(
282         OUTPUT ${GEN}/caoslexer.cpp
283         COMMAND re2c -o ${GEN}/caoslexer.cpp ${SRC}/caoslexer.re2c
284         DEPENDS ${SRC}/caoslexer.re2c
285         WORKING_DIRECTORY ${SRC})
287 #ADD_CUSTOM_COMMAND(
288 #       OUTPUT ${GEN}/lex.mng.cpp ${GEN}/lex.mng.h
289 #       COMMAND flex -+ --prefix=mng -d -o ${GEN}/lex.mng.cpp --header-file=${GEN}/lex.mng.h mng.l
290 #       DEPENDS mng.l
291 #       WORKING_DIRECTORY ${SRC})
293 #ADD_CUSTOM_COMMAND(
294 #       OUTPUT ${GEN}/mngparser.tab.cpp ${GEN}/mngparser.tab.hpp
295 #       COMMAND bison -d --name-prefix=mng --file-prefix="${GEN}/mngparser" mngparser.ypp
296 #       DEPENDS mngparser.ypp
297 #       WORKING_DIRECTORY ${SRC})
299 ADD_CUSTOM_TARGET(docs ALL DEPENDS ${BIN}/caosdocs.html ${BIN}/docs.css ${BIN}/openc2e.6)
300 ADD_CUSTOM_TARGET(generated DEPENDS
301         ${GEN}/catalogue.tab.cpp ${GEN}/catalogue.tab.hpp
302         ${GEN}/caoslexer.cpp
303         ${GEN}/cataloglexer.cpp
304         ${GEN}/cmddata.cpp
305         #       ${GEN}/lex.mng.cpp ${GEN}/lex.mng.h
306         #       ${GEN}/mngparser.tab.cpp ${GEN}/mngparser.tab.hpp