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