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