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 "Debug" "Release" "RelWithDebInfo")
36 add_definitions(-DMAKE_FS1)
39 add_definitions(-DDEMO -DFS1_DEMO)
43 add_definitions(-DFS2_DEMO)
47 # build everything by default
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 -O2")
77 set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -DNDEBUG -DRELEASE_REAL -Os")
78 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG -DRELEASE_REAL -O3")
79 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g3")
81 set(SDL2DIR "${CMAKE_SOURCE_DIR}/../Support/SDL2" CACHE PATH "Path to SDL2")
82 set(OPENALDIR "${CMAKE_SOURCE_DIR}/../Support/OpenAL" CACHE PATH "Path to OpenAL")
83 set(LWSDIR "${CMAKE_SOURCE_DIR}/../Support/libwebsockets" CACHE PATH "Path to libwebsockets")
84 set(WXWIDGETSDIR "${CMAKE_SOURCE_DIR}/../Support/wxWidgets" CACHE PATH "Path to wxWidgets")
85 set(ANGLEDIR "${CMAKE_SOURCE_DIR}/../Support/ANGLE" CACHE PATH "Path to ANGLE")
87 set(PLATFORM_LIBRARIES
89 ${ANGLEDIR}/lib/libEGL.lib
90 ${ANGLEDIR}/lib/libGLESv2.lib
93 add_definitions(/D _CRT_SECURE_NO_WARNINGS)
95 add_definitions(/wd4100) # unreferenced parameter
96 add_definitions(/wd4127) # conditional expression is constant: do { } while (0)
97 add_definitions(/wd4996) # deprecated functions: fopen, fileno, ...
107 set(BIN_SUFFIX "${BIN_SUFFIX}demo")
110 find_package(SDL2 "2.0.5" REQUIRED)
111 find_package(OpenGL REQUIRED)
112 find_package(OpenAL REQUIRED)
115 find_package(LibWebSockets REQUIRED)
117 find_package(wxWidgets COMPONENTS core base gl net)
118 include(${wxWidgets_USE_FILE})
121 # ##############################################################################
125 ${PROJECT_SOURCE_DIR}/include
126 ${CMAKE_BINARY_DIR}/include
128 ${OPENAL_INCLUDE_DIR}
129 ${LIBWEBSOCKETS_INCLUDE_DIR}
130 ${wxWidgets_INCLUDE_DIRS}
134 add_subdirectory(src)
135 add_subdirectory(include)
138 # ##############################################################################
142 # custom target for source tree version info
145 add_custom_target(buildver
146 COMMAND ${CMAKE_COMMAND}
147 -DSOURCE_DIR=${CMAKE_SOURCE_DIR}
148 -DBINARY_DIR=${CMAKE_BINARY_DIR}
149 -P ${CMAKE_SOURCE_DIR}/cmake/GitInfo.cmake
150 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
151 SOURCES ${CMAKE_SOURCE_DIR}/cmake/GitInfo.cmake
155 # main code/game library
166 CreateSourceGroups(${code_SOURCE} ${platform_SOURCE})
168 add_dependencies(code
176 set(FS_BINARY "fs${BIN_SUFFIX}")
178 add_executable(${FS_BINARY}
184 CreateSourceGroups(${freespace_SOURCE})
186 target_link_libraries(
192 ${LIBWEBSOCKETS_LIBRARIES}
193 ${PLATFORM_LIBRARIES}
197 set_target_properties(${FS_BINARY}
198 PROPERTIES LINK_FLAGS
199 "-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@/"
204 set_target_properties(${FS_BINARY} PROPERTIES PROJECT_LABEL "Freespace")
206 set_target_properties(${FS_BINARY} PROPERTIES PROJECT_LABEL "Freespace2")
214 set(LAUNCHER_BINARY "freespace${BIN_SUFFIX}")
216 add_executable(${LAUNCHER_BINARY}
222 add_dependencies(${LAUNCHER_BINARY}
226 CreateSourceGroups(${launcher_SOURCE})
228 target_link_libraries(
233 ${wxWidgets_LIBRARIES}
234 ${PLATFORM_LIBRARIES}
237 set_target_properties(${LAUNCHER_BINARY} PROPERTIES PROJECT_LABEL "Launcher")
239 # wxWidgets appears to need c++11 for one or more headers
241 set_target_properties(${LAUNCHER_BINARY} PROPERTIES COMPILE_FLAGS -std=c++11)
246 # standalone server GUI
251 if(NOT FS1 OR NOT DEMO)
253 set(STANDALONE_BINARY fsstandalone)
255 set(STANDALONE_BINARY fs2standalone)
258 add_executable(${STANDALONE_BINARY}
261 ${standalone_HEADERS}
264 CreateSourceGroups(${standalone_SOURCE})
266 target_link_libraries(
269 ${wxWidgets_LIBRARIES}
270 ${LIBWEBSOCKETS_LIBRARIES}
271 ${PLATFORM_LIBRARIES}
274 set_target_properties(${STANDALONE_BINARY} PROPERTIES PROJECT_LABEL "Standalone")
276 # wxWidgets appears to need c++11 for one or more headers
278 set_target_properties(${STANDALONE_BINARY} PROPERTIES COMPILE_FLAGS -std=c++11)
280 endif(NOT FS1 OR NOT DEMO)
284 # extra rule to make sure we cleanup all exe variants
287 set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
289 fsdemo${CMAKE_EXECUTABLE_SUFFIX}
293 freespacedemo${CMAKE_EXECUTABLE_SUFFIX}
295 fs${CMAKE_EXECUTABLE_SUFFIX}
299 freespace${CMAKE_EXECUTABLE_SUFFIX}
301 fs2demo${CMAKE_EXECUTABLE_SUFFIX}
305 freespace2demo${CMAKE_EXECUTABLE_SUFFIX}
307 fs2${CMAKE_EXECUTABLE_SUFFIX}
311 freespace2${CMAKE_EXECUTABLE_SUFFIX}
313 fsstandalone${CMAKE_EXECUTABLE_SUFFIX}
314 fs2standalone${CMAKE_EXECUTABLE_SUFFIX}
318 # ##############################################################################
320 # ##############################################################################
322 # toolset: targets for creating/modifying game assets
325 # don't build toolset unless it's a full build
338 CreateSourceGroups(${ac_SOURCE})
340 target_link_libraries(
346 ${LIBWEBSOCKETS_LIBRARIES}
347 ${PLATFORM_LIBRARIES}
351 # CFILEARCHIVER: to create VP file archives
354 add_executable(cfilearchiver
356 ${cfilearchiver_SOURCE}
359 CreateSourceGroups(${cfilearchiver_SOURCE})
362 # CRYPTSTRING: string encryption (for embedded cheat codes)
365 add_executable(cryptstring
367 ${cryptstring_SOURCE}
370 CreateSourceGroups(${cryptstring_SOURCE})
373 # NEBEDIT: FS1 style nebula editor/creator
376 add_executable(nebedit
382 CreateSourceGroups(${nebedit_SOURCE})
384 target_link_libraries(
390 ${wxWidgets_LIBRARIES}
391 ${LIBWEBSOCKETS_LIBRARIES}
392 ${PLATFORM_LIBRARIES}
395 # wxWidgets appears to need c++11 for one or more headers
397 set_target_properties(nebedit PROPERTIES COMPILE_FLAGS -std=c++11)
401 # POFVIEW: model viewer
404 add_executable(pofview
411 CreateSourceGroups(${pofview_SOURCE})
413 target_link_libraries(
419 ${wxWidgets_LIBRARIES}
420 ${LIBWEBSOCKETS_LIBRARIES}
421 ${PLATFORM_LIBRARIES}
424 # wxWidgets appears to need c++11 for one or more headers
426 set_target_properties(pofview PROPERTIES COMPILE_FLAGS -std=c++11)
430 # SCRAMBLE: file-based encryption for TBLs
433 add_executable(scramble
439 CreateSourceGroups(${scramble_SOURCE})
442 # FONTTOOL: create font files / edit kerning data
445 add_executable(fonttool
451 CreateSourceGroups(${fonttool_SOURCE})
453 # background setup, to allow running from build location without installing
454 add_custom_command(TARGET fonttool
456 COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/src/fonttool"
457 COMMAND ${CMAKE_COMMAND} -E copy "${PROJECT_SOURCE_DIR}/src/fonttool/fonttool.pcx" "${CMAKE_CURRENT_BINARY_DIR}/src/fonttool"
460 target_link_libraries(
466 ${LIBWEBSOCKETS_LIBRARIES}
467 ${PLATFORM_LIBRARIES}
471 # custom target to build all tools in one pass
474 add_custom_target(tools)
476 add_dependencies(tools
489 # ##############################################################################
492 # optionally include any dev/user preferred build commands and/or options
495 include(custom.cmake OPTIONAL)