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")
14 find_package(SDL2 "2.0.1" REQUIRED)
15 find_package(OpenGL REQUIRED)
16 find_package(OpenAL REQUIRED)
17 find_package(LibWebSockets REQUIRED)
19 find_package(wxWidgets COMPONENTS core base gl net)
20 include(${wxWidgets_USE_FILE})
22 include(CreateSourceGroups)
25 # ##############################################################################
27 option(FS1 "Build original FreeSpace" OFF)
28 option(DEMO "Create demo build" OFF)
30 if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
31 message(STATUS "Setting build type to 'Debug' as none was specified.")
32 set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build." FORCE)
33 # Set the possible values of build type for cmake-gui
34 set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release"
35 "MinSizeRel" "RelWithDebInfo")
40 add_definitions(-DMAKE_FS1)
43 add_definitions(-DDEMO -DFS1_DEMO)
47 add_definitions(-DFS2_DEMO)
52 set(PLATFORM_LIBRARIES "")
54 add_definitions(-DPLAT_UNIX)
55 add_definitions(-Wall)
56 # add_definitions(-Wno-format-y2k)
57 # add_definitions(-Wno-deprecated)
58 add_definitions(-fsigned-char)
60 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DNDEBUG -g -O2")
61 set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -DNDEBUG -Os")
62 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG -O2")
63 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g3")
65 set(PLATFORM_LIBRARIES
69 add_definitions(/D _CRT_SECURE_NO_WARNINGS)
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, ...
83 set(BIN_SUFFIX "${BIN_SUFFIX}demo")
87 # ##############################################################################
91 ${PROJECT_SOURCE_DIR}/include
94 ${LIBWEBSOCKETS_INCLUDE_DIR}
95 ${wxWidgets_INCLUDE_DIRS}
100 add_subdirectory(include)
103 # ##############################################################################
107 # main code/game library
118 CreateSourceGroups(${code_SOURCE} ${platform_SOURCE})
124 set(FS_BINARY "fs${BIN_SUFFIX}")
126 add_executable(${FS_BINARY}
132 CreateSourceGroups(${freespace_SOURCE})
134 target_link_libraries(
140 ${LIBWEBSOCKETS_LIBRARIES}
141 ${PLATFORM_LIBRARIES}
145 set_target_properties(${FS_BINARY} PROPERTIES PROJECT_LABEL "Freespace")
147 set_target_properties(${FS_BINARY} PROPERTIES PROJECT_LABEL "Freespace2")
154 set(LAUNCHER_BINARY "freespace${BIN_SUFFIX}")
156 add_executable(${LAUNCHER_BINARY}
162 CreateSourceGroups(${launcher_SOURCE})
164 target_link_libraries(
169 ${wxWidgets_LIBRARIES}
170 ${PLATFORM_LIBRARIES}
173 set_target_properties(${LAUNCHER_BINARY} PROPERTIES PROJECT_LABEL "Launcher")
175 # wxWidgets appears to need c++11 for one or more headers
177 set_target_properties(${LAUNCHER_BINARY} PROPERTIES COMPILE_FLAGS -std=c++11)
181 # standalone server GUI
185 set(STANDALONE_BINARY fsstandalone)
187 set(STANDALONE_BINARY fs2standalone)
190 add_executable(${STANDALONE_BINARY}
193 ${standalone_HEADERS}
196 CreateSourceGroups(${standalone_SOURCE})
198 target_link_libraries(
201 ${wxWidgets_LIBRARIES}
202 ${LIBWEBSOCKETS_LIBRARIES}
203 ${PLATFORM_LIBRARIES}
206 set_target_properties(${STANDALONE_BINARY} PROPERTIES PROJECT_LABEL "Standalone")
208 # wxWidgets appears to need c++11 for one or more headers
210 set_target_properties(${STANDALONE_BINARY} PROPERTIES COMPILE_FLAGS -std=c++11)
214 # ##############################################################################
216 # ##############################################################################
218 # toolset: targets for creating/modifying game assets
231 CreateSourceGroups(${ac_SOURCE})
233 target_link_libraries(
239 ${LIBWEBSOCKETS_LIBRARIES}
240 ${PLATFORM_LIBRARIES}
244 # CFILEARCHIVER: to create VP file archives
247 add_executable(cfilearchiver
249 ${cfilearchiver_SOURCE}
252 CreateSourceGroups(${cfilearchiver_SOURCE})
255 # CRYPTSTRING: string encryption (for embedded cheat codes)
258 add_executable(cryptstring
260 ${cryptstring_SOURCE}
263 CreateSourceGroups(${cryptstring_SOURCE})
266 # NEBEDIT: FS1 style nebula editor/creator
269 add_executable(nebedit
275 CreateSourceGroups(${nebedit_SOURCE})
277 target_link_libraries(
283 ${wxWidgets_LIBRARIES}
284 ${LIBWEBSOCKETS_LIBRARIES}
285 ${PLATFORM_LIBRARIES}
288 # wxWidgets appears to need c++11 for one or more headers
290 set_target_properties(nebedit PROPERTIES COMPILE_FLAGS -std=c++11)
294 # POFVIEW: model viewer
297 add_executable(pofview
304 CreateSourceGroups(${pofview_SOURCE})
306 target_link_libraries(
312 ${wxWidgets_LIBRARIES}
313 ${LIBWEBSOCKETS_LIBRARIES}
314 ${PLATFORM_LIBRARIES}
317 # wxWidgets appears to need c++11 for one or more headers
319 set_target_properties(pofview PROPERTIES COMPILE_FLAGS -std=c++11)
323 # SCRAMBLE: file-based encryption for TBLs
326 add_executable(scramble
332 CreateSourceGroups(${scramble_SOURCE})
335 # FONTTOOL: create font files / edit kerning data
338 add_executable(fonttool
345 CreateSourceGroups(${fonttool_SOURCE})
347 # background setup, to allow running from build location without installing
348 add_custom_command(TARGET fonttool
350 COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/src/fonttool"
351 COMMAND ${CMAKE_COMMAND} -E copy "${PROJECT_SOURCE_DIR}/src/fonttool/fonttool.pcx" "${CMAKE_CURRENT_BINARY_DIR}/src/fonttool"
354 target_link_libraries(
360 ${LIBWEBSOCKETS_LIBRARIES}
361 ${PLATFORM_LIBRARIES}
365 # custom target to build all tools in one pass
368 add_custom_target(tools)
370 add_dependencies(tools
381 # ##############################################################################
384 # optionally include any dev/user preferred build commands and/or options
387 include(custom.cmake OPTIONAL)