fix failures to byteswap images (in imageManager and imagepreview)
[openc2e.git] / CMakeLists.txt
blob35ed92421e0828a1e720a560f3aa87507c0bf78d
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)
151 INCLUDE(TestBigEndian)
152 INCLUDE(CheckIncludeFile)
153 TEST_BIG_ENDIAN(BIG_ENDIAN)
154 IF(BIG_ENDIAN)
155         ADD_DEFINITIONS("-DOC2E_BIG_ENDIAN=1")
156         CHECK_INCLUDE_FILE(byteswap.h HAVE_BYTESWAP_H)
157         IF(HAVE_BYTESWAP_H)
158                 ADD_DEFINITIONS("-DHAVE_BYTESWAP_H=1")
159         ELSE(HAVE_BYTESWAP_H)
160                 ADD_DEFINITIONS("-DHAVE_BYTESWAP_H=0")
161         ENDIF(HAVE_BYTESWAP_H)
162 ELSE(BIG_ENDIAN)
163         ADD_DEFINITIONS("-DOC2E_BIG_ENDIAN=0")
164 ENDIF(BIG_ENDIAN)
165 CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H)
166 IF(HAVE_STDINT_H)
167         ADD_DEFINITIONS("-DHAVE_STDINT_H=1")
168 ELSE(HAVE_STDINT_H)
169 ENDIF(HAVE_STDINT_H)
171 FIND_PACKAGE(SDL REQUIRED)
172 #FIND_PACKAGE(SDL_mixer REQUIRED)
173 FIND_PACKAGE(SDL_net REQUIRED)
174 FIND_PACKAGE(SDL_gfx REQUIRED)
175 IF(OPENC2E_USE_OPENAL MATCHES "^(YES|AUTO)$")
176         FIND_PACKAGE(OpenAL)
177 ELSE(OPENC2E_USE_OPENAL MATCHES "^(YES|AUTO)$")
178         SET(OPENAL_FOUND "NO")
179 ENDIF(OPENC2E_USE_OPENAL MATCHES "^(YES|AUTO)$")
180 FIND_PACKAGE(ALUT)
181 FIND_PACKAGE(Boost REQUIRED)
182 IF(OPENC2E_USE_QT)
183         find_package(Qt4 REQUIRED)
184 ENDIF(OPENC2E_USE_QT)
186 SET(USE_OPENAL "NO")
188 IF(OPENAL_FOUND STREQUAL "YES")
189     IF(ALUT_FOUND STREQUAL "YES")
190         SET(USE_OPENAL "YES")
191     ENDIF(ALUT_FOUND STREQUAL "YES")
192 ENDIF(OPENAL_FOUND STREQUAL "YES")
193      
194 IF(USE_OPENAL STREQUAL "NO")
195         IF (OPENC2E_USE_OPENAL MATCHES "^YES")
196                 MESSAGE(FATAL_ERROR "OpenAL not found.")
197         ENDIF (OPENC2E_USE_OPENAL MATCHES "^YES")
198         
199     SET(ALUT_INCLUDE_DIR "")
200     SET(OPENAL_INCLUDE_DIR "")
201     SET(ALUT_LIBRARY "")
202     SET(OPENAL_LIBRARY "")
203     SET(OPENAL_SRC "")
204     SET(OPENAL_DEF "")
205 ELSE(OPENAL_SRC STREQUAL "")
206     SET(OPENAL_SRC "OpenALBackend.cpp")
207     SET(OPENAL_DEF "-DOPENAL_SUPPORT")
208 ENDIF(OPENAL_SRC STREQUAL "")
210 IF(OPENC2E_USE_QT)
211         include(${QT_USE_FILE})
212         SET(SAVED_CMAKE_CURRENT_BINARY_DIR CMAKE_CURRENT_BINARY_DIR)
213         SET(CMAKE_CURRENT_BINARY_DIR ${GEN})
214         QT4_WRAP_UI(OPENC2E_QT_UIS_H ${OPENC2E_QT_UIS})
215         QT4_WRAP_CPP(OPENC2E_QT_MOC_SRCS ${OPENC2E_QT_MOC_HDRS})
216         SET(CMAKE_CURRENT_BINARY_DIR SAVED_CMAKE_CURRENT_BINARY_DIR)
217         SET(QT_DEF "-DQT_SUPPORT")
218 ENDIF(OPENC2E_USE_QT)
220 # Pass flags to the compiler
221 ADD_DEFINITIONS("-W -Wall -Wno-conversion -Wno-unused -pthread -D_REENTRANT -DYYERROR_VERBOSE ${OPENAL_DEF} ${QT_DEF}")
223 IF(OPENC2E_USE_QT)
224         SET(FRONTEND_SRCS ${OPENC2E_QT} ${OPENC2E_QT_UIS_H} ${OPENC2E_QT_MOC_SRCS})
225         SET(FRONTEND_LIBS ${QT_LIBRARIES})
226 ELSE(OPENC2E_USE_QT)
227         SET(FRONTEND_SRCS ${OPENC2E_SDL})
228         SET(FRONTEND_LIBS)
229 ENDIF(OPENC2E_USE_QT)
230 ADD_EXECUTABLE(openc2e ${OPENC2E_CORE} ${FRONTEND_SRCS} ${OPENAL_SRC} ${SER_SRCS})
232 TARGET_LINK_LIBRARIES(openc2e z m pthread 
233         ${SDL_LIBRARY}
234 #       ${SDLMIXER_LIBRARY} 
235         ${SDLNET_LIBRARY}
236         ${SDLGFX_LIBRARY}
237         ${OPENAL_LIBRARY}
238         ${ALUT_LIBRARY}
239         ${FRONTEND_LIBS}
240         boost_program_options-mt
241         boost_serialization-mt
242         boost_filesystem-mt
243         boost_thread-mt
244         boost_regex-mt
245         )
247 LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
249 INCLUDE_DIRECTORIES(BEFORE
250         ${GEN}
251         ${SRC}
252         ${SDL_INCLUDE_DIR}
253 #       ${SDLMIXER_INCLUDE_DIR}
254         ${SDLNET_INCLUDE_DIR}
255         ${SDLGFX_INCLUDE_DIR}
256         ${OPENAL_INCLUDE_DIR}
257         ${ALUT_INCLUDE_DIR}
258         ${Boost_INCLUDE_DIR}
259         )
261 FILE(GLOB CAOSVM_FILES ${SRC}/caosVM_*.cpp)
262 ADD_CUSTOM_COMMAND(
263         OUTPUT ${GEN}/commandinfo.yml
264         COMMAND perl parsedocs.pl ${CAOSVM_FILES} > ${GEN}/commandinfo.yml
265         DEPENDS parsedocs.pl ${CAOSVM_FILES}
266         WORKING_DIRECTORY ${SRC})
268 ADD_CUSTOM_COMMAND(
269         OUTPUT ${BIN}/caosdocs.html
270         COMMAND perl writehtml.pl ${GEN}/commandinfo.yml > ${BIN}/caosdocs.html
271         DEPENDS writehtml.pl ${GEN}/commandinfo.yml
272         WORKING_DIRECTORY ${SRC})
273 ADD_CUSTOM_COMMAND(
274         OUTPUT ${BIN}/docs.css
275         COMMAND cp docs.css ${BIN}/docs.css
276         DEPENDS docs.css
277         WORKING_DIRECTORY ${SRC})
278 ADD_CUSTOM_COMMAND(
279         OUTPUT ${BIN}/openc2e.6
280         COMMAND pod2man --center="Openc2e Documentation" --section=6 ${SRC}/openc2e.pod ${BIN}/openc2e.6
281         DEPENDS openc2e.pod
282         )
283 # it seems these ADD_CUSTOM_COMMANDS for flex and bison could be made
284 # into a macro... e.g. FLEX(file1) FLEX(file2) etc...
285 ADD_CUSTOM_COMMAND(
286         OUTPUT ${GEN}/cataloglexer.cpp
287         COMMAND re2c -o ${GEN}/cataloglexer.cpp ${SRC}/cataloglexer.re2c
288         DEPENDS ${SRC}/cataloglexer.re2c
289         WORKING_DIRECTORY ${SRC})
291 ADD_CUSTOM_COMMAND(
292         OUTPUT ${GEN}/catalogue.tab.cpp ${GEN}/catalogue.tab.hpp
293         COMMAND bison -d --name-prefix=cata --file-prefix="${GEN}/catalogue" catalogue.ypp
294         DEPENDS catalogue.ypp
295         WORKING_DIRECTORY ${SRC})
297 ADD_CUSTOM_COMMAND(
298         OUTPUT ${GEN}/cmddata.cpp
299         COMMAND perl writecmds.pl ${GEN}/commandinfo.yml > ${GEN}/cmddata.cpp
300         DEPENDS ${GEN}/commandinfo.yml writecmds.pl
301         WORKING_DIRECTORY ${SRC})
303 ADD_CUSTOM_COMMAND(
304         OUTPUT ${GEN}/caoslexer.cpp
305         COMMAND re2c -o ${GEN}/caoslexer.cpp ${SRC}/caoslexer.re2c
306         DEPENDS ${SRC}/caoslexer.re2c
307         WORKING_DIRECTORY ${SRC})
309 #ADD_CUSTOM_COMMAND(
310 #       OUTPUT ${GEN}/lex.mng.cpp ${GEN}/lex.mng.h
311 #       COMMAND flex -+ --prefix=mng -d -o ${GEN}/lex.mng.cpp --header-file=${GEN}/lex.mng.h mng.l
312 #       DEPENDS mng.l
313 #       WORKING_DIRECTORY ${SRC})
315 #ADD_CUSTOM_COMMAND(
316 #       OUTPUT ${GEN}/mngparser.tab.cpp ${GEN}/mngparser.tab.hpp
317 #       COMMAND bison -d --name-prefix=mng --file-prefix="${GEN}/mngparser" mngparser.ypp
318 #       DEPENDS mngparser.ypp
319 #       WORKING_DIRECTORY ${SRC})
321 ADD_CUSTOM_TARGET(docs ALL DEPENDS ${BIN}/caosdocs.html ${BIN}/docs.css ${BIN}/openc2e.6)
322 ADD_CUSTOM_TARGET(generated DEPENDS
323         ${GEN}/catalogue.tab.cpp ${GEN}/catalogue.tab.hpp
324         ${GEN}/caoslexer.cpp
325         ${GEN}/cataloglexer.cpp
326         ${GEN}/cmddata.cpp
327         #       ${GEN}/lex.mng.cpp ${GEN}/lex.mng.h
328         #       ${GEN}/mngparser.tab.cpp ${GEN}/mngparser.tab.hpp