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