diff --git a/CMakeLists.txt b/CMakeLists.txt index 91459f5f..a03b7e41 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,14 @@ cmake_minimum_required(VERSION 3.25) -project(Darkflame) +project(Darkflame + HOMEPAGE_URL "https://github.com/DarkflameUniverse/DarkflameServer" + LANGUAGES C CXX +) include(CTest) +set(CMAKE_C_STANDARD 99) set(CMAKE_CXX_STANDARD 20) -set(CXX_STANDARD_REQUIRED ON) +set(CMAKE_C_STANDARD_REQUIRED ON) +set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # Export the compile commands for debugging set(CMAKE_POLICY_DEFAULT_CMP0063 NEW) # Set CMAKE visibility policy to NEW on project and subprojects set(CMAKE_VISIBILITY_INLINES_HIDDEN ON) # Set C and C++ symbol visibility to hide inlined functions @@ -55,23 +60,21 @@ set(RECASTNAVIGATION_EXAMPLES OFF CACHE BOOL "" FORCE) # Disabled no-register # Disabled unknown pragmas because Linux doesn't understand Windows pragmas. if(UNIX) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wuninitialized -fPIC") + add_compile_options("-fPIC") add_compile_definitions(_GLIBCXX_USE_CXX11_ABI=0 _GLIBCXX_USE_CXX17_ABI=0) # For all except Clang and Apple Clang if(NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -lstdc++fs") + add_compile_options("-static-libgcc" "-lstdc++fs") endif() if(${DYNAMIC} AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -rdynamic") + add_compile_options("-rdynamic") endif() if(${GGDB}) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ggdb") + add_compile_options("-ggdb") endif() - - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -fPIC") elseif(MSVC) # Skip warning for invalid conversion from size_t to uint32_t for all targets below for now # Also disable non-portable MSVC volatile behavior @@ -231,14 +234,15 @@ include_directories( "tests/dGameTests" "tests/dGameTests/dComponentsTests" - SYSTEM "thirdparty/magic_enum/include/magic_enum" - SYSTEM "thirdparty/raknet/Source" - SYSTEM "thirdparty/tinyxml2" - SYSTEM "thirdparty/recastnavigation" - SYSTEM "thirdparty/SQLite" - SYSTEM "thirdparty/cpplinq" - SYSTEM "thirdparty/cpp-httplib" - SYSTEM "thirdparty/MD5" + SYSTEM + "thirdparty/magic_enum/include/magic_enum" + "thirdparty/raknet/Source" + "thirdparty/tinyxml2" + "thirdparty/recastnavigation" + "thirdparty/SQLite" + "thirdparty/cpplinq" + "thirdparty/cpp-httplib" + "thirdparty/MD5" ) # Add system specfic includes for Apple, Windows and Other Unix OS' (including Linux) @@ -247,10 +251,16 @@ if(APPLE) include_directories("/usr/local/include/") endif() -# Add linking directories: -if (UNIX) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wold-style-cast -Werror") # Warning flags +# Set warning flags +if(MSVC) + add_compile_options("/WX") +elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") + add_compile_options("-Wuninitialized" "-Wold-style-cast" "-Werror") +else() + message(WARNING "Unknown compiler: '${CMAKE_CXX_COMPILER_ID}' No warning flags enabled.") endif() + +# Add linking directories: file( GLOB HEADERS_DZONEMANAGER LIST_DIRECTORIES false diff --git a/cmake/toolchains/linux-clang.cmake b/cmake/toolchains/linux-clang.cmake index abcd681c..63bf92fc 100644 --- a/cmake/toolchains/linux-clang.cmake +++ b/cmake/toolchains/linux-clang.cmake @@ -3,8 +3,8 @@ find_program(CLANG_C_COMPILER clang-16 | clang REQUIRED) find_program(CLANG_CXX_COMPILER clang++-16 | clang++ REQUIRED) # Debug messages -message("CLANG_C_COMPILER = ${CLANG_C_COMPILER}") -message("CLANG_CXX_COMPILER = ${CLANG_CXX_COMPILER}") +message(DEBUG "CLANG_C_COMPILER = ${CLANG_C_COMPILER}") +message(DEBUG "CLANG_CXX_COMPILER = ${CLANG_CXX_COMPILER}") # Set compilers to clang set(CMAKE_C_COMPILER ${CLANG_C_COMPILER}) diff --git a/cmake/toolchains/linux-gnu.cmake b/cmake/toolchains/linux-gnu.cmake index d55af82f..7a60c81f 100644 --- a/cmake/toolchains/linux-gnu.cmake +++ b/cmake/toolchains/linux-gnu.cmake @@ -1,10 +1,10 @@ # Try and find a gcc/g++ install -find_program(GNU_C_COMPILER gcc REQUIRED) -find_program(GNU_CXX_COMPILER g++ REQUIRED) +find_program(GNU_C_COMPILER cc | gcc REQUIRED) +find_program(GNU_CXX_COMPILER c++ | g++ REQUIRED) # Debug messages -message("GNU_C_COMPILER = ${GNU_C_COMPILER}") -message("GNU_CXX_COMPILER = ${GNU_C_COMPILER}") +message(DEBUG "GNU_C_COMPILER = ${GNU_C_COMPILER}") +message(DEBUG "GNU_CXX_COMPILER = ${GNU_C_COMPILER}") # Set compilers to clang set(CMAKE_C_COMPILER ${GNU_C_COMPILER}) diff --git a/dMasterServer/CMakeLists.txt b/dMasterServer/CMakeLists.txt index 260e4f16..2e2b4dd9 100644 --- a/dMasterServer/CMakeLists.txt +++ b/dMasterServer/CMakeLists.txt @@ -6,7 +6,7 @@ set(DMASTERSERVER_SOURCES add_library(dMasterServer ${DMASTERSERVER_SOURCES}) add_executable(MasterServer "MasterServer.cpp") -add_compile_definitions(MasterServer PRIVATE PROJECT_VERSION="\"${PROJECT_VERSION}\"") +target_compile_definitions(MasterServer PRIVATE PROJECT_VERSION="\"${PROJECT_VERSION}\"") target_include_directories(dMasterServer PUBLIC "." "${PROJECT_SOURCE_DIR}/dZoneManager" # InstanceManager.h uses dZMCommon.h ${PROJECT_SOURCE_DIR}/dServer/ # BinaryPathFinder.h diff --git a/thirdparty/CMakeLists.txt b/thirdparty/CMakeLists.txt index 55dd10be..79863a53 100644 --- a/thirdparty/CMakeLists.txt +++ b/thirdparty/CMakeLists.txt @@ -24,7 +24,7 @@ if(NOT WIN32) endif() # Need to define this on Clang and GNU for 'strdup' support -if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") +if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") target_compile_definitions(bcrypt PRIVATE "_POSIX_C_SOURCE=200809L") endif()