]> icculus.org git repositories - taylor/freespace2.git/blob - CMakeLists.txt
merge updated pxo code and related fixes
[taylor/freespace2.git] / CMakeLists.txt
1
2 project(freespace2)
3
4 cmake_minimum_required(VERSION 2.8)
5 cmake_policy(VERSION 2.8)
6
7 if(POLICY CMP0043)
8   cmake_policy(SET CMP0043 OLD)
9 endif()
10
11 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
12
13 include(CreateSourceGroups)
14
15
16 # ##############################################################################
17
18 option(FS1 "Build original FreeSpace" OFF)
19 option(DEMO "Create demo build" OFF)
20
21 if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
22   message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.")
23   set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build." FORCE)
24   # Set the possible values of build type for cmake-gui
25   set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "RelWithDebInfo")
26 endif()
27
28
29 if(FS1)
30   add_definitions(-DMAKE_FS1)
31
32   if(DEMO)
33         add_definitions(-DDEMO -DFS1_DEMO)
34   endif()
35 else()
36   if(DEMO)
37         add_definitions(-DFS2_DEMO)
38   endif()
39 endif()
40
41 if(NOT WIN32)
42   set(PLATFORM_LIBRARIES "")
43
44   add_definitions(-DPLAT_UNIX)
45
46   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
47   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wshadow")
48   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsigned-char")
49
50   set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -g -O2 -DRELEASE_REAL")
51   set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -DRELEASE_REAL")
52   set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g3")
53 else()
54   set(SDL2DIR "${CMAKE_SOURCE_DIR}/../Support/SDL2" CACHE PATH "Path to SDL2")
55   set(OPENALDIR "${CMAKE_SOURCE_DIR}/../Support/OpenAL" CACHE PATH "Path to OpenAL")
56   set(LWSDIR "${CMAKE_SOURCE_DIR}/../Support/libwebsockets" CACHE PATH "Path to libwebsockets")
57   set(WXWIDGETSDIR "${CMAKE_SOURCE_DIR}/../Support/wxWidgets" CACHE PATH "Path to wxWidgets")
58   set(ANGLEDIR "${CMAKE_SOURCE_DIR}/../Support/ANGLE" CACHE PATH "Path to ANGLE")
59
60   set(PLATFORM_LIBRARIES
61         ws2_32.lib
62         ${ANGLEDIR}/lib/libEGL.lib
63         ${ANGLEDIR}/lib/libGLESv2.lib
64   )
65
66   add_definitions(/D _CRT_SECURE_NO_WARNINGS)
67
68   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
69   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4100") # unreferenced parameter
70   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4127") # conditional expression is constant: do { } while (0)
71   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4996") # deprecated functions: fopen, fileno, ...
72
73   set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT /D RELEASE_REAL")
74   set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT /D RELEASE_REAL")
75   set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
76 endif()
77
78 set(BIN_SUFFIX "")
79
80 if(NOT FS1)
81         set(BIN_SUFFIX "2")
82 endif()
83
84 if(DEMO)
85         set(BIN_SUFFIX "${BIN_SUFFIX}demo")
86 endif()
87
88 find_package(SDL2 "2.0.5" REQUIRED)
89 find_package(OpenGL REQUIRED)
90 find_package(OpenAL REQUIRED)
91 find_package(LibWebSockets REQUIRED)
92
93 find_package(wxWidgets COMPONENTS core base gl net)
94 include(${wxWidgets_USE_FILE})
95
96 # ##############################################################################
97
98
99 include_directories(
100   ${PROJECT_SOURCE_DIR}/include
101   ${CMAKE_BINARY_DIR}/include
102   ${SDL2_INCLUDE_DIR}
103   ${OPENAL_INCLUDE_DIR}
104   ${LIBWEBSOCKETS_INCLUDE_DIR}
105   ${wxWidgets_INCLUDE_DIRS}
106 )
107
108
109 add_subdirectory(src)
110 add_subdirectory(include)
111
112
113 # ##############################################################################
114 #
115
116 #
117 # custom target for source tree version info
118 #
119
120 add_custom_target(buildver
121   COMMAND ${CMAKE_COMMAND}
122     -DSOURCE_DIR=${CMAKE_SOURCE_DIR}
123     -DBINARY_DIR=${CMAKE_BINARY_DIR}
124     -P ${CMAKE_SOURCE_DIR}/cmake/GitInfo.cmake
125   WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
126   SOURCES ${CMAKE_SOURCE_DIR}/cmake/GitInfo.cmake
127 )
128
129 #
130 # main code/game library
131 #
132
133 add_library(code
134   STATIC
135   ${code_SOURCE}
136   ${code_HEADERS}
137   ${platform_SOURCE}
138   ${platform_HEADERS}
139 )
140
141 CreateSourceGroups(${code_SOURCE} ${platform_SOURCE})
142
143 add_dependencies(code
144   buildver
145 )
146
147 #
148 # the game itself
149 #
150
151 set(FS_BINARY "fs${BIN_SUFFIX}")
152
153 add_executable(${FS_BINARY}
154   WIN32
155   ${freespace_SOURCE}
156   ${freespace_HEADERS}
157 )
158
159 CreateSourceGroups(${freespace_SOURCE})
160
161 target_link_libraries(
162   ${FS_BINARY}
163   code
164   ${SDL2_LIBRARY}
165   ${OPENGL_LIBRARIES}
166   ${OPENAL_LIBRARY}
167   ${LIBWEBSOCKETS_LIBRARIES}
168   ${PLATFORM_LIBRARIES}
169 )
170
171 if(FS1)
172   set_target_properties(${FS_BINARY} PROPERTIES PROJECT_LABEL "Freespace")
173 else()
174   set_target_properties(${FS_BINARY} PROPERTIES PROJECT_LABEL "Freespace2")
175 endif()
176
177 #
178 # launcher
179 #
180
181 set(LAUNCHER_BINARY "freespace${BIN_SUFFIX}")
182
183 add_executable(${LAUNCHER_BINARY}
184   WIN32
185   ${launcher_SOURCE}
186   ${launcher_HEADERS}
187 )
188
189 CreateSourceGroups(${launcher_SOURCE})
190
191 target_link_libraries(
192   ${LAUNCHER_BINARY}
193   ${SDL2_LIBRARY}
194   ${OPENGL_LIBRARIES}
195   ${OPENAL_LIBRARY}
196   ${wxWidgets_LIBRARIES}
197   ${PLATFORM_LIBRARIES}
198 )
199
200 set_target_properties(${LAUNCHER_BINARY} PROPERTIES PROJECT_LABEL "Launcher")
201
202 # wxWidgets appears to need c++11 for one or more headers
203 if(NOT WIN32)
204   set_target_properties(${LAUNCHER_BINARY} PROPERTIES COMPILE_FLAGS -std=c++11)
205 endif()
206
207 #
208 # standalone server GUI
209 #
210
211 # Not for FS1 Demo
212 if(NOT FS1 OR NOT DEMO)
213         if(FS1)
214           set(STANDALONE_BINARY fsstandalone)
215         else()
216           set(STANDALONE_BINARY fs2standalone)
217         endif()
218
219         add_executable(${STANDALONE_BINARY}
220           WIN32
221           ${standalone_SOURCE}
222           ${standalone_HEADERS}
223         )
224
225         CreateSourceGroups(${standalone_SOURCE})
226
227         target_link_libraries(
228           ${STANDALONE_BINARY}
229           ${SDL2_LIBRARY}
230           ${wxWidgets_LIBRARIES}
231           ${LIBWEBSOCKETS_LIBRARIES}
232           ${PLATFORM_LIBRARIES}
233         )
234
235         set_target_properties(${STANDALONE_BINARY} PROPERTIES PROJECT_LABEL "Standalone")
236
237         # wxWidgets appears to need c++11 for one or more headers
238         if(NOT WIN32)
239           set_target_properties(${STANDALONE_BINARY} PROPERTIES COMPILE_FLAGS -std=c++11)
240         endif()
241 endif()
242
243 #
244 # extra rule to make sure we cleanup all exe variants
245 #
246
247 set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
248   # FS1 demo
249   fsdemo${CMAKE_EXECUTABLE_SUFFIX}
250   freespacedemo${CMAKE_EXECUTABLE_SUFFIX}
251   # FS1
252   fs${CMAKE_EXECUTABLE_SUFFIX}
253   freespace${CMAKE_EXECUTABLE_SUFFIX}
254   # FS2 demo
255   fs2demo${CMAKE_EXECUTABLE_SUFFIX}
256   freespace2demo${CMAKE_EXECUTABLE_SUFFIX}
257   # FS2
258   fs2${CMAKE_EXECUTABLE_SUFFIX}
259   freespace2${CMAKE_EXECUTABLE_SUFFIX}
260   # standalone GUI
261   fsstandalone${CMAKE_EXECUTABLE_SUFFIX}
262   fs2standalone${CMAKE_EXECUTABLE_SUFFIX}
263 )
264
265 #
266 # ##############################################################################
267
268 # ##############################################################################
269 #
270 # toolset: targets for creating/modifying game assets
271 #
272
273 # don't build toolset unless it's a full build
274 if(NOT DEMO)
275
276         #
277         # AC: anim converter
278         #
279
280         add_executable(ac
281           EXCLUDE_FROM_ALL
282           ${ac_SOURCE}
283           ${ac_HEADERS}
284         )
285
286         CreateSourceGroups(${ac_SOURCE})
287
288         target_link_libraries(
289           ac
290           code
291           ${SDL2_LIBRARY}
292           ${OPENGL_LIBRARIES}
293           ${OPENAL_LIBRARY}
294           ${LIBWEBSOCKETS_LIBRARIES}
295           ${PLATFORM_LIBRARIES}
296         )
297
298         #
299         # CFILEARCHIVER: to create VP file archives
300         #
301
302         add_executable(cfilearchiver
303           EXCLUDE_FROM_ALL
304           ${cfilearchiver_SOURCE}
305         )
306
307         CreateSourceGroups(${cfilearchiver_SOURCE})
308
309         #
310         # CRYPTSTRING: string encryption (for embedded cheat codes)
311         #
312
313         add_executable(cryptstring
314           EXCLUDE_FROM_ALL
315           ${cryptstring_SOURCE}
316         )
317
318         CreateSourceGroups(${cryptstring_SOURCE})
319
320         #
321         # NEBEDIT: FS1 style nebula editor/creator
322         #
323
324         add_executable(nebedit
325           EXCLUDE_FROM_ALL
326           WIN32
327           ${nebedit_SOURCE}
328         )
329
330         CreateSourceGroups(${nebedit_SOURCE})
331
332         target_link_libraries(
333           nebedit
334           code
335           ${SDL2_LIBRARY}
336           ${OPENGL_LIBRARIES}
337           ${OPENAL_LIBRARY}
338           ${wxWidgets_LIBRARIES}
339           ${LIBWEBSOCKETS_LIBRARIES}
340           ${PLATFORM_LIBRARIES}
341         )
342
343         # wxWidgets appears to need c++11 for one or more headers
344         if(NOT WIN32)
345           set_target_properties(nebedit PROPERTIES COMPILE_FLAGS -std=c++11)
346         endif()
347
348         #
349         # POFVIEW: model viewer
350         #
351
352         add_executable(pofview
353           EXCLUDE_FROM_ALL
354           WIN32
355           ${pofview_SOURCE}
356           ${pofview_HEADERS}
357         )
358
359         CreateSourceGroups(${pofview_SOURCE})
360
361         target_link_libraries(
362           pofview
363           code
364           ${SDL2_LIBRARY}
365           ${OPENGL_LIBRARIES}
366           ${OPENAL_LIBRARY}
367           ${wxWidgets_LIBRARIES}
368           ${LIBWEBSOCKETS_LIBRARIES}
369           ${PLATFORM_LIBRARIES}
370         )
371
372         # wxWidgets appears to need c++11 for one or more headers
373         if(NOT WIN32)
374           set_target_properties(pofview PROPERTIES COMPILE_FLAGS -std=c++11)
375         endif()
376
377         #
378         # SCRAMBLE: file-based encryption for TBLs
379         #
380
381         add_executable(scramble
382           EXCLUDE_FROM_ALL
383           ${scramble_SOURCE}
384           ${scramble_HEADERS}
385         )
386
387         CreateSourceGroups(${scramble_SOURCE})
388
389         #
390         # FONTTOOL: create font files / edit kerning data
391         #
392
393         add_executable(fonttool
394           EXCLUDE_FROM_ALL
395           ${fonttool_SOURCE}
396           ${fonttool_HEADERS}
397         )
398
399         CreateSourceGroups(${fonttool_SOURCE})
400
401         # background setup, to allow running from build location without installing
402         add_custom_command(TARGET fonttool
403           POST_BUILD
404           COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/src/fonttool"
405           COMMAND ${CMAKE_COMMAND} -E copy "${PROJECT_SOURCE_DIR}/src/fonttool/fonttool.pcx" "${CMAKE_CURRENT_BINARY_DIR}/src/fonttool"
406         )
407
408         target_link_libraries(
409           fonttool
410           code
411           ${SDL2_LIBRARY}
412           ${OPENGL_LIBRARIES}
413           ${OPENAL_LIBRARY}
414           ${LIBWEBSOCKETS_LIBRARIES}
415           ${PLATFORM_LIBRARIES}
416         )
417
418         #
419         # custom target to build all tools in one pass
420         #
421
422         add_custom_target(tools)
423
424         add_dependencies(tools
425           ac
426           cfilearchiver
427           cryptstring
428           nebedit
429           pofview
430           scramble
431           fonttool
432         )
433
434 endif(NOT DEMO)
435
436 #
437 # ##############################################################################
438
439 #
440 # optionally include any dev/user preferred build commands and/or options
441 #
442
443 include(custom.cmake OPTIONAL)