4 cmake_minimum_required(VERSION 2.8)
5 cmake_policy(VERSION 2.8)
8 cmake_policy(SET CMP0043 OLD)
11 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
13 include(CreateSourceGroups)
16 # ##############################################################################
18 option(FS1 "Build original FreeSpace" OFF)
19 option(DEMO "Create demo build" OFF)
21 if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
22 message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.")
23 set(CMAKE_BUILD_TYPE RelWithDebInfo 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" "RelWithDebInfo")
30 add_definitions(-DMAKE_FS1)
33 add_definitions(-DDEMO -DFS1_DEMO)
37 add_definitions(-DFS2_DEMO)
41 # build everything by default
50 add_definitions(-s USE_SDL=2)
51 add_definitions(-s FULL_ES2=1)
53 set(CMAKE_EXECUTABLE_SUFFIX ".html")
57 add_definitions(-DLEGACY_GL)
61 set(PLATFORM_LIBRARIES "")
63 add_definitions(-DPLAT_UNIX)
64 add_definitions(-Wall)
65 add_definitions(-Wshadow)
66 # add_definitions(-Wno-format-y2k)
67 # add_definitions(-Wno-deprecated)
68 add_definitions(-fsigned-char)
70 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DNDEBUG -g -O2")
71 set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -DNDEBUG -Os")
72 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG -DRELEASE_REAL -O3")
73 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g3")
75 set(SDL2DIR "${CMAKE_SOURCE_DIR}/../Support/SDL2" CACHE PATH "Path to SDL2")
76 set(OPENALDIR "${CMAKE_SOURCE_DIR}/../Support/OpenAL" CACHE PATH "Path to OpenAL")
77 set(LWSDIR "${CMAKE_SOURCE_DIR}/../Support/libwebsockets" CACHE PATH "Path to libwebsockets")
78 set(WXWIDGETSDIR "${CMAKE_SOURCE_DIR}/../Support/wxWidgets" CACHE PATH "Path to wxWidgets")
79 set(ANGLEDIR "${CMAKE_SOURCE_DIR}/../Support/ANGLE" CACHE PATH "Path to ANGLE")
81 set(PLATFORM_LIBRARIES
83 ${ANGLEDIR}/lib/libEGL.lib
84 ${ANGLEDIR}/lib/libGLESv2.lib
87 add_definitions(/D _CRT_SECURE_NO_WARNINGS)
89 add_definitions(/wd4100) # unreferenced parameter
90 add_definitions(/wd4127) # conditional expression is constant: do { } while (0)
91 add_definitions(/wd4996) # deprecated functions: fopen, fileno, ...
101 set(BIN_SUFFIX "${BIN_SUFFIX}demo")
104 find_package(SDL2 "2.0.5" REQUIRED)
105 find_package(OpenGL REQUIRED)
106 find_package(OpenAL REQUIRED)
109 find_package(LibWebSockets REQUIRED)
111 find_package(wxWidgets COMPONENTS core base gl net)
112 include(${wxWidgets_USE_FILE})
115 # ##############################################################################
119 ${PROJECT_SOURCE_DIR}/include
120 ${CMAKE_BINARY_DIR}/include
122 ${OPENAL_INCLUDE_DIR}
123 ${LIBWEBSOCKETS_INCLUDE_DIR}
124 ${wxWidgets_INCLUDE_DIRS}
128 add_subdirectory(src)
129 add_subdirectory(include)
132 # ##############################################################################
136 # custom target for source tree version info
139 add_custom_target(buildver
140 COMMAND ${CMAKE_COMMAND}
141 -DSOURCE_DIR=${CMAKE_SOURCE_DIR}
142 -DBINARY_DIR=${CMAKE_BINARY_DIR}
143 -P ${CMAKE_SOURCE_DIR}/cmake/GitInfo.cmake
144 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
145 SOURCES ${CMAKE_SOURCE_DIR}/cmake/GitInfo.cmake
149 # main code/game library
160 CreateSourceGroups(${code_SOURCE} ${platform_SOURCE})
162 add_dependencies(code
170 set(FS_BINARY "fs${BIN_SUFFIX}")
172 add_executable(${FS_BINARY}
178 CreateSourceGroups(${freespace_SOURCE})
180 target_link_libraries(
186 ${LIBWEBSOCKETS_LIBRARIES}
187 ${PLATFORM_LIBRARIES}
191 set_target_properties(${FS_BINARY}
192 PROPERTIES LINK_FLAGS
193 "-s USE_SDL=2 -s FULL_ES2=1 -s WASM=1 -s TOTAL_MEMORY=184549376 --shell-file ${CMAKE_SOURCE_DIR}/dist/fs_shell.html --preload-file game@/"
198 set_target_properties(${FS_BINARY} PROPERTIES PROJECT_LABEL "Freespace")
200 set_target_properties(${FS_BINARY} PROPERTIES PROJECT_LABEL "Freespace2")
208 set(LAUNCHER_BINARY "freespace${BIN_SUFFIX}")
210 add_executable(${LAUNCHER_BINARY}
216 add_dependencies(${LAUNCHER_BINARY}
220 CreateSourceGroups(${launcher_SOURCE})
222 target_link_libraries(
227 ${wxWidgets_LIBRARIES}
228 ${PLATFORM_LIBRARIES}
231 set_target_properties(${LAUNCHER_BINARY} PROPERTIES PROJECT_LABEL "Launcher")
233 # wxWidgets appears to need c++11 for one or more headers
235 set_target_properties(${LAUNCHER_BINARY} PROPERTIES COMPILE_FLAGS -std=c++11)
240 # standalone server GUI
245 if(NOT FS1 OR NOT DEMO)
247 set(STANDALONE_BINARY fsstandalone)
249 set(STANDALONE_BINARY fs2standalone)
252 add_executable(${STANDALONE_BINARY}
255 ${standalone_HEADERS}
258 CreateSourceGroups(${standalone_SOURCE})
260 target_link_libraries(
263 ${wxWidgets_LIBRARIES}
264 ${LIBWEBSOCKETS_LIBRARIES}
265 ${PLATFORM_LIBRARIES}
268 set_target_properties(${STANDALONE_BINARY} PROPERTIES PROJECT_LABEL "Standalone")
270 # wxWidgets appears to need c++11 for one or more headers
272 set_target_properties(${STANDALONE_BINARY} PROPERTIES COMPILE_FLAGS -std=c++11)
274 endif(NOT FS1 OR NOT DEMO)
278 # extra rule to make sure we cleanup all exe variants
281 set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
283 fsdemo${CMAKE_EXECUTABLE_SUFFIX}
287 freespacedemo${CMAKE_EXECUTABLE_SUFFIX}
289 fs${CMAKE_EXECUTABLE_SUFFIX}
293 freespace${CMAKE_EXECUTABLE_SUFFIX}
295 fs2demo${CMAKE_EXECUTABLE_SUFFIX}
299 freespace2demo${CMAKE_EXECUTABLE_SUFFIX}
301 fs2${CMAKE_EXECUTABLE_SUFFIX}
305 freespace2${CMAKE_EXECUTABLE_SUFFIX}
307 fsstandalone${CMAKE_EXECUTABLE_SUFFIX}
308 fs2standalone${CMAKE_EXECUTABLE_SUFFIX}
312 # ##############################################################################
314 # ##############################################################################
316 # toolset: targets for creating/modifying game assets
319 # don't build toolset unless it's a full build
332 CreateSourceGroups(${ac_SOURCE})
334 target_link_libraries(
340 ${LIBWEBSOCKETS_LIBRARIES}
341 ${PLATFORM_LIBRARIES}
345 # CFILEARCHIVER: to create VP file archives
348 add_executable(cfilearchiver
350 ${cfilearchiver_SOURCE}
353 CreateSourceGroups(${cfilearchiver_SOURCE})
356 # CRYPTSTRING: string encryption (for embedded cheat codes)
359 add_executable(cryptstring
361 ${cryptstring_SOURCE}
364 CreateSourceGroups(${cryptstring_SOURCE})
367 # NEBEDIT: FS1 style nebula editor/creator
370 add_executable(nebedit
376 CreateSourceGroups(${nebedit_SOURCE})
378 target_link_libraries(
384 ${wxWidgets_LIBRARIES}
385 ${LIBWEBSOCKETS_LIBRARIES}
386 ${PLATFORM_LIBRARIES}
389 # wxWidgets appears to need c++11 for one or more headers
391 set_target_properties(nebedit PROPERTIES COMPILE_FLAGS -std=c++11)
395 # POFVIEW: model viewer
398 add_executable(pofview
405 CreateSourceGroups(${pofview_SOURCE})
407 target_link_libraries(
413 ${wxWidgets_LIBRARIES}
414 ${LIBWEBSOCKETS_LIBRARIES}
415 ${PLATFORM_LIBRARIES}
418 # wxWidgets appears to need c++11 for one or more headers
420 set_target_properties(pofview PROPERTIES COMPILE_FLAGS -std=c++11)
424 # SCRAMBLE: file-based encryption for TBLs
427 add_executable(scramble
433 CreateSourceGroups(${scramble_SOURCE})
436 # FONTTOOL: create font files / edit kerning data
439 add_executable(fonttool
445 CreateSourceGroups(${fonttool_SOURCE})
447 # background setup, to allow running from build location without installing
448 add_custom_command(TARGET fonttool
450 COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/src/fonttool"
451 COMMAND ${CMAKE_COMMAND} -E copy "${PROJECT_SOURCE_DIR}/src/fonttool/fonttool.pcx" "${CMAKE_CURRENT_BINARY_DIR}/src/fonttool"
454 target_link_libraries(
460 ${LIBWEBSOCKETS_LIBRARIES}
461 ${PLATFORM_LIBRARIES}
465 # custom target to build all tools in one pass
468 add_custom_target(tools)
470 add_dependencies(tools
483 # ##############################################################################
486 # optionally include any dev/user preferred build commands and/or options
489 include(custom.cmake OPTIONAL)