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)
70 add_definitions(-Wall)
71 add_definitions(-Wshadow)
72 # add_definitions(-Wno-format-y2k)
73 # add_definitions(-Wno-deprecated)
74 add_definitions(-fsigned-char)
76 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DNDEBUG -DRELEASE_REAL -g -O3")
77 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG -DRELEASE_REAL -O3")
78 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g3")
80 set(SDL2DIR "${CMAKE_SOURCE_DIR}/../Support/SDL2" CACHE PATH "Path to SDL2")
81 set(OPENALDIR "${CMAKE_SOURCE_DIR}/../Support/OpenAL" CACHE PATH "Path to OpenAL")
82 set(LWSDIR "${CMAKE_SOURCE_DIR}/../Support/libwebsockets" CACHE PATH "Path to libwebsockets")
83 set(WXWIDGETSDIR "${CMAKE_SOURCE_DIR}/../Support/wxWidgets" CACHE PATH "Path to wxWidgets")
84 set(ANGLEDIR "${CMAKE_SOURCE_DIR}/../Support/ANGLE" CACHE PATH "Path to ANGLE")
86 set(PLATFORM_LIBRARIES
88 ${ANGLEDIR}/lib/libEGL.lib
89 ${ANGLEDIR}/lib/libGLESv2.lib
92 add_definitions(/D _CRT_SECURE_NO_WARNINGS)
94 add_definitions(/wd4100) # unreferenced parameter
95 add_definitions(/wd4127) # conditional expression is constant: do { } while (0)
96 add_definitions(/wd4996) # deprecated functions: fopen, fileno, ...
106 set(BIN_SUFFIX "${BIN_SUFFIX}demo")
109 find_package(SDL2 "2.0.5" REQUIRED)
110 find_package(OpenGL REQUIRED)
111 find_package(OpenAL REQUIRED)
114 find_package(LibWebSockets REQUIRED)
116 find_package(wxWidgets COMPONENTS core base gl net)
117 include(${wxWidgets_USE_FILE})
120 # ##############################################################################
124 ${PROJECT_SOURCE_DIR}/include
125 ${CMAKE_BINARY_DIR}/include
127 ${OPENAL_INCLUDE_DIR}
128 ${LIBWEBSOCKETS_INCLUDE_DIR}
129 ${wxWidgets_INCLUDE_DIRS}
133 add_subdirectory(src)
134 add_subdirectory(include)
137 # ##############################################################################
141 # custom target for source tree version info
144 add_custom_target(buildver
145 COMMAND ${CMAKE_COMMAND}
146 -DSOURCE_DIR=${CMAKE_SOURCE_DIR}
147 -DBINARY_DIR=${CMAKE_BINARY_DIR}
148 -P ${CMAKE_SOURCE_DIR}/cmake/GitInfo.cmake
149 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
150 SOURCES ${CMAKE_SOURCE_DIR}/cmake/GitInfo.cmake
154 # main code/game library
165 CreateSourceGroups(${code_SOURCE} ${platform_SOURCE})
167 add_dependencies(code
175 set(FS_BINARY "fs${BIN_SUFFIX}")
177 add_executable(${FS_BINARY}
183 CreateSourceGroups(${freespace_SOURCE})
185 target_link_libraries(
191 ${LIBWEBSOCKETS_LIBRARIES}
192 ${PLATFORM_LIBRARIES}
205 gameseq_process_events
210 freespace_mission_load_stuff
212 game_loading_callback
213 game_loading_callback_close
216 gamesnd_preload_common_sounds
220 list(GET ASYNC_FUNCTIONS -1 LastOne)
222 set(EMTERPRETIFY_WHITELIST "[")
224 foreach(func ${ASYNC_FUNCTIONS})
225 if (${func} STREQUAL ${LastOne})
226 set(EMTERPRETIFY_WHITELIST "${EMTERPRETIFY_WHITELIST}\"_${func}\"]")
228 set(EMTERPRETIFY_WHITELIST "${EMTERPRETIFY_WHITELIST}\"_${func}\",")
237 "-s TOTAL_MEMORY=184549376"
238 "--shell-file ${CMAKE_SOURCE_DIR}/dist/${FS_BINARY}_shell.html"
239 "--preload-file game@/"
241 # "-s DEMANGLE_SUPPORT=1"
243 # "--profiling-funcs"
244 # "-s EMTERPRETIFY=1"
245 # "-s EMTERPRETIFY_ASYNC=1"
246 # "-s 'EMTERPRETIFY_FILE=\"${FS_BINARY}.binary\"'"
247 # "-s 'EMTERPRETIFY_WHITELIST=${EMTERPRETIFY_WHITELIST}'"
250 foreach(Flag ${LINK_FLAGS})
251 set_property(TARGET ${FS_BINARY} APPEND_STRING PROPERTY LINK_FLAGS " ${Flag}")
256 set_target_properties(${FS_BINARY} PROPERTIES PROJECT_LABEL "Freespace")
258 set_target_properties(${FS_BINARY} PROPERTIES PROJECT_LABEL "Freespace2")
266 set(LAUNCHER_BINARY "freespace${BIN_SUFFIX}")
268 add_executable(${LAUNCHER_BINARY}
274 add_dependencies(${LAUNCHER_BINARY}
278 CreateSourceGroups(${launcher_SOURCE})
280 target_link_libraries(
285 ${wxWidgets_LIBRARIES}
286 ${PLATFORM_LIBRARIES}
289 set_target_properties(${LAUNCHER_BINARY} PROPERTIES PROJECT_LABEL "Launcher")
291 # wxWidgets appears to need c++11 for one or more headers
293 set_target_properties(${LAUNCHER_BINARY} PROPERTIES COMPILE_FLAGS -std=c++11)
298 # standalone server GUI
303 if(NOT FS1 OR NOT DEMO)
305 set(STANDALONE_BINARY fsstandalone)
307 set(STANDALONE_BINARY fs2standalone)
310 add_executable(${STANDALONE_BINARY}
313 ${standalone_HEADERS}
316 CreateSourceGroups(${standalone_SOURCE})
318 target_link_libraries(
321 ${wxWidgets_LIBRARIES}
322 ${LIBWEBSOCKETS_LIBRARIES}
323 ${PLATFORM_LIBRARIES}
326 set_target_properties(${STANDALONE_BINARY} PROPERTIES PROJECT_LABEL "Standalone")
328 # wxWidgets appears to need c++11 for one or more headers
330 set_target_properties(${STANDALONE_BINARY} PROPERTIES COMPILE_FLAGS -std=c++11)
332 endif(NOT FS1 OR NOT DEMO)
336 # extra rule to make sure we cleanup all exe variants
339 set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
341 fsdemo${CMAKE_EXECUTABLE_SUFFIX}
348 freespacedemo${CMAKE_EXECUTABLE_SUFFIX}
350 fs${CMAKE_EXECUTABLE_SUFFIX}
351 freespace${CMAKE_EXECUTABLE_SUFFIX}
353 fs2demo${CMAKE_EXECUTABLE_SUFFIX}
360 freespace2demo${CMAKE_EXECUTABLE_SUFFIX}
362 fs2${CMAKE_EXECUTABLE_SUFFIX}
363 freespace2${CMAKE_EXECUTABLE_SUFFIX}
365 fsstandalone${CMAKE_EXECUTABLE_SUFFIX}
366 fs2standalone${CMAKE_EXECUTABLE_SUFFIX}
370 # ##############################################################################
372 # ##############################################################################
374 # toolset: targets for creating/modifying game assets
377 # don't build toolset unless it's a full build
390 CreateSourceGroups(${ac_SOURCE})
392 target_link_libraries(
398 ${LIBWEBSOCKETS_LIBRARIES}
399 ${PLATFORM_LIBRARIES}
403 # CFILEARCHIVER: to create VP file archives
406 add_executable(cfilearchiver
408 ${cfilearchiver_SOURCE}
411 CreateSourceGroups(${cfilearchiver_SOURCE})
414 # CFILEUTIL: work with VP file archives
417 add_executable(cfileutil
422 CreateSourceGroups(${cfileutil_SOURCE})
425 set_target_properties(cfileutil PROPERTIES COMPILE_FLAGS -std=c++11)
429 # CRYPTSTRING: string encryption (for embedded cheat codes)
432 add_executable(cryptstring
434 ${cryptstring_SOURCE}
437 CreateSourceGroups(${cryptstring_SOURCE})
440 # NEBEDIT: FS1 style nebula editor/creator
443 add_executable(nebedit
449 CreateSourceGroups(${nebedit_SOURCE})
451 target_link_libraries(
457 ${wxWidgets_LIBRARIES}
458 ${LIBWEBSOCKETS_LIBRARIES}
459 ${PLATFORM_LIBRARIES}
462 # wxWidgets appears to need c++11 for one or more headers
464 set_target_properties(nebedit PROPERTIES COMPILE_FLAGS -std=c++11)
468 # POFVIEW: model viewer
471 add_executable(pofview
478 CreateSourceGroups(${pofview_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(pofview PROPERTIES COMPILE_FLAGS -std=c++11)
497 # SCRAMBLE: file-based encryption for TBLs
500 add_executable(scramble
506 CreateSourceGroups(${scramble_SOURCE})
509 # FONTTOOL: create font files / edit kerning data
512 add_executable(fonttool
518 CreateSourceGroups(${fonttool_SOURCE})
520 # background setup, to allow running from build location without installing
521 add_custom_command(TARGET fonttool
523 COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/src/fonttool"
524 COMMAND ${CMAKE_COMMAND} -E copy "${PROJECT_SOURCE_DIR}/src/fonttool/fonttool.pcx" "${CMAKE_CURRENT_BINARY_DIR}/src/fonttool"
527 target_link_libraries(
533 ${LIBWEBSOCKETS_LIBRARIES}
534 ${PLATFORM_LIBRARIES}
538 # custom target to build all tools in one pass
541 add_custom_target(tools)
543 add_dependencies(tools
557 # ##############################################################################
560 # optionally include any dev/user preferred build commands and/or options
563 include(custom.cmake OPTIONAL)