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 add_definitions(-DLEGACY_GL)
54 set(PLATFORM_LIBRARIES "")
56 add_definitions(-DPLAT_UNIX)
58 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
59 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wshadow")
60 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsigned-char")
62 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -g -O2 -DRELEASE_REAL")
63 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -DRELEASE_REAL")
64 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g3")
66 set(SDL2DIR "${CMAKE_SOURCE_DIR}/../Support/SDL2" CACHE PATH "Path to SDL2")
67 set(OPENALDIR "${CMAKE_SOURCE_DIR}/../Support/OpenAL" CACHE PATH "Path to OpenAL")
68 set(LWSDIR "${CMAKE_SOURCE_DIR}/../Support/libwebsockets" CACHE PATH "Path to libwebsockets")
69 set(WXWIDGETSDIR "${CMAKE_SOURCE_DIR}/../Support/wxWidgets" CACHE PATH "Path to wxWidgets")
70 set(ANGLEDIR "${CMAKE_SOURCE_DIR}/../Support/ANGLE" CACHE PATH "Path to ANGLE")
72 set(PLATFORM_LIBRARIES
74 ${ANGLEDIR}/lib/libEGL.lib
75 ${ANGLEDIR}/lib/libGLESv2.lib
78 add_definitions(/D _CRT_SECURE_NO_WARNINGS)
80 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
81 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4100") # unreferenced parameter
82 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4127") # conditional expression is constant: do { } while (0)
83 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4996") # deprecated functions: fopen, fileno, ...
85 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT /D RELEASE_REAL")
86 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT /D RELEASE_REAL")
87 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
97 set(BIN_SUFFIX "${BIN_SUFFIX}demo")
100 find_package(SDL2 "2.0.5" REQUIRED)
101 find_package(OpenGL REQUIRED)
102 find_package(OpenAL REQUIRED)
105 find_package(LibWebSockets REQUIRED)
107 find_package(wxWidgets COMPONENTS core base gl net)
108 include(${wxWidgets_USE_FILE})
111 # ##############################################################################
115 ${PROJECT_SOURCE_DIR}/include
116 ${CMAKE_BINARY_DIR}/include
118 ${OPENAL_INCLUDE_DIR}
119 ${LIBWEBSOCKETS_INCLUDE_DIR}
120 ${wxWidgets_INCLUDE_DIRS}
124 add_subdirectory(src)
125 add_subdirectory(include)
128 # ##############################################################################
132 # custom target for source tree version info
135 add_custom_target(buildver
136 COMMAND ${CMAKE_COMMAND}
137 -DSOURCE_DIR=${CMAKE_SOURCE_DIR}
138 -DBINARY_DIR=${CMAKE_BINARY_DIR}
139 -P ${CMAKE_SOURCE_DIR}/cmake/GitInfo.cmake
140 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
141 SOURCES ${CMAKE_SOURCE_DIR}/cmake/GitInfo.cmake
145 # main code/game library
156 CreateSourceGroups(${code_SOURCE} ${platform_SOURCE})
158 add_dependencies(code
166 set(FS_BINARY "fs${BIN_SUFFIX}")
168 add_executable(${FS_BINARY}
174 CreateSourceGroups(${freespace_SOURCE})
176 target_link_libraries(
182 ${LIBWEBSOCKETS_LIBRARIES}
183 ${PLATFORM_LIBRARIES}
187 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@/")
191 set_target_properties(${FS_BINARY} PROPERTIES PROJECT_LABEL "Freespace")
193 set_target_properties(${FS_BINARY} PROPERTIES PROJECT_LABEL "Freespace2")
201 set(LAUNCHER_BINARY "freespace${BIN_SUFFIX}")
203 add_executable(${LAUNCHER_BINARY}
209 CreateSourceGroups(${launcher_SOURCE})
211 target_link_libraries(
216 ${wxWidgets_LIBRARIES}
217 ${PLATFORM_LIBRARIES}
220 set_target_properties(${LAUNCHER_BINARY} PROPERTIES PROJECT_LABEL "Launcher")
222 # wxWidgets appears to need c++11 for one or more headers
224 set_target_properties(${LAUNCHER_BINARY} PROPERTIES COMPILE_FLAGS -std=c++11)
228 # standalone server GUI
232 if(NOT FS1 OR NOT DEMO)
234 set(STANDALONE_BINARY fsstandalone)
236 set(STANDALONE_BINARY fs2standalone)
239 add_executable(${STANDALONE_BINARY}
242 ${standalone_HEADERS}
245 CreateSourceGroups(${standalone_SOURCE})
247 target_link_libraries(
250 ${wxWidgets_LIBRARIES}
251 ${LIBWEBSOCKETS_LIBRARIES}
252 ${PLATFORM_LIBRARIES}
255 set_target_properties(${STANDALONE_BINARY} PROPERTIES PROJECT_LABEL "Standalone")
257 # wxWidgets appears to need c++11 for one or more headers
259 set_target_properties(${STANDALONE_BINARY} PROPERTIES COMPILE_FLAGS -std=c++11)
264 # extra rule to make sure we cleanup all exe variants
267 set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
269 fsdemo${CMAKE_EXECUTABLE_SUFFIX}
270 fsdemo${CMAKE_EXECUTABLE_SUFFIX}.mem
273 freespacedemo${CMAKE_EXECUTABLE_SUFFIX}
275 fs${CMAKE_EXECUTABLE_SUFFIX}
276 fs${CMAKE_EXECUTABLE_SUFFIX}.mem
279 freespace${CMAKE_EXECUTABLE_SUFFIX}
281 fs2demo${CMAKE_EXECUTABLE_SUFFIX}
282 fs2demo${CMAKE_EXECUTABLE_SUFFIX}.mem
285 freespace2demo${CMAKE_EXECUTABLE_SUFFIX}
287 fs2${CMAKE_EXECUTABLE_SUFFIX}
288 fs2${CMAKE_EXECUTABLE_SUFFIX}.mem
291 freespace2${CMAKE_EXECUTABLE_SUFFIX}
293 fsstandalone${CMAKE_EXECUTABLE_SUFFIX}
294 fs2standalone${CMAKE_EXECUTABLE_SUFFIX}
298 # ##############################################################################
300 # ##############################################################################
302 # toolset: targets for creating/modifying game assets
305 # don't build toolset unless it's a full build
318 CreateSourceGroups(${ac_SOURCE})
320 target_link_libraries(
326 ${LIBWEBSOCKETS_LIBRARIES}
327 ${PLATFORM_LIBRARIES}
331 # CFILEARCHIVER: to create VP file archives
334 add_executable(cfilearchiver
336 ${cfilearchiver_SOURCE}
339 CreateSourceGroups(${cfilearchiver_SOURCE})
342 # CRYPTSTRING: string encryption (for embedded cheat codes)
345 add_executable(cryptstring
347 ${cryptstring_SOURCE}
350 CreateSourceGroups(${cryptstring_SOURCE})
353 # NEBEDIT: FS1 style nebula editor/creator
356 add_executable(nebedit
362 CreateSourceGroups(${nebedit_SOURCE})
364 target_link_libraries(
370 ${wxWidgets_LIBRARIES}
371 ${LIBWEBSOCKETS_LIBRARIES}
372 ${PLATFORM_LIBRARIES}
375 # wxWidgets appears to need c++11 for one or more headers
377 set_target_properties(nebedit PROPERTIES COMPILE_FLAGS -std=c++11)
381 # POFVIEW: model viewer
384 add_executable(pofview
391 CreateSourceGroups(${pofview_SOURCE})
393 target_link_libraries(
399 ${wxWidgets_LIBRARIES}
400 ${LIBWEBSOCKETS_LIBRARIES}
401 ${PLATFORM_LIBRARIES}
404 # wxWidgets appears to need c++11 for one or more headers
406 set_target_properties(pofview PROPERTIES COMPILE_FLAGS -std=c++11)
410 # SCRAMBLE: file-based encryption for TBLs
413 add_executable(scramble
419 CreateSourceGroups(${scramble_SOURCE})
422 # FONTTOOL: create font files / edit kerning data
425 add_executable(fonttool
431 CreateSourceGroups(${fonttool_SOURCE})
433 # background setup, to allow running from build location without installing
434 add_custom_command(TARGET fonttool
436 COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/src/fonttool"
437 COMMAND ${CMAKE_COMMAND} -E copy "${PROJECT_SOURCE_DIR}/src/fonttool/fonttool.pcx" "${CMAKE_CURRENT_BINARY_DIR}/src/fonttool"
440 target_link_libraries(
446 ${LIBWEBSOCKETS_LIBRARIES}
447 ${PLATFORM_LIBRARIES}
451 # custom target to build all tools in one pass
454 add_custom_target(tools)
456 add_dependencies(tools
469 # ##############################################################################
471 endif(NOT EMSCRIPTEN)
473 # optionally include any dev/user preferred build commands and/or options
476 #include(custom.cmake OPTIONAL)