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 'Debug' as none was specified.")
23 set(CMAKE_BUILD_TYPE Debug 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"
26 "MinSizeRel" "RelWithDebInfo")
31 add_definitions(-DMAKE_FS1)
34 add_definitions(-DDEMO -DFS1_DEMO)
38 add_definitions(-DFS2_DEMO)
43 set(PLATFORM_LIBRARIES "")
45 add_definitions(-DPLAT_UNIX)
46 add_definitions(-Wall)
47 add_definitions(-Wshadow)
48 # add_definitions(-Wno-format-y2k)
49 # add_definitions(-Wno-deprecated)
50 add_definitions(-fsigned-char)
52 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DNDEBUG -DRELEASE_REAL -g -O2")
53 set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -DNDEBUG -Os")
54 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG -DRELEASE_REAL -O2")
55 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g3")
57 set(SDL2DIR "${CMAKE_SOURCE_DIR}/../Support/SDL2" CACHE PATH "Path to SDL2")
58 set(OPENALDIR "${CMAKE_SOURCE_DIR}/../Support/OpenAL" CACHE PATH "Path to OpenAL")
59 set(LWSDIR "${CMAKE_SOURCE_DIR}/../Support/libwebsockets" CACHE PATH "Path to libwebsockets")
60 set(WXWIDGETSDIR "${CMAKE_SOURCE_DIR}/../Support/wxWidgets" CACHE PATH "Path to wxWidgets")
61 set(ANGLEDIR "${CMAKE_SOURCE_DIR}/../Support/ANGLE" CACHE PATH "Path to ANGLE")
63 set(PLATFORM_LIBRARIES
65 ${ANGLEDIR}/lib/libEGL.lib
66 ${ANGLEDIR}/lib/libGLESv2.lib
69 add_definitions(/D _CRT_SECURE_NO_WARNINGS)
71 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
72 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4100") # unreferenced parameter
73 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4127") # conditional expression is constant: do { } while (0)
74 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4996") # deprecated functions: fopen, fileno, ...
76 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT")
77 set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /MT")
78 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
79 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
89 set(BIN_SUFFIX "${BIN_SUFFIX}demo")
92 find_package(SDL2 "2.0.5" REQUIRED)
93 find_package(OpenGL REQUIRED)
94 find_package(OpenAL REQUIRED)
95 find_package(LibWebSockets REQUIRED)
97 find_package(wxWidgets COMPONENTS core base gl net)
98 include(${wxWidgets_USE_FILE})
100 # ##############################################################################
104 ${PROJECT_SOURCE_DIR}/include
105 ${CMAKE_BINARY_DIR}/include
107 ${OPENAL_INCLUDE_DIR}
108 ${LIBWEBSOCKETS_INCLUDE_DIR}
109 ${wxWidgets_INCLUDE_DIRS}
113 add_subdirectory(src)
114 add_subdirectory(include)
117 # ##############################################################################
121 # custom target for source tree version info
124 add_custom_target(buildver
125 COMMAND ${CMAKE_COMMAND}
126 -DSOURCE_DIR=${CMAKE_SOURCE_DIR}
127 -DBINARY_DIR=${CMAKE_BINARY_DIR}
128 -P ${CMAKE_SOURCE_DIR}/cmake/GitInfo.cmake
129 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
130 SOURCES ${CMAKE_SOURCE_DIR}/cmake/GitInfo.cmake
134 # main code/game library
145 CreateSourceGroups(${code_SOURCE} ${platform_SOURCE})
147 add_dependencies(code
155 set(FS_BINARY "fs${BIN_SUFFIX}")
157 add_executable(${FS_BINARY}
163 CreateSourceGroups(${freespace_SOURCE})
165 target_link_libraries(
171 ${LIBWEBSOCKETS_LIBRARIES}
172 ${PLATFORM_LIBRARIES}
176 set_target_properties(${FS_BINARY} PROPERTIES PROJECT_LABEL "Freespace")
178 set_target_properties(${FS_BINARY} PROPERTIES PROJECT_LABEL "Freespace2")
185 set(LAUNCHER_BINARY "freespace${BIN_SUFFIX}")
187 add_executable(${LAUNCHER_BINARY}
193 CreateSourceGroups(${launcher_SOURCE})
195 target_link_libraries(
200 ${wxWidgets_LIBRARIES}
201 ${PLATFORM_LIBRARIES}
204 set_target_properties(${LAUNCHER_BINARY} PROPERTIES PROJECT_LABEL "Launcher")
206 # wxWidgets appears to need c++11 for one or more headers
208 set_target_properties(${LAUNCHER_BINARY} PROPERTIES COMPILE_FLAGS -std=c++11)
212 # standalone server GUI
216 if(NOT FS1 OR NOT DEMO)
218 set(STANDALONE_BINARY fsstandalone)
220 set(STANDALONE_BINARY fs2standalone)
223 add_executable(${STANDALONE_BINARY}
226 ${standalone_HEADERS}
229 CreateSourceGroups(${standalone_SOURCE})
231 target_link_libraries(
234 ${wxWidgets_LIBRARIES}
235 ${LIBWEBSOCKETS_LIBRARIES}
236 ${PLATFORM_LIBRARIES}
239 set_target_properties(${STANDALONE_BINARY} PROPERTIES PROJECT_LABEL "Standalone")
241 # wxWidgets appears to need c++11 for one or more headers
243 set_target_properties(${STANDALONE_BINARY} PROPERTIES COMPILE_FLAGS -std=c++11)
248 # extra rule to make sure we cleanup all exe variants
251 set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
253 fsdemo${CMAKE_EXECUTABLE_SUFFIX}
254 freespacedemo${CMAKE_EXECUTABLE_SUFFIX}
256 fs${CMAKE_EXECUTABLE_SUFFIX}
257 freespace${CMAKE_EXECUTABLE_SUFFIX}
259 fs2demo${CMAKE_EXECUTABLE_SUFFIX}
260 freespace2demo${CMAKE_EXECUTABLE_SUFFIX}
262 fs2${CMAKE_EXECUTABLE_SUFFIX}
263 freespace2${CMAKE_EXECUTABLE_SUFFIX}
265 fsstandalone${CMAKE_EXECUTABLE_SUFFIX}
266 fs2standalone${CMAKE_EXECUTABLE_SUFFIX}
270 # ##############################################################################
272 # ##############################################################################
274 # toolset: targets for creating/modifying game assets
277 # don't build toolset unless it's a full build
290 CreateSourceGroups(${ac_SOURCE})
292 target_link_libraries(
298 ${LIBWEBSOCKETS_LIBRARIES}
299 ${PLATFORM_LIBRARIES}
303 # CFILEARCHIVER: to create VP file archives
306 add_executable(cfilearchiver
308 ${cfilearchiver_SOURCE}
311 CreateSourceGroups(${cfilearchiver_SOURCE})
314 # CRYPTSTRING: string encryption (for embedded cheat codes)
317 add_executable(cryptstring
319 ${cryptstring_SOURCE}
322 CreateSourceGroups(${cryptstring_SOURCE})
325 # NEBEDIT: FS1 style nebula editor/creator
328 add_executable(nebedit
334 CreateSourceGroups(${nebedit_SOURCE})
336 target_link_libraries(
342 ${wxWidgets_LIBRARIES}
343 ${LIBWEBSOCKETS_LIBRARIES}
344 ${PLATFORM_LIBRARIES}
347 # wxWidgets appears to need c++11 for one or more headers
349 set_target_properties(nebedit PROPERTIES COMPILE_FLAGS -std=c++11)
353 # POFVIEW: model viewer
356 add_executable(pofview
363 CreateSourceGroups(${pofview_SOURCE})
365 target_link_libraries(
371 ${wxWidgets_LIBRARIES}
372 ${LIBWEBSOCKETS_LIBRARIES}
373 ${PLATFORM_LIBRARIES}
376 # wxWidgets appears to need c++11 for one or more headers
378 set_target_properties(pofview PROPERTIES COMPILE_FLAGS -std=c++11)
382 # SCRAMBLE: file-based encryption for TBLs
385 add_executable(scramble
391 CreateSourceGroups(${scramble_SOURCE})
394 # FONTTOOL: create font files / edit kerning data
397 add_executable(fonttool
403 CreateSourceGroups(${fonttool_SOURCE})
405 # background setup, to allow running from build location without installing
406 add_custom_command(TARGET fonttool
408 COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/src/fonttool"
409 COMMAND ${CMAKE_COMMAND} -E copy "${PROJECT_SOURCE_DIR}/src/fonttool/fonttool.pcx" "${CMAKE_CURRENT_BINARY_DIR}/src/fonttool"
412 target_link_libraries(
418 ${LIBWEBSOCKETS_LIBRARIES}
419 ${PLATFORM_LIBRARIES}
423 # custom target to build all tools in one pass
426 add_custom_target(tools)
428 add_dependencies(tools
441 # ##############################################################################
444 # optionally include any dev/user preferred build commands and/or options
447 include(custom.cmake OPTIONAL)