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 add_definitions(-s USE_SDL=2)
43 add_definitions(-s FULL_ES2=1)
44 add_definitions(-s DISABLE_EXCEPTION_CATCHING=0)
46 set(CMAKE_EXECUTABLE_SUFFIX ".html")
50 set(PLATFORM_LIBRARIES "")
52 add_definitions(-DPLAT_UNIX)
54 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
55 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wshadow")
56 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsigned-char")
58 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -g -O2 -DRELEASE_REAL")
59 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -DRELEASE_REAL")
60 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g3")
62 set(SDL2DIR "${CMAKE_SOURCE_DIR}/../Support/SDL2" CACHE PATH "Path to SDL2")
63 set(OPENALDIR "${CMAKE_SOURCE_DIR}/../Support/OpenAL" CACHE PATH "Path to OpenAL")
64 set(LWSDIR "${CMAKE_SOURCE_DIR}/../Support/libwebsockets" CACHE PATH "Path to libwebsockets")
65 set(WXWIDGETSDIR "${CMAKE_SOURCE_DIR}/../Support/wxWidgets" CACHE PATH "Path to wxWidgets")
66 set(ANGLEDIR "${CMAKE_SOURCE_DIR}/../Support/ANGLE" CACHE PATH "Path to ANGLE")
68 set(PLATFORM_LIBRARIES
70 ${ANGLEDIR}/lib/libEGL.lib
71 ${ANGLEDIR}/lib/libGLESv2.lib
74 add_definitions(/D _CRT_SECURE_NO_WARNINGS)
76 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
77 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4100") # unreferenced parameter
78 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4127") # conditional expression is constant: do { } while (0)
79 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4996") # deprecated functions: fopen, fileno, ...
81 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT /D RELEASE_REAL")
82 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT /D RELEASE_REAL")
83 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
93 set(BIN_SUFFIX "${BIN_SUFFIX}demo")
96 find_package(SDL2 "2.0.5" REQUIRED)
97 find_package(OpenGL REQUIRED)
98 find_package(OpenAL REQUIRED)
101 find_package(LibWebSockets REQUIRED)
103 find_package(wxWidgets COMPONENTS core base gl net)
104 include(${wxWidgets_USE_FILE})
107 # ##############################################################################
111 ${PROJECT_SOURCE_DIR}/include
112 ${CMAKE_BINARY_DIR}/include
114 ${OPENAL_INCLUDE_DIR}
115 ${LIBWEBSOCKETS_INCLUDE_DIR}
116 ${wxWidgets_INCLUDE_DIRS}
120 add_subdirectory(src)
121 add_subdirectory(include)
124 # ##############################################################################
128 # custom target for source tree version info
131 add_custom_target(buildver
132 COMMAND ${CMAKE_COMMAND}
133 -DSOURCE_DIR=${CMAKE_SOURCE_DIR}
134 -DBINARY_DIR=${CMAKE_BINARY_DIR}
135 -P ${CMAKE_SOURCE_DIR}/cmake/GitInfo.cmake
136 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
137 SOURCES ${CMAKE_SOURCE_DIR}/cmake/GitInfo.cmake
141 # main code/game library
152 CreateSourceGroups(${code_SOURCE} ${platform_SOURCE})
154 add_dependencies(code
162 set(FS_BINARY "fs${BIN_SUFFIX}")
164 add_executable(${FS_BINARY}
170 CreateSourceGroups(${freespace_SOURCE})
172 target_link_libraries(
178 ${LIBWEBSOCKETS_LIBRARIES}
179 ${PLATFORM_LIBRARIES}
183 set_target_properties(${FS_BINARY} PROPERTIES LINK_FLAGS "-s USE_SDL=2 -s FULL_ES2=1 -s TOTAL_MEMORY=268435456 -s DISABLE_EXCEPTION_CATCHING=0 --preload-file game@/")
187 set_target_properties(${FS_BINARY} PROPERTIES PROJECT_LABEL "Freespace")
189 set_target_properties(${FS_BINARY} PROPERTIES PROJECT_LABEL "Freespace2")
197 set(LAUNCHER_BINARY "freespace${BIN_SUFFIX}")
199 add_executable(${LAUNCHER_BINARY}
205 CreateSourceGroups(${launcher_SOURCE})
207 target_link_libraries(
212 ${wxWidgets_LIBRARIES}
213 ${PLATFORM_LIBRARIES}
216 set_target_properties(${LAUNCHER_BINARY} PROPERTIES PROJECT_LABEL "Launcher")
218 # wxWidgets appears to need c++11 for one or more headers
220 set_target_properties(${LAUNCHER_BINARY} PROPERTIES COMPILE_FLAGS -std=c++11)
224 # standalone server GUI
228 if(NOT FS1 OR NOT DEMO)
230 set(STANDALONE_BINARY fsstandalone)
232 set(STANDALONE_BINARY fs2standalone)
235 add_executable(${STANDALONE_BINARY}
238 ${standalone_HEADERS}
241 CreateSourceGroups(${standalone_SOURCE})
243 target_link_libraries(
246 ${wxWidgets_LIBRARIES}
247 ${LIBWEBSOCKETS_LIBRARIES}
248 ${PLATFORM_LIBRARIES}
251 set_target_properties(${STANDALONE_BINARY} PROPERTIES PROJECT_LABEL "Standalone")
253 # wxWidgets appears to need c++11 for one or more headers
255 set_target_properties(${STANDALONE_BINARY} PROPERTIES COMPILE_FLAGS -std=c++11)
260 # extra rule to make sure we cleanup all exe variants
263 set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
265 fsdemo${CMAKE_EXECUTABLE_SUFFIX}
266 fsdemo${CMAKE_EXECUTABLE_SUFFIX}.mem
269 freespacedemo${CMAKE_EXECUTABLE_SUFFIX}
271 fs${CMAKE_EXECUTABLE_SUFFIX}
272 fs${CMAKE_EXECUTABLE_SUFFIX}.mem
275 freespace${CMAKE_EXECUTABLE_SUFFIX}
277 fs2demo${CMAKE_EXECUTABLE_SUFFIX}
278 fs2demo${CMAKE_EXECUTABLE_SUFFIX}.mem
281 freespace2demo${CMAKE_EXECUTABLE_SUFFIX}
283 fs2${CMAKE_EXECUTABLE_SUFFIX}
284 fs2${CMAKE_EXECUTABLE_SUFFIX}.mem
287 freespace2${CMAKE_EXECUTABLE_SUFFIX}
289 fsstandalone${CMAKE_EXECUTABLE_SUFFIX}
290 fs2standalone${CMAKE_EXECUTABLE_SUFFIX}
294 # ##############################################################################
296 # ##############################################################################
298 # toolset: targets for creating/modifying game assets
301 # don't build toolset unless it's a full build
314 CreateSourceGroups(${ac_SOURCE})
316 target_link_libraries(
322 ${LIBWEBSOCKETS_LIBRARIES}
323 ${PLATFORM_LIBRARIES}
327 # CFILEARCHIVER: to create VP file archives
330 add_executable(cfilearchiver
332 ${cfilearchiver_SOURCE}
335 CreateSourceGroups(${cfilearchiver_SOURCE})
338 # CRYPTSTRING: string encryption (for embedded cheat codes)
341 add_executable(cryptstring
343 ${cryptstring_SOURCE}
346 CreateSourceGroups(${cryptstring_SOURCE})
349 # NEBEDIT: FS1 style nebula editor/creator
352 add_executable(nebedit
358 CreateSourceGroups(${nebedit_SOURCE})
360 target_link_libraries(
366 ${wxWidgets_LIBRARIES}
367 ${LIBWEBSOCKETS_LIBRARIES}
368 ${PLATFORM_LIBRARIES}
371 # wxWidgets appears to need c++11 for one or more headers
373 set_target_properties(nebedit PROPERTIES COMPILE_FLAGS -std=c++11)
377 # POFVIEW: model viewer
380 add_executable(pofview
387 CreateSourceGroups(${pofview_SOURCE})
389 target_link_libraries(
395 ${wxWidgets_LIBRARIES}
396 ${LIBWEBSOCKETS_LIBRARIES}
397 ${PLATFORM_LIBRARIES}
400 # wxWidgets appears to need c++11 for one or more headers
402 set_target_properties(pofview PROPERTIES COMPILE_FLAGS -std=c++11)
406 # SCRAMBLE: file-based encryption for TBLs
409 add_executable(scramble
415 CreateSourceGroups(${scramble_SOURCE})
418 # FONTTOOL: create font files / edit kerning data
421 add_executable(fonttool
427 CreateSourceGroups(${fonttool_SOURCE})
429 # background setup, to allow running from build location without installing
430 add_custom_command(TARGET fonttool
432 COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/src/fonttool"
433 COMMAND ${CMAKE_COMMAND} -E copy "${PROJECT_SOURCE_DIR}/src/fonttool/fonttool.pcx" "${CMAKE_CURRENT_BINARY_DIR}/src/fonttool"
436 target_link_libraries(
442 ${LIBWEBSOCKETS_LIBRARIES}
443 ${PLATFORM_LIBRARIES}
447 # custom target to build all tools in one pass
450 add_custom_target(tools)
452 add_dependencies(tools
465 # ##############################################################################
467 endif(NOT EMSCRIPTEN)
469 # optionally include any dev/user preferred build commands and/or options
472 #include(custom.cmake OPTIONAL)