CMake build system
This commit is contained in:
1 parent
4fed624cff
commit
4c6f3f81eb
40 files changed
+1641
No files matched your search
@@ -0,0 +1,4 @@
|
||||
include(platforms/emscripten)
|
||||
include(platforms/macos)
|
||||
include(platforms/unix)
|
||||
include(platforms/windows)
|
||||
@@ -0,0 +1,50 @@
|
||||
# Emscripten specific settings
|
||||
|
||||
if(NOT EMSCRIPTEN)
|
||||
return()
|
||||
endif()
|
||||
|
||||
set(CMAKE_EXECUTABLE_SUFFIX ".js")
|
||||
set(CMAKE_SHARED_LIBRARY_SUFFIX ".wasm")
|
||||
|
||||
# Disable options that don't make sense for emscripten
|
||||
set(BUILD_SERVER OFF CACHE INTERNAL "")
|
||||
set(BUILD_RENDERER_GL1 OFF CACHE INTERNAL "")
|
||||
set(USE_RENDERER_DLOPEN OFF CACHE INTERNAL "")
|
||||
set(USE_OPENAL_DLOPEN OFF CACHE INTERNAL "")
|
||||
set(BUILD_GAME_LIBRARIES OFF CACHE INTERNAL "")
|
||||
set(USE_HTTP OFF CACHE INTERNAL "")
|
||||
|
||||
list(APPEND CLIENT_COMPILE_OPTIONS -sUSE_SDL=2)
|
||||
|
||||
list(APPEND CLIENT_LINK_OPTIONS
|
||||
-sTOTAL_MEMORY=256MB
|
||||
-sSTACK_SIZE=5MB
|
||||
-sMIN_WEBGL_VERSION=1
|
||||
-sMAX_WEBGL_VERSION=2
|
||||
-sEXPORTED_RUNTIME_METHODS=FS,addRunDependency,removeRunDependency
|
||||
-sEXIT_RUNTIME=1
|
||||
-sEXPORT_ES6
|
||||
-sEXPORT_NAME=${CLIENT_NAME}
|
||||
)
|
||||
|
||||
option(EMSCRIPTEN_PRELOAD_FILE "Preload game files into .data file" OFF)
|
||||
|
||||
if(EMSCRIPTEN_PRELOAD_FILE)
|
||||
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/${BASEGAME}")
|
||||
message(FATAL_ERROR "No files in '${BASEGAME}' directory for emscripten to preload.")
|
||||
endif()
|
||||
list(APPEND CLIENT_LINK_OPTIONS "--preload-file ${BASEGAME}")
|
||||
endif()
|
||||
|
||||
set(POST_CLIENT_CONFIGURE_FUNCTION deploy_shell_files)
|
||||
|
||||
function(deploy_shell_files)
|
||||
configure_file(${SOURCE_DIR}/web/client.html.in
|
||||
${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${CLIENT_NAME}.html @ONLY)
|
||||
|
||||
if(NOT EMSCRIPTEN_PRELOAD_FILE)
|
||||
configure_file(${SOURCE_DIR}/web/client-config.json
|
||||
${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${CLIENT_NAME}-config.json COPYONLY)
|
||||
endif()
|
||||
endfunction()
|
||||
@@ -0,0 +1,80 @@
|
||||
# macOS specific settings
|
||||
|
||||
if(NOT APPLE)
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Including the arch in the filename doesn't really make sense
|
||||
# on macOS where we're building Universal Binaries
|
||||
set(USE_ARCHLESS_FILENAMES ON CACHE INTERNAL "")
|
||||
|
||||
option(BUILD_MACOS_APP "Deploy as a macOS .app" ON)
|
||||
|
||||
enable_language(OBJC)
|
||||
|
||||
list(APPEND SYSTEM_PLATFORM_SOURCES ${SOURCE_DIR}/sys/sys_osx.m)
|
||||
|
||||
list(APPEND COMMON_LIBRARIES "-framework Cocoa")
|
||||
list(APPEND CLIENT_LIBRARIES "-framework IOKit")
|
||||
list(APPEND RENDERER_LIBRARIES "-framework OpenGL")
|
||||
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET 11.0)
|
||||
set(CMAKE_OSX_ARCHITECTURES arm64;x86_64)
|
||||
|
||||
if(BUILD_MACOS_APP)
|
||||
set(CLIENT_EXECUTABLE_OPTIONS MACOSX_BUNDLE)
|
||||
set(POST_CLIENT_CONFIGURE_FUNCTION finish_macos_app)
|
||||
endif()
|
||||
|
||||
function(finish_macos_app)
|
||||
get_filename_component(MACOS_ICON_FILE ${MACOS_ICON_PATH} NAME)
|
||||
|
||||
set(MACOS_APP_BUNDLE_NAME ${CLIENT_NAME})
|
||||
set(MACOS_APP_EXECUTABLE_NAME ${CLIENT_BINARY})
|
||||
set(MACOS_APP_GUI_IDENTIFIER ${MACOS_BUNDLE_ID})
|
||||
set(MACOS_APP_ICON_FILE ${MACOS_ICON_FILE})
|
||||
set(MACOS_APP_SHORT_VERSION_STRING ${PRODUCT_VERSION})
|
||||
set(MACOS_APP_BUNDLE_VERSION ${PRODUCT_VERSION})
|
||||
set(MACOS_APP_DEPLOYMENT_TARGET ${CMAKE_OSX_DEPLOYMENT_TARGET})
|
||||
set(MACOS_APP_COPYRIGHT ${COPYRIGHT})
|
||||
|
||||
if(PROTOCOL_HANDLER_SCHEME)
|
||||
set(MACOS_APP_PLIST_URL_TYPES
|
||||
"<key>CFBundleURLTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleURLName</key>
|
||||
<string>${MACOS_APP_BUNDLE_NAME}</string>
|
||||
<key>CFBundleURLSchemes</key>
|
||||
<array>
|
||||
<string>${PROTOCOL_HANDLER_SCHEME}</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>")
|
||||
else()
|
||||
set(MACOS_APP_PLIST_URL_TYPES "")
|
||||
endif()
|
||||
|
||||
configure_file(${CMAKE_SOURCE_DIR}/cmake/Info.plist.in
|
||||
${CMAKE_BINARY_DIR}/Info.plist @ONLY)
|
||||
|
||||
set_target_properties(${CLIENT_BINARY} PROPERTIES
|
||||
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_BINARY_DIR}/Info.plist)
|
||||
|
||||
set(RESOURCES_DIR $<TARGET_FILE_DIR:${CLIENT_BINARY}>/../Resources)
|
||||
add_custom_command(TARGET ${CLIENT_BINARY} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${RESOURCES_DIR}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${MACOS_ICON_PATH} ${RESOURCES_DIR})
|
||||
|
||||
if(USE_RENDERER_DLOPEN)
|
||||
set(MACOS_APP_BINARY_DIR ${CLIENT_BINARY}.app/Contents/MacOS)
|
||||
|
||||
if(BUILD_RENDERER_GL1)
|
||||
set_output_dirs(${RENDERER_GL1_BINARY} SUBDIRECTORY ${MACOS_APP_BINARY_DIR})
|
||||
endif()
|
||||
|
||||
if(BUILD_RENDERER_GL2)
|
||||
set_output_dirs(${RENDERER_GL2_BINARY} SUBDIRECTORY ${MACOS_APP_BINARY_DIR})
|
||||
endif()
|
||||
endif()
|
||||
endfunction()
|
||||
@@ -0,0 +1,21 @@
|
||||
# Unix specific settings (this includes macOS and emscripten)
|
||||
|
||||
if(NOT UNIX)
|
||||
return()
|
||||
endif()
|
||||
|
||||
list(APPEND SYSTEM_PLATFORM_SOURCES ${SOURCE_DIR}/sys/sys_unix.c)
|
||||
|
||||
if(EMSCRIPTEN)
|
||||
list(APPEND SYSTEM_PLATFORM_SOURCES ${SOURCE_DIR}/sys/con_passive.c)
|
||||
else()
|
||||
list(APPEND SYSTEM_PLATFORM_SOURCES ${SOURCE_DIR}/sys/con_tty.c)
|
||||
endif()
|
||||
|
||||
if(USE_HTTP)
|
||||
list(APPEND CLIENT_PLATFORM_SOURCES ${SOURCE_DIR}/client/cl_http_curl.c)
|
||||
endif()
|
||||
|
||||
list(APPEND COMMON_LIBRARIES dl m)
|
||||
|
||||
list(APPEND CLIENT_DEFINITIONS USE_ICON)
|
||||
@@ -0,0 +1,35 @@
|
||||
# Windows specific settings
|
||||
|
||||
if(NOT WIN32)
|
||||
return()
|
||||
endif()
|
||||
|
||||
list(APPEND SYSTEM_PLATFORM_SOURCES
|
||||
${SOURCE_DIR}/sys/sys_win32.c
|
||||
${SOURCE_DIR}/sys/con_passive.c
|
||||
${SOURCE_DIR}/sys/win_resource.rc
|
||||
)
|
||||
|
||||
if(USE_HTTP)
|
||||
list(APPEND CLIENT_PLATFORM_SOURCES ${SOURCE_DIR}/client/cl_http_windows.c)
|
||||
list(APPEND CLIENT_LIBRARIES wininet)
|
||||
endif()
|
||||
|
||||
list(APPEND COMMON_LIBRARIES ws2_32 winmm psapi)
|
||||
|
||||
if(MINGW)
|
||||
list(APPEND COMMON_LIBRARIES mingw32)
|
||||
endif()
|
||||
|
||||
list(APPEND CLIENT_DEFINITIONS USE_ICON)
|
||||
|
||||
set_source_files_properties(${SOURCE_DIR}/sys/win_resource.rc
|
||||
PROPERTIES COMPILE_DEFINITIONS WINDOWS_ICON_PATH=${WINDOWS_ICON_PATH})
|
||||
|
||||
if(MSVC)
|
||||
# We have our own manifest, disable auto creation
|
||||
list(APPEND SERVER_LINK_OPTIONS "/MANIFEST:NO")
|
||||
list(APPEND CLIENT_LINK_OPTIONS "/MANIFEST:NO")
|
||||
endif()
|
||||
|
||||
set(CLIENT_EXECUTABLE_OPTIONS WIN32)
|
||||
Reference in new issue
Block a user