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)
42 set(PLATFORM_LIBRARIES "")
44 add_definitions(-DPLAT_UNIX)
46 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
47 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wshadow")
48 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsigned-char")
50 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -g -O2 -DRELEASE_REAL")
51 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -DRELEASE_REAL")
52 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g3")
54 set(SDL2DIR "${CMAKE_SOURCE_DIR}/../Support/SDL2" CACHE PATH "Path to SDL2")
55 set(OPENALDIR "${CMAKE_SOURCE_DIR}/../Support/OpenAL" CACHE PATH "Path to OpenAL")
56 set(LWSDIR "${CMAKE_SOURCE_DIR}/../Support/libwebsockets" CACHE PATH "Path to libwebsockets")
57 set(WXWIDGETSDIR "${CMAKE_SOURCE_DIR}/../Support/wxWidgets" CACHE PATH "Path to wxWidgets")
58 set(ANGLEDIR "${CMAKE_SOURCE_DIR}/../Support/ANGLE" CACHE PATH "Path to ANGLE")
60 set(PLATFORM_LIBRARIES
62 ${ANGLEDIR}/lib/libEGL.lib
63 ${ANGLEDIR}/lib/libGLESv2.lib
66 add_definitions(/D _CRT_SECURE_NO_WARNINGS)
68 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
69 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4100") # unreferenced parameter
70 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4127") # conditional expression is constant: do { } while (0)
71 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4996") # deprecated functions: fopen, fileno, ...
73 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT /D RELEASE_REAL")
74 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT /D RELEASE_REAL")
75 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
85 set(BIN_SUFFIX "${BIN_SUFFIX}demo")
88 find_package(SDL2 "2.0.5" REQUIRED)
89 find_package(OpenGL REQUIRED)
90 find_package(OpenAL REQUIRED)
91 find_package(LibWebSockets REQUIRED)
93 find_package(wxWidgets COMPONENTS core base gl net)
94 include(${wxWidgets_USE_FILE})
96 # ##############################################################################
100 ${PROJECT_SOURCE_DIR}/include
101 ${CMAKE_BINARY_DIR}/include
103 ${OPENAL_INCLUDE_DIR}
104 ${LIBWEBSOCKETS_INCLUDE_DIR}
105 ${wxWidgets_INCLUDE_DIRS}
109 add_subdirectory(src)
110 add_subdirectory(include)
113 # ##############################################################################
117 # custom target for source tree version info
120 add_custom_target(buildver
121 COMMAND ${CMAKE_COMMAND}
122 -DSOURCE_DIR=${CMAKE_SOURCE_DIR}
123 -DBINARY_DIR=${CMAKE_BINARY_DIR}
124 -P ${CMAKE_SOURCE_DIR}/cmake/GitInfo.cmake
125 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
126 SOURCES ${CMAKE_SOURCE_DIR}/cmake/GitInfo.cmake
130 # main code/game library
141 CreateSourceGroups(${code_SOURCE} ${platform_SOURCE})
143 add_dependencies(code
151 set(FS_BINARY "fs${BIN_SUFFIX}")
153 add_executable(${FS_BINARY}
159 CreateSourceGroups(${freespace_SOURCE})
161 target_link_libraries(
167 ${LIBWEBSOCKETS_LIBRARIES}
168 ${PLATFORM_LIBRARIES}
172 set_target_properties(${FS_BINARY} PROPERTIES PROJECT_LABEL "Freespace")
174 set_target_properties(${FS_BINARY} PROPERTIES PROJECT_LABEL "Freespace2")
181 set(LAUNCHER_BINARY "freespace${BIN_SUFFIX}")
183 add_executable(${LAUNCHER_BINARY}
189 CreateSourceGroups(${launcher_SOURCE})
191 target_link_libraries(
196 ${wxWidgets_LIBRARIES}
197 ${PLATFORM_LIBRARIES}
200 set_target_properties(${LAUNCHER_BINARY} PROPERTIES PROJECT_LABEL "Launcher")
202 # wxWidgets appears to need c++11 for one or more headers
204 set_target_properties(${LAUNCHER_BINARY} PROPERTIES COMPILE_FLAGS -std=c++11)
208 # standalone server GUI
212 if(NOT FS1 OR NOT DEMO)
214 set(STANDALONE_BINARY fsstandalone)
216 set(STANDALONE_BINARY fs2standalone)
219 add_executable(${STANDALONE_BINARY}
222 ${standalone_HEADERS}
225 CreateSourceGroups(${standalone_SOURCE})
227 target_link_libraries(
230 ${wxWidgets_LIBRARIES}
231 ${LIBWEBSOCKETS_LIBRARIES}
232 ${PLATFORM_LIBRARIES}
235 set_target_properties(${STANDALONE_BINARY} PROPERTIES PROJECT_LABEL "Standalone")
237 # wxWidgets appears to need c++11 for one or more headers
239 set_target_properties(${STANDALONE_BINARY} PROPERTIES COMPILE_FLAGS -std=c++11)
244 # extra rule to make sure we cleanup all exe variants
247 set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
249 fsdemo${CMAKE_EXECUTABLE_SUFFIX}
250 freespacedemo${CMAKE_EXECUTABLE_SUFFIX}
252 fs${CMAKE_EXECUTABLE_SUFFIX}
253 freespace${CMAKE_EXECUTABLE_SUFFIX}
255 fs2demo${CMAKE_EXECUTABLE_SUFFIX}
256 freespace2demo${CMAKE_EXECUTABLE_SUFFIX}
258 fs2${CMAKE_EXECUTABLE_SUFFIX}
259 freespace2${CMAKE_EXECUTABLE_SUFFIX}
261 fsstandalone${CMAKE_EXECUTABLE_SUFFIX}
262 fs2standalone${CMAKE_EXECUTABLE_SUFFIX}
266 # ##############################################################################
268 # ##############################################################################
270 # toolset: targets for creating/modifying game assets
273 # don't build toolset unless it's a full build
286 CreateSourceGroups(${ac_SOURCE})
288 target_link_libraries(
294 ${LIBWEBSOCKETS_LIBRARIES}
295 ${PLATFORM_LIBRARIES}
299 # CFILEARCHIVER: to create VP file archives
302 add_executable(cfilearchiver
304 ${cfilearchiver_SOURCE}
307 CreateSourceGroups(${cfilearchiver_SOURCE})
310 # CRYPTSTRING: string encryption (for embedded cheat codes)
313 add_executable(cryptstring
315 ${cryptstring_SOURCE}
318 CreateSourceGroups(${cryptstring_SOURCE})
321 # NEBEDIT: FS1 style nebula editor/creator
324 add_executable(nebedit
330 CreateSourceGroups(${nebedit_SOURCE})
332 target_link_libraries(
338 ${wxWidgets_LIBRARIES}
339 ${LIBWEBSOCKETS_LIBRARIES}
340 ${PLATFORM_LIBRARIES}
343 # wxWidgets appears to need c++11 for one or more headers
345 set_target_properties(nebedit PROPERTIES COMPILE_FLAGS -std=c++11)
349 # POFVIEW: model viewer
352 add_executable(pofview
359 CreateSourceGroups(${pofview_SOURCE})
361 target_link_libraries(
367 ${wxWidgets_LIBRARIES}
368 ${LIBWEBSOCKETS_LIBRARIES}
369 ${PLATFORM_LIBRARIES}
372 # wxWidgets appears to need c++11 for one or more headers
374 set_target_properties(pofview PROPERTIES COMPILE_FLAGS -std=c++11)
378 # SCRAMBLE: file-based encryption for TBLs
381 add_executable(scramble
387 CreateSourceGroups(${scramble_SOURCE})
390 # FONTTOOL: create font files / edit kerning data
393 add_executable(fonttool
399 CreateSourceGroups(${fonttool_SOURCE})
401 # background setup, to allow running from build location without installing
402 add_custom_command(TARGET fonttool
404 COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/src/fonttool"
405 COMMAND ${CMAKE_COMMAND} -E copy "${PROJECT_SOURCE_DIR}/src/fonttool/fonttool.pcx" "${CMAKE_CURRENT_BINARY_DIR}/src/fonttool"
408 target_link_libraries(
414 ${LIBWEBSOCKETS_LIBRARIES}
415 ${PLATFORM_LIBRARIES}
419 # custom target to build all tools in one pass
422 add_custom_target(tools)
424 add_dependencies(tools
437 # ##############################################################################
440 # optionally include any dev/user preferred build commands and/or options
443 include(custom.cmake OPTIONAL)