]> icculus.org git repositories - taylor/freespace2.git/blob - CMakeLists.txt
properly (re)set context attributes for GL1
[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 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
87 # ##############################################################################
88
89
90 include_directories(
91   ${PROJECT_SOURCE_DIR}/include
92   ${SDL2_INCLUDE_DIR}
93   ${OPENAL_INCLUDE_DIR}
94   ${LIBWEBSOCKETS_INCLUDE_DIR}
95   ${wxWidgets_INCLUDE_DIRS}
96 )
97
98
99 add_subdirectory(src)
100 add_subdirectory(include)
101
102
103 # ##############################################################################
104 #
105
106 #
107 # main code/game library
108 #
109
110 add_library(code
111   STATIC
112   ${code_SOURCE}
113   ${code_HEADERS}
114   ${platform_SOURCE}
115   ${platform_HEADERS}
116 )
117
118 CreateSourceGroups(${code_SOURCE} ${platform_SOURCE})
119
120 #
121 # the game itself
122 #
123
124 set(FS_BINARY "fs${BIN_SUFFIX}")
125
126 add_executable(${FS_BINARY}
127   WIN32
128   ${freespace_SOURCE}
129   ${freespace_HEADERS}
130 )
131
132 CreateSourceGroups(${freespace_SOURCE})
133
134 target_link_libraries(
135   ${FS_BINARY}
136   code
137   ${SDL2_LIBRARY}
138   ${OPENGL_LIBRARIES}
139   ${OPENAL_LIBRARY}
140   ${LIBWEBSOCKETS_LIBRARIES}
141   ${PLATFORM_LIBRARIES}
142 )
143
144 if(FS1)
145   set_target_properties(${FS_BINARY} PROPERTIES PROJECT_LABEL "Freespace")
146 else()
147   set_target_properties(${FS_BINARY} PROPERTIES PROJECT_LABEL "Freespace2")
148 endif()
149
150 #
151 # launcher
152 #
153
154 set(LAUNCHER_BINARY "freespace${BIN_SUFFIX}")
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 set_target_properties(${LAUNCHER_BINARY} PROPERTIES PROJECT_LABEL "Launcher")
174
175 # wxWidgets appears to need c++11 for one or more headers
176 if(NOT WIN32)
177   set_target_properties(${LAUNCHER_BINARY} PROPERTIES COMPILE_FLAGS -std=c++11)
178 endif()
179
180 #
181 # standalone server GUI
182 #
183
184 if(FS1)
185   set(STANDALONE_BINARY fsstandalone)
186 else()
187   set(STANDALONE_BINARY fs2standalone)
188 endif()
189
190 add_executable(${STANDALONE_BINARY}
191   WIN32
192   ${standalone_SOURCE}
193   ${standalone_HEADERS}
194 )
195
196 CreateSourceGroups(${standalone_SOURCE})
197
198 target_link_libraries(
199   ${STANDALONE_BINARY}
200   ${SDL2_LIBRARY}
201   ${wxWidgets_LIBRARIES}
202   ${LIBWEBSOCKETS_LIBRARIES}
203   ${PLATFORM_LIBRARIES}
204 )
205
206 set_target_properties(${STANDALONE_BINARY} PROPERTIES PROJECT_LABEL "Standalone")
207
208 # wxWidgets appears to need c++11 for one or more headers
209 if(NOT WIN32)
210   set_target_properties(${STANDALONE_BINARY} PROPERTIES COMPILE_FLAGS -std=c++11)
211 endif()
212
213 #
214 # ##############################################################################
215
216 # ##############################################################################
217 #
218 # toolset: targets for creating/modifying game assets
219 #
220
221 #
222 # AC: anim converter
223 #
224
225 add_executable(ac
226   EXCLUDE_FROM_ALL
227   ${ac_SOURCE}
228   ${ac_HEADERS}
229 )
230
231 CreateSourceGroups(${ac_SOURCE})
232
233 target_link_libraries(
234   ac
235   code
236   ${SDL2_LIBRARY}
237   ${OPENGL_LIBRARIES}
238   ${OPENAL_LIBRARY}
239   ${LIBWEBSOCKETS_LIBRARIES}
240   ${PLATFORM_LIBRARIES}
241 )
242
243 #
244 # CFILEARCHIVER: to create VP file archives
245 #
246
247 add_executable(cfilearchiver
248   EXCLUDE_FROM_ALL
249   ${cfilearchiver_SOURCE}
250 )
251
252 CreateSourceGroups(${cfilearchiver_SOURCE})
253
254 #
255 # CRYPTSTRING: string encryption (for embedded cheat codes)
256 #
257
258 add_executable(cryptstring
259   EXCLUDE_FROM_ALL
260   ${cryptstring_SOURCE}
261 )
262
263 CreateSourceGroups(${cryptstring_SOURCE})
264
265 #
266 # NEBEDIT: FS1 style nebula editor/creator
267 #
268
269 add_executable(nebedit
270   EXCLUDE_FROM_ALL
271   WIN32
272   ${nebedit_SOURCE}
273 )
274
275 CreateSourceGroups(${nebedit_SOURCE})
276
277 target_link_libraries(
278   nebedit
279   code
280   ${SDL2_LIBRARY}
281   ${OPENGL_LIBRARIES}
282   ${OPENAL_LIBRARY}
283   ${wxWidgets_LIBRARIES}
284   ${LIBWEBSOCKETS_LIBRARIES}
285   ${PLATFORM_LIBRARIES}
286 )
287
288 # wxWidgets appears to need c++11 for one or more headers
289 if(NOT WIN32)
290   set_target_properties(nebedit PROPERTIES COMPILE_FLAGS -std=c++11)
291 endif()
292
293 #
294 # POFVIEW: model viewer
295 #
296
297 add_executable(pofview
298   EXCLUDE_FROM_ALL
299   WIN32
300   ${pofview_SOURCE}
301   ${pofview_HEADERS}
302 )
303
304 CreateSourceGroups(${pofview_SOURCE})
305
306 target_link_libraries(
307   pofview
308   code
309   ${SDL2_LIBRARY}
310   ${OPENGL_LIBRARIES}
311   ${OPENAL_LIBRARY}
312   ${wxWidgets_LIBRARIES}
313   ${LIBWEBSOCKETS_LIBRARIES}
314   ${PLATFORM_LIBRARIES}
315 )
316
317 # wxWidgets appears to need c++11 for one or more headers
318 if(NOT WIN32)
319   set_target_properties(pofview PROPERTIES COMPILE_FLAGS -std=c++11)
320 endif()
321
322 #
323 # SCRAMBLE: file-based encryption for TBLs
324 #
325
326 add_executable(scramble
327   EXCLUDE_FROM_ALL
328   ${scramble_SOURCE}
329   ${scramble_HEADERS}
330 )
331
332 CreateSourceGroups(${scramble_SOURCE})
333
334 #
335 # FONTTOOL: create font files / edit kerning data
336 #
337
338 add_executable(fonttool
339   EXCLUDE_FROM_ALL
340   WIN32
341   ${fonttool_SOURCE}
342   ${fonttool_HEADERS}
343 )
344
345 CreateSourceGroups(${fonttool_SOURCE})
346
347 # background setup, to allow running from build location without installing
348 add_custom_command(TARGET fonttool
349   POST_BUILD
350   COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/src/fonttool"
351   COMMAND ${CMAKE_COMMAND} -E copy "${PROJECT_SOURCE_DIR}/src/fonttool/fonttool.pcx" "${CMAKE_CURRENT_BINARY_DIR}/src/fonttool"
352 )
353
354 target_link_libraries(
355   fonttool
356   code
357   ${SDL2_LIBRARY}
358   ${OPENGL_LIBRARIES}
359   ${OPENAL_LIBRARY}
360   ${LIBWEBSOCKETS_LIBRARIES}
361   ${PLATFORM_LIBRARIES}
362 )
363
364 #
365 # custom target to build all tools in one pass
366 #
367
368 add_custom_target(tools)
369
370 add_dependencies(tools
371   ac
372   cfilearchiver
373   cryptstring
374   nebedit
375   pofview
376   scramble
377   fonttool
378 )
379
380 #
381 # ##############################################################################
382
383 #
384 # optionally include any dev/user preferred build commands and/or options
385 #
386
387 include(custom.cmake OPTIONAL)