4 cmake_minimum_required(VERSION 2.8.6)
5 cmake_policy(VERSION 2.8.6)
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)
21 # only build for demo with emscripten
24 option(DEMO "Create demo build" OFF)
27 if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
28 message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.")
29 set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build." FORCE)
30 # Set the possible values of build type for cmake-gui
31 set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "RelWithDebInfo" "Release" "Debug")
36 add_definitions(-DMAKE_FS1)
39 add_definitions(-DDEMO -DFS1_DEMO)
43 add_definitions(-DFS2_DEMO)
47 # build everything by default
55 set(GAME_ONLY 1) # don't build launcher or toolset
56 add_definitions(-s USE_SDL=2)
57 add_definitions(-s FULL_ES2=1)
59 set(CMAKE_EXECUTABLE_SUFFIX ".html")
63 add_definitions(-DLEGACY_GL)
67 set(PLATFORM_LIBRARIES "")
69 add_definitions(-DPLAT_UNIX)
71 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
72 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wshadow")
73 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsigned-char")
75 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -g -O3 -DRELEASE_REAL")
76 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DRELEASE_REAL")
77 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g3")
79 set(SDL2DIR "${CMAKE_SOURCE_DIR}/../Support/SDL2" CACHE PATH "Path to SDL2")
80 set(OPENALDIR "${CMAKE_SOURCE_DIR}/../Support/OpenAL" CACHE PATH "Path to OpenAL")
81 set(LWSDIR "${CMAKE_SOURCE_DIR}/../Support/libwebsockets" CACHE PATH "Path to libwebsockets")
82 set(WXWIDGETSDIR "${CMAKE_SOURCE_DIR}/../Support/wxWidgets" CACHE PATH "Path to wxWidgets")
83 set(ANGLEDIR "${CMAKE_SOURCE_DIR}/../Support/ANGLE" CACHE PATH "Path to ANGLE")
85 set(PLATFORM_LIBRARIES
87 ${ANGLEDIR}/lib/libEGL.lib
88 ${ANGLEDIR}/lib/libGLESv2.lib
91 add_definitions(/D _CRT_SECURE_NO_WARNINGS)
93 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
94 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4100") # unreferenced parameter
95 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4127") # conditional expression is constant: do { } while (0)
96 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4996") # deprecated functions: fopen, fileno, ...
98 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT /D RELEASE_REAL")
99 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT /D RELEASE_REAL")
100 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
110 set(BIN_SUFFIX "${BIN_SUFFIX}demo")
113 find_package(SDL2 "2.0.5" REQUIRED)
114 find_package(OpenGL REQUIRED)
115 find_package(OpenAL REQUIRED)
118 find_package(LibWebSockets REQUIRED)
120 find_package(wxWidgets COMPONENTS core base gl net)
121 include(${wxWidgets_USE_FILE})
124 # ##############################################################################
128 ${PROJECT_SOURCE_DIR}/include
129 ${CMAKE_BINARY_DIR}/include
131 ${OPENAL_INCLUDE_DIR}
132 ${LIBWEBSOCKETS_INCLUDE_DIR}
133 ${wxWidgets_INCLUDE_DIRS}
137 add_subdirectory(src)
138 add_subdirectory(include)
141 # ##############################################################################
145 # custom target for source tree version info
148 add_custom_target(buildver
149 COMMAND ${CMAKE_COMMAND}
150 -DSOURCE_DIR=${CMAKE_SOURCE_DIR}
151 -DBINARY_DIR=${CMAKE_BINARY_DIR}
152 -P ${CMAKE_SOURCE_DIR}/cmake/GitInfo.cmake
153 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
154 SOURCES ${CMAKE_SOURCE_DIR}/cmake/GitInfo.cmake
158 # main code/game library
169 CreateSourceGroups(${code_SOURCE} ${platform_SOURCE})
171 add_dependencies(code
179 set(FS_BINARY "fs${BIN_SUFFIX}")
181 add_executable(${FS_BINARY}
187 CreateSourceGroups(${freespace_SOURCE})
189 target_link_libraries(
195 ${LIBWEBSOCKETS_LIBRARIES}
196 ${PLATFORM_LIBRARIES}
209 gameseq_process_events
214 freespace_mission_load_stuff
216 game_loading_callback
217 game_loading_callback_close
220 gamesnd_preload_common_sounds
224 list(GET ASYNC_FUNCTIONS -1 LastOne)
226 set(EMTERPRETIFY_WHITELIST "[")
228 foreach(func ${ASYNC_FUNCTIONS})
229 if (${func} STREQUAL ${LastOne})
230 set(EMTERPRETIFY_WHITELIST "${EMTERPRETIFY_WHITELIST}\"_${func}\"]")
232 set(EMTERPRETIFY_WHITELIST "${EMTERPRETIFY_WHITELIST}\"_${func}\",")
241 "--shell-file ${CMAKE_BINARY_DIR}/dist/demo_shell.html"
242 "--pre-js ${FS_BINARY}_preload.js"
244 # "-s EMTERPRETIFY=1"
245 # "-s EMTERPRETIFY_ASYNC=1"
246 # "-s 'EMTERPRETIFY_FILE=\"${FS_BINARY}.binary\"'"
247 # "-s 'EMTERPRETIFY_WHITELIST=${EMTERPRETIFY_WHITELIST}'"
250 # memory is calculated as such: 1024 * 1024 * (48 + (data size + 4))
251 # 48 to run the game itself, plus in-memory filesystem+data
252 # FS1 demo data size is 38MB, FS2 demo is 94MB
254 set(LINK_FLAGS "${LINK_FLAGS} -s TOTAL_MEMORY=94371840")
256 set(LINK_FLAGS "${LINK_FLAGS} -s TOTAL_MEMORY=153092096")
259 foreach(Flag ${LINK_FLAGS})
260 set_property(TARGET ${FS_BINARY} APPEND_STRING PROPERTY LINK_FLAGS " ${Flag}")
264 set(TEXT_COLOR "#4C442D")
265 set(BG_COLOR "#3E4559")
266 set(OUTLINE_COLOR "#353B4C")
267 set(BG_COLOR2 "#798199")
268 set(GAME_TITLE "FreeSpace Demo")
270 set(TEXT_COLOR "#FFF")
271 set(BG_COLOR "#457573")
272 set(OUTLINE_COLOR "#4D8280")
273 set(BG_COLOR2 "#182928")
274 set(GAME_TITLE "FreeSpace 2 Demo")
277 configure_file(${CMAKE_SOURCE_DIR}/dist/demo_shell.html.in ${CMAKE_BINARY_DIR}/dist/demo_shell.html @ONLY)
278 configure_file(${CMAKE_SOURCE_DIR}/dist/demo-play.css.in ${CMAKE_BINARY_DIR}/dist/demo-play.css @ONLY)
279 configure_file(${CMAKE_SOURCE_DIR}/dist/demo-play.js.in ${CMAKE_BINARY_DIR}/dist/demo-play.js @ONLY)
283 set_target_properties(${FS_BINARY} PROPERTIES PROJECT_LABEL "Freespace")
285 set_target_properties(${FS_BINARY} PROPERTIES PROJECT_LABEL "Freespace2")
293 set(LAUNCHER_BINARY "freespace${BIN_SUFFIX}")
295 add_executable(${LAUNCHER_BINARY}
301 add_dependencies(${LAUNCHER_BINARY}
305 CreateSourceGroups(${launcher_SOURCE})
307 target_link_libraries(
312 ${wxWidgets_LIBRARIES}
313 ${PLATFORM_LIBRARIES}
316 set_target_properties(${LAUNCHER_BINARY} PROPERTIES PROJECT_LABEL "Launcher")
318 # wxWidgets appears to need c++11 for one or more headers
320 set_target_properties(${LAUNCHER_BINARY} PROPERTIES COMPILE_FLAGS -std=c++11)
325 # standalone server GUI
330 if(NOT FS1 OR NOT DEMO)
332 set(STANDALONE_BINARY fsstandalone)
334 set(STANDALONE_BINARY fs2standalone)
337 add_executable(${STANDALONE_BINARY}
340 ${standalone_HEADERS}
343 CreateSourceGroups(${standalone_SOURCE})
345 target_link_libraries(
348 ${wxWidgets_LIBRARIES}
349 ${LIBWEBSOCKETS_LIBRARIES}
350 ${PLATFORM_LIBRARIES}
353 set_target_properties(${STANDALONE_BINARY} PROPERTIES PROJECT_LABEL "Standalone")
355 # wxWidgets appears to need c++11 for one or more headers
357 set_target_properties(${STANDALONE_BINARY} PROPERTIES COMPILE_FLAGS -std=c++11)
359 endif(NOT FS1 OR NOT DEMO)
363 # extra rule to make sure we cleanup all exe variants
366 set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
368 fsdemo${CMAKE_EXECUTABLE_SUFFIX}
376 freespacedemo${CMAKE_EXECUTABLE_SUFFIX}
378 fs${CMAKE_EXECUTABLE_SUFFIX}
379 freespace${CMAKE_EXECUTABLE_SUFFIX}
381 fs2demo${CMAKE_EXECUTABLE_SUFFIX}
389 freespace2demo${CMAKE_EXECUTABLE_SUFFIX}
391 fs2${CMAKE_EXECUTABLE_SUFFIX}
392 freespace2${CMAKE_EXECUTABLE_SUFFIX}
394 fsstandalone${CMAKE_EXECUTABLE_SUFFIX}
395 fs2standalone${CMAKE_EXECUTABLE_SUFFIX}
399 # ##############################################################################
401 # ##############################################################################
403 # toolset: targets for creating/modifying game assets
406 # don't build toolset unless it's a full build
419 CreateSourceGroups(${ac_SOURCE})
421 target_link_libraries(
427 ${LIBWEBSOCKETS_LIBRARIES}
428 ${PLATFORM_LIBRARIES}
432 # CFILEARCHIVER: to create VP file archives
435 add_executable(cfilearchiver
437 ${cfilearchiver_SOURCE}
440 CreateSourceGroups(${cfilearchiver_SOURCE})
443 # CFILEUTIL: work with VP file archives
446 add_executable(cfileutil
451 CreateSourceGroups(${cfileutil_SOURCE})
454 set_target_properties(cfileutil PROPERTIES COMPILE_FLAGS -std=c++11)
458 # CRYPTSTRING: string encryption (for embedded cheat codes)
461 add_executable(cryptstring
463 ${cryptstring_SOURCE}
466 CreateSourceGroups(${cryptstring_SOURCE})
469 # NEBEDIT: FS1 style nebula editor/creator
472 add_executable(nebedit
478 CreateSourceGroups(${nebedit_SOURCE})
480 target_link_libraries(
486 ${wxWidgets_LIBRARIES}
487 ${LIBWEBSOCKETS_LIBRARIES}
488 ${PLATFORM_LIBRARIES}
491 # wxWidgets appears to need c++11 for one or more headers
493 set_target_properties(nebedit PROPERTIES COMPILE_FLAGS -std=c++11)
497 # POFVIEW: model viewer
500 add_executable(pofview
507 CreateSourceGroups(${pofview_SOURCE})
509 target_link_libraries(
515 ${wxWidgets_LIBRARIES}
516 ${LIBWEBSOCKETS_LIBRARIES}
517 ${PLATFORM_LIBRARIES}
520 # wxWidgets appears to need c++11 for one or more headers
522 set_target_properties(pofview PROPERTIES COMPILE_FLAGS -std=c++11)
526 # SCRAMBLE: file-based encryption for TBLs
529 add_executable(scramble
535 CreateSourceGroups(${scramble_SOURCE})
538 # FONTTOOL: create font files / edit kerning data
541 add_executable(fonttool
547 CreateSourceGroups(${fonttool_SOURCE})
549 # background setup, to allow running from build location without installing
550 add_custom_command(TARGET fonttool
552 COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/src/fonttool"
553 COMMAND ${CMAKE_COMMAND} -E copy "${PROJECT_SOURCE_DIR}/src/fonttool/fonttool.pcx" "${CMAKE_CURRENT_BINARY_DIR}/src/fonttool"
556 target_link_libraries(
562 ${LIBWEBSOCKETS_LIBRARIES}
563 ${PLATFORM_LIBRARIES}
567 # custom target to build all tools in one pass
570 add_custom_target(tools)
572 add_dependencies(tools
586 # ##############################################################################
589 # optionally include any dev/user preferred build commands and/or options
592 include(custom.cmake OPTIONAL)