# 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()