Files
Peninsula/CMakeLists.txt
T

133 lines
3.8 KiB
CMake

# Require the latest CMake version.
cmake_minimum_required(VERSION 4.2.1)
project(archipelago)
# ExternalContent, the better FetchContent and ExternalProject. Even beats CPM because it isn't written to be fancy!
include(cmake/externalcontent/ExternalContent.cmake)
#--------------------------------------------------------------------------------#
# Options
#--------------------------------------------------------------------------------#
#--------------------------------------------------------------------------------#
# Libraries
#--------------------------------------------------------------------------------#
if(TRUE) # ASIO (Standalone)
ExternalContent(
NAME "asio"
DOWNLOAD_URL "https://altushost-swe.dl.sourceforge.net/project/asio/asio/1.36.0%20%28Stable%29/asio-1.36.0.zip?viasf=1"
DOWNLOAD_HASH "SHA512;6D867F6C63BC259110E00726D0DD38090F5E55EE01EEFF94A3590B1351967FD7E19EE8F7601A197723FA072CEA8F29D00A7C60A8E97D441CE3D931EE1A098F06"
SKIP_CONFIGURE
SKIP_BUILD
SKIP_INSTALL
)
endif()
# badaix's JSONRPC++
ExternalContent(
NAME "badaix-jsonrpc"
GIT_URL "https://github.com/badaix/jsonrpcpp.git"
GIT_REF "v1.4.0"
GIT_CLONE_OPTIONS --depth 1 --no-single-branch --recurse-submodules
GIT_CHECKOUT_OPTIONS --recurse-submodules
CONFIGURE_ARGS -D CATCH_INSTALL_DOCS:BOOL=OFF -D CATCH_INSTALL_EXTRAS:BOOL=ON
BUILD_ARGS
)
# nlohmann's JSON
ExternalContent(
NAME "nlohmann-json"
GIT_URL "https://github.com/nlohmann/json.git"
GIT_REF "v3.12.0"
GIT_CLONE_OPTIONS --depth 1 --no-single-branch --recurse-submodules
GIT_CHECKOUT_OPTIONS --recurse-submodules
)
# wolfSSL
ExternalContent(
NAME "wolfSSL"
GIT_URL "https://github.com/wolfSSL/wolfssl.git"
GIT_REF "v5.8.4-stable"
GIT_CLONE_OPTIONS --depth 1 --no-single-branch --recurse-submodules
GIT_CHECKOUT_OPTIONS --recurse-submodules
CONFIGURE_ARGS -D BUILD_SHARED_LIBS:BOOL=OFF -D CMAKE_BUILD_TYPE:STRING=RelWithDebInfo -D WOLFSSL_CRYPT_TESTS:BOOL=OFF -D WOLFSSL_EXAMPLES:BOOL=OFF
)
# WebSocket++
ExternalContent(
NAME "zaphoyd-websocketpp"
GIT_URL "https://github.com/amini-allight/websocketpp.git"
GIT_REF "develop"
GIT_CLONE_OPTIONS --depth 1 --no-single-branch --recurse-submodules
GIT_CHECKOUT_OPTIONS --recurse-submodules
CONFIGURE_ARGS -D ENABLE_CPP11:BOOL=ON -D BUILD_EXAMPLES:BOOL=OFF -D BUILD_TESTS:BOOL=OFF -D USE_ASIO_STANDALONE:BOOL=ON
)
#--------------------------------------------------------------------------------#
# Project
#--------------------------------------------------------------------------------#
file(GLOB_RECURSE _INCLUDE FOLLOW_SYMLINKS CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/pub/*")
source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/pub" PREFIX "Public" FILES ${_INCLUDE})
file(GLOB_RECURSE _SOURCE FOLLOW_SYMLINKS CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/priv/*")
source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/priv" PREFIX "Private" FILES ${_SOURCE})
add_executable("room-server")
target_sources("room-server"
PRIVATE
${_SOURCE}
PUBLIC
${_INCLUDE}
)
target_include_directories("room-server"
PRIVATE
"priv"
"pub/apsr"
PUBLIC
"pub"
)
target_link_libraries("room-server"
PRIVATE
# wolfSSL
# nlohmann_json::nlohmann_json
# badaix::jsonrpc
# zaphoyd::websocketpp
)
set_target_properties("room-server" PROPERTIES
# Always generate position independent code.
POSITION_INDEPENDENT_CODE ON
# Set C++ Standard and Extensions
C_STANDARD 17
C_STANDARD_REQUIRED ON
CXX_STANDARD 20
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS OFF
# Remove prefix from generated files.
PREFIX ""
IMPORT_PREFIX ""
# Never treat warnings as errors.
COMPILE_WARNING_AS_ERROR OFF
)
if(WIN32)
# Disable/Enable a ton of things.
target_compile_definitions("room-server" PRIVATE
# Microsoft Visual C++
_CRT_SECURE_NO_WARNINGS
_ENABLE_EXTENDED_ALIGNED_STORAGE
# Windows version target
_WIN32_WINNT=0x0A00
)
endif()