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