From 145f97cfdcfc7f5229342e926a29960bdefe6d51 Mon Sep 17 00:00:00 2001 From: jadebenn Date: Fri, 5 Apr 2024 16:50:39 -0500 Subject: [PATCH] build reorganization and experimental clang support --- .github/workflows/build-and-test.yml | 4 +- CMakePresets.json | 414 +++++++++++++++------------ dCommon/GeneralUtils.cpp | 2 +- thirdparty/CMakeLists.txt | 5 + 4 files changed, 234 insertions(+), 191 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index fc44885d..3e45273d 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -33,9 +33,7 @@ jobs: - name: cmake uses: lukka/run-cmake@v10 with: - configurePreset: "ci-${{matrix.os}}" - buildPreset: "ci-${{matrix.os}}" - testPreset: "ci-${{matrix.os}}" + workflowPreset: "ci-${{matrix.os}}" - name: artifacts uses: actions/upload-artifact@v3 with: diff --git a/CMakePresets.json b/CMakePresets.json index 7fb1d345..084c4334 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -1,204 +1,244 @@ { - "version": 3, - "cmakeMinimumRequired": { - "major": 3, - "minor": 14, - "patch": 0 + "version": 6, + "cmakeMinimumRequired": { + "major": 3, + "minor": 25, + "patch": 0 + }, + "configurePresets": [ + { + "name": "default", + "displayName": "Default configure step", + "description": "Use 'build' dir and Unix makefiles", + "binaryDir": "${sourceDir}/build", + "generator": "Unix Makefiles" }, - "configurePresets": [ - { - "name": "default", - "displayName": "Default configure step", - "description": "Use 'build' dir and Unix makefiles", - "binaryDir": "${sourceDir}/build", - "generator": "Unix Makefiles" + { + "name": "ci-windows-2022", + "displayName": "CI configure step for Windows", + "description": "Set architecture to 64-bit (b/c RakNet)", + "inherits": "default", + "generator": "Visual Studio 17 2022", + "architecture": { + "value": "x64" }, - { - "name": "ci-ubuntu-22.04", - "displayName": "CI configure step for Ubuntu", - "description": "Same as default, Used in GitHub actions workflow", - "inherits": "default", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release" - } + "condition": { + "type": "equals", + "lhs": "${hostSystemName}", + "rhs": "Windows" }, - { - "name": "debug-ubuntu-22.04", - "displayName": "Debug configure step for Ubuntu", - "description": "Used to generate debug configuration for Ubuntu", - "inherits": "default", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug", - "CMAKE_CXX_FLAGS_INIT" : "-Og", - "CMAKE_C_FLAGS_INIT" : "-Og" - } + "cacheVariables": { + "CMAKE_CXX_FLAGS_INIT": "/Zc:inline" + } + }, + { + "name": "windows-default", + "inherits": "ci-windows-2022", + "displayName": "Windows only Configure Settings", + "description": "Sets build and install directories", + "generator": "Ninja", + "condition": { + "type": "equals", + "lhs": "${hostSystemName}", + "rhs": "Windows" }, - { - "name": "ci-macos-13", - "displayName": "CI configure step for MacOS", - "description": "Same as default, Used in GitHub actions workflow", - "inherits": "default", - "cacheVariables": { - "CMAKE_CXX_FLAGS_INIT" : "-O2", - "CMAKE_C_FLAGS_INIT" : "-O2" - } + "architecture": { + "value": "x64", + "strategy": "external" + } + }, + { + "name": "linux-base", + "displayName": "x86_64-pc-linux-gnu", + "description": "Linux base configuration", + "hidden": true, + "binaryDir": "${sourceDir}/build", + "condition": { + "type": "equals", + "lhs": "${hostSystemName}", + "rhs": "Linux" + } + }, + { + "name": "linux-clang-debug", + "inherits": "linux-base", + "displayName": "[Debug] Linux (Clang)", + "description": "Create a debug build using the Clang toolchain for Linux", + "binaryDir": "${sourceDir}/build", + "toolchainFile": "${sourceDir}/cmake/toolchains/linux-clang.cmake", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug" + } + }, + { + "name": "linux-clang-release", + "inherits": "linux-clang-debug", + "displayName": "[Release] Linux (Clang)", + "description": "Create a release build using the Clang toolchain for Linux", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release" + } + }, + { + "name": "linux-gcc-debug", + "displayName": "[Debug] Linux (GCC)", + "description": "Create a debug build using the GNU toolchain for Linux", + "binaryDir": "${sourceDir}/build", + "toolchainFile": "${sourceDir}/cmake/toolchains/linux-gcc.cmake", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug" + } + }, + { + "name": "linux-gcc-release", + "inherits": "linux-gcc-debug", + "displayName": "[Release] Linux (GCC)", + "description": "Create a release build using the GNU toolchain for Linux", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release" + } + }, + { + "name": "macos-appleclang-debug", + "displayName": "[Debug] MacOS (AppleClang)", + "description": "Same as default, Used in GitHub actions workflow", + "inherits": "default", + "condition": { + "type": "equals", + "lhs": "${hostSystemName}", + "rhs": "Darwin" }, - { - "name": "debug-macos-13", - "displayName": "Debug configure step for MacOS", - "description": "Used to generate debug configuration for MacOS", - "inherits": "default" + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug" + } + }, + { + "name": "macos-appleclang-release", + "displayName": "[Release] MacOS (AppleClang)", + "description": "Same as default, Used in GitHub actions workflow", + "inherits": "default", + "condition": { + "type": "equals", + "lhs": "${hostSystemName}", + "rhs": "Darwin" }, - { - "name": "ci-windows-2022", - "displayName": "CI configure step for Windows", - "description": "Set architecture to 64-bit (b/c RakNet)", - "inherits": "default", - "generator": "Visual Studio 17 2022", - "architecture": { - "value": "x64" - }, - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release", - "CMAKE_CXX_FLAGS_INIT": "/Zc:inline" - } + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release" + } + } + ], + "buildPresets": [ + { + "name": "default", + "configurePreset": "default", + "displayName": "Default Build", + "description": "Default Build", + "jobs": 2 + }, + { + "name": "ci-windows-2022", + "configurePreset": "ci-windows-2022", + "displayName": "Windows CI Build", + "description": "This preset is used by the CI build on windows", + "configuration": "Release", + "jobs": 2 + }, + { + "name": "debug-windows-2022", + "configurePreset": "ci-windows-2022", + "displayName": "Windows Debug Build", + "description": "This preset is used to debug the build on windows", + "configuration": "Release", + "jobs": 2 + } + ], + "testPresets": [ + { + "name": "default", + "configurePreset": "default", + "execution": { + "jobs": 2 }, - { - "name": "debug-windows-2022", - "displayName": "Debug configure step for Windows", - "description": "Set architecture to 64-bit (b/c RakNet)", - "inherits": "default", - "generator": "Visual Studio 17 2022", - "architecture": { - "value": "x64" - }, - "cacheVariables": { - "CMAKE_CXX_FLAGS_INIT": "Debug" - } + "output": { + "outputOnFailure": true + } + }, + { + "name": "ci-windows-2022", + "configurePreset": "ci-windows-2022", + "displayName": "CI Tests on windows", + "description": "Runs all tests on a windows configuration", + "configuration": "Release", + "execution": { + "jobs": 2 }, - { - "name": "windows-default", - "inherits": "ci-windows-2022", - "displayName": "Windows only Configure Settings", - "description": "Sets build and install directories", - "generator": "Ninja", - "architecture": { - "value": "x64", - "strategy": "external" + "output": { + "outputOnFailure": true + }, + "filter": { + "exclude": { + "name": "((example)|(minigzip))+" } } - ], - "buildPresets": [ - { - "name": "default", - "configurePreset": "default", - "displayName": "Default Build", - "description": "Default Build", - "jobs": 2 - }, - { - "name": "ci-ubuntu-22.04", - "configurePreset": "ci-ubuntu-22.04", - "displayName": "Linux CI Build", - "description": "This preset is used by the CI build on linux", - "configuration": "Release", - "jobs": 2 - }, - { - "name": "debug-ubuntu-22.04", - "configurePreset": "debug-ubuntu-22.04", - "displayName": "Linux Debug Build ", - "description": "This preset is used to debug the build on linux", - "configuration": "Debug", - "jobs": 2 - }, - { - "name": "ci-windows-2022", - "configurePreset": "ci-windows-2022", - "displayName": "Windows CI Build", - "description": "This preset is used by the CI build on windows", - "configuration": "Release", - "jobs": 2 - }, - { - "name": "debug-windows-2022", - "configurePreset": "debug-windows-2022", - "displayName": "Windows Debug Build", - "description": "This preset is used to debug the build on windows", - "configuration": "Release", - "jobs": 2 - }, - { - "name": "ci-macos-13", - "configurePreset": "ci-macos-13", - "displayName": "MacOS CI Build", - "description": "This preset is used by the CI build on MacOS", - "jobs": 2 - }, - { - "name": "debug-macos-13", - "configurePreset": "debug-macos-13", - "displayName": "MacOS Debug Build", - "description": "This preset is used to debug the build on MacOS", - "jobs": 2 - } - ], - "testPresets": [ - { - "name": "ci-ubuntu-22.04", - "configurePreset": "ci-ubuntu-22.04", - "displayName": "CI Tests on Linux", - "description": "Runs all tests on a linux configuration", - "configuration": "Release", - "execution": { - "jobs": 2 + } + ], + "workflowPresets": [ + { + "name": "ci-windows-2022", + "displayName": "Windows CI Workflow", + "description": "CI workflow preset for Windows", + "steps": [ + { + "type": "configure", + "name": "ci-windows-2022" }, - "output": { - "outputOnFailure": true + { + "type": "build", + "name": "default" + }, + { + "type": "test", + "name": "default" } - }, - { - "name": "debug-ubuntu-22.04", - "configurePreset": "debug-ubuntu-22.04", - "displayName": "Debug Tests on Linux", - "description": "Runs all tests on a linux configuration", - "configuration": "Debug", - "execution": { - "jobs": 2 + ] + }, + { + "name": "ci-ubuntu-22.04", + "displayName": "Ubuntu CI Workflow", + "description": "CI workflow preset for Ubuntu", + "steps": [ + { + "type": "configure", + "name": "linux-gcc-release" }, - "output": { - "outputOnFailure": true + { + "type": "build", + "name": "default" + }, + { + "type": "test", + "name": "default" } - }, - { - "name": "ci-macos-13", - "configurePreset": "ci-macos-13", - "displayName": "CI Tests on MacOS", - "description": "Runs all tests on a Mac configuration", - "execution": { - "jobs": 2 + ] + }, + { + "name": "ci-macos-13", + "displayName": "MacOS CI Workflow", + "description": "CI workflow preset for MacOS", + "steps": [ + { + "type": "configure", + "name": "macos-appleclang-release" }, - "output": { - "outputOnFailure": true + { + "type": "build", + "name": "default" + }, + { + "type": "test", + "name": "default" } - }, - { - "name": "ci-windows-2022", - "configurePreset": "ci-windows-2022", - "displayName": "CI Tests on windows", - "description": "Runs all tests on a windows configuration", - "configuration": "Release", - "execution": { - "jobs": 2 - }, - "output": { - "outputOnFailure": true - }, - "filter": { - "exclude": { - "name": "((example)|(minigzip))+" - } - } - } - ] - } + ] + } + ] +} diff --git a/dCommon/GeneralUtils.cpp b/dCommon/GeneralUtils.cpp index 27ebfb2c..159cc127 100644 --- a/dCommon/GeneralUtils.cpp +++ b/dCommon/GeneralUtils.cpp @@ -320,7 +320,7 @@ std::vector GeneralUtils::GetSqlFileNamesFromFolder(const std::stri return sortedFiles; } -#ifdef DARKFLAME_PLATFORM_MACOS +#if !(__GNUC__ >= 11 || _MSC_VER >= 1924) // MacOS floating-point parse function specializations namespace GeneralUtils::details { diff --git a/thirdparty/CMakeLists.txt b/thirdparty/CMakeLists.txt index 41135a80..9ce7f5a1 100644 --- a/thirdparty/CMakeLists.txt +++ b/thirdparty/CMakeLists.txt @@ -23,6 +23,11 @@ if(NOT WIN32) target_include_directories(bcrypt PRIVATE "libbcrypt/include/bcrypt") endif() +# Need to define this on Clang (Linux) for 'strdup' support +if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + target_compile_definitions(bcrypt PRIVATE "_POSIX_C_SOURCE=200809L") +endif() + target_include_directories(bcrypt INTERFACE "libbcrypt/include") target_include_directories(bcrypt PRIVATE "libbcrypt/src")