diff --git a/.github/workflows/build-targets.yml b/.github/workflows/build-targets.yml index 6ca28b6f7..aef3154cb 100644 --- a/.github/workflows/build-targets.yml +++ b/.github/workflows/build-targets.yml @@ -6,7 +6,12 @@ jobs: strategy: fail-fast: false matrix: - target: [windows-multi-x64] + configurePreset: [ninja-msvc-x64, ninja-mingw64-x64-cross] + include: + - configurePreset: ninja-msvc-x64 + buildPreset: ninja-msvc-x64-release + - configurePreset: ninja-mingw64-x64-cross + buildPreset: ninja-mingw64-x64-cross-release steps: - name: Check out code @@ -21,14 +26,14 @@ jobs: - name: Run CMake uses: lukka/run-cmake@v10 with: - configurePreset: "msbuild-vcpkg-x64" - buildPreset: "msbuild-vcpkg-x64-release" + configurePreset: ${{ matrix.configPreset }} + buildPreset: ${{ matrix.buildPreset }} - name: Archive client uses: actions/upload-artifact@v4 with: - name: ${{ matrix.target }} - path: "cmake-build-presets/msbuild-vcpkg-x64/Release/ezquake.exe" + name: ${{ matrix.configPreset }} + path: "cmake-build-presets/${{ matrix.configPreset }}/Release/ezquake.exe" compression-level: 9 macos-build: diff --git a/.gitignore b/.gitignore index fa7337094..ae7c4a718 100644 --- a/.gitignore +++ b/.gitignore @@ -12,5 +12,6 @@ SysPrintf.log *.glsl.c vcpkg_installed/ src/.msversion.h +cmake-build-presets !.gitignore diff --git a/CMakeLists.txt b/CMakeLists.txt index 8c55e0648..029804c82 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.19) +cmake_minimum_required(VERSION 3.28) if (APPLE) project(ezquake C CXX OBJC) @@ -12,6 +12,9 @@ set(COMMIT_DESC "0.0.0-0-g00000000") set(VERSION "Unknown") set(REVISION "Unknown") +include(CheckIPOSupported) +check_ipo_supported(RESULT LTO_SUPPORTED) + find_package(Git QUIET) if (GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git") option(GIT_SUBMODULE "Check submodules during build" ON) @@ -40,7 +43,7 @@ if (GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git") ) execute_process( - COMMAND ${GIT_EXECUTABLE} describe foo + COMMAND ${GIT_EXECUTABLE} describe --tags OUTPUT_VARIABLE GIT_DESC RESULT_VARIABLE GIT_DESC_RESULT OUTPUT_STRIP_TRAILING_WHITESPACE @@ -50,7 +53,6 @@ if (GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git") set(COMMIT_DESC "${GIT_DESC}") endif() - message("desc: ${COMMIT_DESC}") set(VERSION "${REVISION}~${COMMIT_HASH}") endif () @@ -78,7 +80,7 @@ macro(add_resources target_var) add_custom_command( OUTPUT ${generated_file_name} - COMMAND resource_compiler ${source_file_name} ${generated_file_name} + COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ ${source_file_name} ${generated_file_name} WORKING_DIRECTORY "${source_file_dir}" DEPENDS ${source_file} resource_compiler COMMENT "Generating C file from ${source_file_relative}" @@ -144,18 +146,6 @@ if (APPLE) find_library(FRAMEWORK_CORESERVICES CoreServices REQUIRED) endif() -#if (APPLE) - add_compile_options( - -Wall - -Wno-pointer-to-int-cast - -Wno-int-to-pointer-cast - -Wno-strict-aliasing - -Werror=strict-prototypes - -Werror=old-style-definition - -fno-optimize-sibling-calls - ) -#endif() - set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) set(common_headers @@ -788,14 +778,6 @@ if (APPLE) set_source_files_properties(${macos_icon} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) endif() -if(WIN32) - set(TARGET_TYPE WIN32) -elseif(APPLE) - set(TARGET_TYPE MACOSX_BUNDLE) -else() - set(TARGET_TYPE "") -endif() - if (WIN32) string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)-([0-9]+)-g[0-9a-fA-F]+$" "\\1;\\2;\\3;\\4" VERSION_COMPONENTS "${COMMIT_DESC}") list(GET VERSION_COMPONENTS 0 VERSION_MAJOR) @@ -807,11 +789,19 @@ if (WIN32) set(EZQUAKE_RESOURCE_AUTHOR "QW-Group") set(EZQUAKE_RESOURCE_NAME "ezQuake") set(EZQUAKE_RESOURCE_DESCRIPTION "ezQuake - a QuakeWorld client") - set(EZQUAKE_RESOURCE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/ezQuake.ico") + set(EZQUAKE_RESOURCE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/ezquake.ico") set(EZQUAKE_RESOURCE_VERSION "${VERSION_MAJOR},${VERSION_MINOR},${VERSION_PATCH},${VERSION_BUILD}") configure_file("${CMAKE_SOURCE_DIR}/ezQuake.rc.in" ${windows_icon} @ONLY) endif() +if(WIN32) + set(TARGET_TYPE WIN32) +elseif(APPLE) + set(TARGET_TYPE MACOSX_BUNDLE) +else() + set(TARGET_TYPE "") +endif() + add_executable(ezquake ${TARGET_TYPE} ${main} ${sys_glue} @@ -833,6 +823,10 @@ add_executable(ezquake ${TARGET_TYPE} $,${windows_icon},> ) +set_target_properties(ezquake PROPERTIES + INTERPROCEDURAL_OPTIMIZATION TRUE +) + target_include_directories(ezquake PRIVATE ${SOURCE_DIR}/qwprot/src ) diff --git a/CMakePresets.json b/CMakePresets.json index 36469e325..d6efbc44a 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -2,7 +2,7 @@ "version": 6, "cmakeMinimumRequired": { "major": 3, - "minor": 19, + "minor": 28, "patch": 0 }, "configurePresets": [ @@ -20,10 +20,61 @@ } }, { - "name": "msbuild-vcpkg-x64", - "description": "Configure with vcpkg toolchain and Visual Studio project files for all configurations", - "generator": "Visual Studio 17 2022", + "name": "template-msvc", + "hidden": true, + "inherits": "template-vcpkg", + "cacheVariables": { + "CMAKE_C_FLAGS": "/DWIN32 /D_WINDOWS /W3 /nologo /diagnostics:column /sdl /W3 /WX-", + "CMAKE_C_FLAGS_DEBUG": "", + "CMAKE_C_FLAGS_RELEASE": "/O2 /Oi /GL /Zc:inline /arch:AVX2 /Qvec-report:2", + "CMAKE_EXE_LINKER_FLAGS_DEBUG": "/MTd", + "CMAKE_EXE_LINKER_FLAGS_RELEASE": "/MT /OPT:REF /OPT:ICF" + } + }, + { + "name": "template-gcc", + "hidden": true, "inherits": "template-vcpkg", + "cacheVariables": { + "CMAKE_C_FLAGS": "-Wall -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast -Wno-strict-aliasing -Werror=strict-prototypes -Werror=old-style-definition -fvisibility=hidden", + "CMAKE_C_FLAGS_DEBUG": "-g", + "CMAKE_C_FLAGS_RELEASE": "-O2" + } + }, + { + "name": "template-gcc-mingw-cross", + "hidden": true, + "cacheVariables": { + "CMAKE_SYSTEM_NAME": "Windows", + "CMAKE_CROSSCOMPILING_EMULATOR": "wine", + "VCPKG_APPLOCAL_DEPS": "OFF" + } + }, + { + "name": "template-gcc-mingw-i686", + "hidden": true, + "inherits": "template-gcc", + "cacheVariables": { + "CMAKE_C_COMPILER": "i686-w64-mingw32-gcc", + "CMAKE_CXX_COMPILER": "i686-w64-mingw32-g++", + "CMAKE_RC_COMPILER": "i686-w64-mingw32-windres" + } + }, + { + "name": "template-gcc-mingw-x64", + "hidden": true, + "inherits": "template-gcc", + "cacheVariables": { + "CMAKE_C_COMPILER": "x86_64-w64-mingw32-gcc", + "CMAKE_CXX_COMPILER": "x86_64-w64-mingw32-g++", + "CMAKE_RC_COMPILER": "x86_64-w64-mingw32-windres" + } + }, + { + "name": "msbuild-x64", + "description": "Configure as Visual Studio project", + "generator": "Visual Studio 17 2022", + "inherits": "template-msvc", "cacheVariables": { "VCPKG_TARGET_TRIPLET": "x64-windows-static" }, @@ -34,10 +85,10 @@ } }, { - "name": "ninja-msvc-vcpkg-x64", - "description": "Configure with vcpkg toolchain and Windows Subsystem for Linux for all configurations", - "generator": "Ninja", - "inherits": "template-vcpkg", + "name": "ninja-msvc-x64", + "description": "Configure using Ninja to build with msvc", + "generator": "Ninja Multi-Config", + "inherits": "template-msvc", "cacheVariables": { "VCPKG_TARGET_TRIPLET": "x64-windows-static" }, @@ -48,21 +99,22 @@ } }, { - "name": "ninja-clang-vcpkg-x64", + "name": "ninja-mingw64-x64-shared", "hidden": true, - "description": "Configure with vcpkg toolchain clang for all configurations", - "generator": "Ninja", - "inherits": "template-vcpkg", + "description": "Configure using Ninja to build with mingw64 for x64", + "generator": "Ninja Multi-Config", + "inherits": "template-gcc-mingw-x64", "architecture": { "value": "x64", "strategy": "external" }, "cacheVariables": { - "CMAKE_VERBOSE_MAKEFILE": "YES", - "CMAKE_C_COMPILER": "clang", - "CMAKE_CXX_COMPILER": "clang++", - "VCPKG_TARGET_TRIPLET": "x64-windows-static" - }, + "VCPKG_TARGET_TRIPLET": "x64-mingw-static" + } + }, + { + "name": "ninja-mingw64-x64", + "inherits": ["ninja-mingw64-x64-shared"], "condition": { "type": "equals", "lhs": "${hostSystemName}", @@ -70,41 +122,32 @@ } }, { - "name": "ninja-clang-vcpkg-x64-debug", - "inherits": "ninja-clang-vcpkg-x64", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug", - "VCPKG_BUILD_TYPE": "Debug", - "CMAKE_C_FLAGS": "/DWIN32 /D_WINDOWS /W3 /GR /EHsc /arch:AVX2", - "CMAKE_CXX_FLAGS": "/DWIN32 /D_WINDOWS /W3 /GR /EHsc /arch:AVX2", - "CMAKE_EXE_LINKER_FLAGS": "/machine:x64" - } - }, - { - "name": "ninja-clang-vcpkg-x64-release", - "inherits": "ninja-clang-vcpkg-x64", - "cacheVariables": { - "VCPKG_C_FLAGS": "/arch:AVX2 -m64", - "VCPKG_CXX_FLAGS": "/arch:AVX2 -m64", - "CMAKE_BUILD_TYPE": "Release", - "VCPKG_BUILD_TYPE": "Release" + "name": "ninja-mingw64-x64-cross", + "inherits": ["ninja-mingw64-x64-shared", "template-gcc-mingw-cross"], + "condition": { + "type": "notEquals", + "lhs": "${hostSystemName}", + "rhs": "Windows" } }, { - "name": "ninja-mingw64-vcpkg-x64", + "name": "ninja-mingw64-i686-shared", "hidden": true, - "description": "Configure with vcpkg toolchain clang for all configurations", - "generator": "Ninja", - "inherits": "template-vcpkg", + "description": "Configure with Ninja to build with mingw64 for i686", + "generator": "Ninja Multi-Config", + "inherits": "template-gcc-mingw-i686", "architecture": { - "value": "x64", + "value": "x86", "strategy": "external" }, "cacheVariables": { - "CMAKE_VERBOSE_MAKEFILE": "YES", - "VCPKG_CMAKE_SYSTEM_NAME": "MinGW", - "VCPKG_TARGET_TRIPLET": "x64-mingw-static" - }, + "VCPKG_TARGET_ARCHITECTURE": "x86", + "VCPKG_TARGET_TRIPLET": "x86-mingw-static" + } + }, + { + "name": "ninja-mingw64-i686", + "inherits": ["ninja-mingw64-i686-shared"], "condition": { "type": "equals", "lhs": "${hostSystemName}", @@ -112,27 +155,28 @@ } }, { - "name": "ninja-mingw64-vcpkg-x64-debug", - "inherits": "ninja-mingw64-vcpkg-x64", + "name": "ninja-mingw64-i686-cross", + "inherits": ["ninja-mingw64-i686-shared", "template-gcc-mingw-cross"], "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug", - "VCPKG_BUILD_TYPE": "Debug" - } - }, - { - "name": "ninja-mingw64-vcpkg-x64-release", - "inherits": "ninja-mingw64-vcpkg-x64", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release", - "VCPKG_BUILD_TYPE": "Release" + "CMAKE_SYSTEM_PROCESSOR": "i686", + "CMAKE_EXE_LINKER_FLAGS": "-static-libgcc" + }, + "environment": { + "WINEARCH": "win32", + "WINEPREFIX": "${sourceDir}/cmake-build-presets/ninja-mingw64-i686-cross/" + }, + "condition": { + "type": "notEquals", + "lhs": "${hostSystemName}", + "rhs": "Windows" } }, { - "name": "xcode-vcpkg", + "name": "xcode", "hidden": true, - "description": "Configure with vcpkg toolchain and XCode project files for all configurations", + "description": "Configure XCode project file", "generator": "Xcode", - "inherits": "template-vcpkg", + "inherits": "template-gcc", "condition": { "type": "equals", "lhs": "${hostSystemName}", @@ -140,9 +184,9 @@ } }, { - "name": "xcode-vcpkg-arm64", - "displayName": "XCode (vcpkg-arm64)", - "inherits": "xcode-vcpkg", + "name": "xcode-arm64", + "displayName": "XCode (arm64)", + "inherits": "xcode", "cacheVariables": { "VCPKG_TARGET_TRIPLET": "arm64-osx", "CMAKE_OSX_ARCHITECTURES": "arm64", @@ -152,16 +196,16 @@ } }, { - "name": "xcode-vcpkg-arm64-release-ci", - "inherits": "xcode-vcpkg-arm64", + "name": "xcode-arm64-release-ci", + "inherits": "xcode-arm64", "cacheVariables": { "VCPKG_TARGET_TRIPLET": "arm64-osx-release" } }, { - "name": "xcode-vcpkg-x64", - "displayName": "XCode (vcpkg-x64)", - "inherits": "xcode-vcpkg", + "name": "xcode-x64", + "displayName": "XCode (x64)", + "inherits": "xcode", "cacheVariables": { "VCPKG_TARGET_TRIPLET": "x64-osx", "CMAKE_OSX_ARCHITECTURES": "x86_64", @@ -171,8 +215,8 @@ } }, { - "name": "xcode-vcpkg-x64-release-ci", - "inherits": "xcode-vcpkg-x64", + "name": "xcode-x64-release-ci", + "inherits": "xcode-x64", "cacheVariables": { "VCPKG_TARGET_TRIPLET": "x64-osx-release" } @@ -180,100 +224,128 @@ ], "buildPresets": [ { - "name": "msbuild-vcpkg-x64-debug", - "configurePreset": "msbuild-vcpkg-x64", - "displayName": "Build msbuild-vcpkg-x64-debug", + "name": "msbuild-x64-debug", + "configurePreset": "msbuild-x64", + "displayName": "Build msbuild-x64 debug", "description": "Build Visual Studio Debug configuration", "configuration": "Debug" }, { - "name": "msbuild-vcpkg-x64-release", - "configurePreset": "msbuild-vcpkg-x64", - "displayName": "Build msbuild-vcpkg-x64 release", + "name": "msbuild-x64-release", + "configurePreset": "msbuild-x64", + "displayName": "Build msbuild-x64 release", "description": "Build Visual Studio Release configuration", "configuration": "Release" }, { - "name": "ninja-msvc-vcpkg-x64-debug", - "configurePreset": "ninja-msvc-vcpkg-x64", - "displayName": "Build wsl-vcpkg-x64-debug", + "name": "ninja-msvc-x64-debug", + "configurePreset": "ninja-msvc-x64", + "displayName": "Build ninja-msvc-x64 debug", "description": "Build Windows Subsystem for Linux Debug configuration", "configuration": "Debug" }, { - "name": "ninja-msvc-vcpkg-x64-release", - "configurePreset": "ninja-msvc-vcpkg-x64", - "displayName": "Build wsl-vcpkg-x64-release", + "name": "ninja-msvc-x64-release", + "configurePreset": "ninja-msvc-x64", + "displayName": "Build wsl-vcpkg-x64 release", "description": "Build Windows Subsystem for Linux Debug configuration", "configuration": "Release" }, { - "name": "ninja-clang-vcpkg-x64-debug", - "configurePreset": "ninja-clang-vcpkg-x64-debug", - "displayName": "Build ninja-clang-vcpkg-x64-debug", + "name": "ninja-mingw64-x64-debug", + "configurePreset": "ninja-mingw64-x64", + "displayName": "Build ninja-mingw64-x64 debug", + "description": "Build Windows Subsystem for Linux Debug configuration", + "configuration": "Debug" + }, + { + "name": "ninja-mingw64-x64-cross-debug", + "configurePreset": "ninja-mingw64-x64-cross", + "displayName": "Build ninja-mingw64-x64 debug", "description": "Build Windows Subsystem for Linux Debug configuration", "configuration": "Debug" }, { - "name": "ninja-clang-vcpkg-x64-release", - "configurePreset": "ninja-clang-vcpkg-x64-release", - "displayName": "Build ninja-clang-vcpkg-x64-release", + "name": "ninja-mingw64-x64-release", + "configurePreset": "ninja-mingw64-x64", + "displayName": "Build ninja-mingw64-x64 release", "description": "Build Windows Subsystem for Linux Debug configuration", "configuration": "Release" }, { - "name": "ninja-mingw64-vcpkg-x64-debug", - "configurePreset": "ninja-mingw64-vcpkg-x64-debug", - "displayName": "Build ninja-mingw64-vcpkg-x64-debug", + "name": "ninja-mingw64-x64-cross-release", + "configurePreset": "ninja-mingw64-x64-cross", + "displayName": "Build ninja-mingw64-x64 release", + "description": "Build Windows Subsystem for Linux Debug configuration", + "configuration": "Release" + }, + { + "name": "ninja-mingw64-i686-debug", + "configurePreset": "ninja-mingw64-i686", + "displayName": "Build ninja-mingw64-i686 debug", + "description": "Build Windows Subsystem for Linux Debug configuration", + "configuration": "Debug" + }, + { + "name": "ninja-mingw64-i686-cross-debug", + "configurePreset": "ninja-mingw64-i686-cross", + "displayName": "Build ninja-mingw64-i686 debug", "description": "Build Windows Subsystem for Linux Debug configuration", "configuration": "Debug" }, { - "name": "ninja-mingw64-vcpkg-x64-release", - "configurePreset": "ninja-mingw64-vcpkg-x64-release", - "displayName": "Build ninja-mingw64-vcpkg-x64-release", + "name": "ninja-mingw64-i686-release", + "configurePreset": "ninja-mingw64-i686", + "displayName": "Build ninja-mingw64-i686 release", + "description": "Build Windows Subsystem for Linux Debug configuration", + "configuration": "Release" + }, + { + "name": "ninja-mingw64-i686-cross-release", + "configurePreset": "ninja-mingw64-i686-cross", + "displayName": "Build ninja-mingw64-i686 release", "description": "Build Windows Subsystem for Linux Debug configuration", "configuration": "Release" }, { - "name": "xcode-vcpkg-arm64-debug", - "configurePreset": "xcode-vcpkg-arm64", - "displayName": "Build xcode-vcpkg-debug", - "description": "Build xcode-vcpkg Debug configuration", + "name": "xcode-arm64-debug", + "configurePreset": "xcode-arm64", + "displayName": "Build Xcode debug", + "description": "Build Xcode Debug configuration", "configuration": "Debug" }, { - "name": "xcode-vcpkg-arm64-release", - "configurePreset": "xcode-vcpkg-arm64", - "displayName": "Build xcode-vcpkg-release", - "description": "Build xcode-vcpkg Release configuration", + "name": "xcode-arm64-release", + "configurePreset": "xcode-arm64", + "displayName": "Build Xcode release", + "description": "Build Xcode Release configuration", "configuration": "Release" }, { - "name": "xcode-vcpkg-arm64-release-ci", - "configurePreset": "xcode-vcpkg-arm64-release-ci", - "displayName": "Build xcode-vcpkg-release", + "name": "xcode-arm64-release-ci", + "configurePreset": "xcode-arm64-release-ci", + "displayName": "Build Xcode release", "description": "Build with community release triplet", "configuration": "Release" }, { - "name": "xcode-vcpkg-x64-debug", - "configurePreset": "xcode-vcpkg-x64", - "displayName": "Build xcode-vcpkg-debug", - "description": "Build xcode-vcpkg Debug configuration", + "name": "xcode-x64-debug", + "configurePreset": "xcode-x64", + "displayName": "Build Xcode debug", + "description": "Build Xcode Debug configuration", "configuration": "Debug" }, { - "name": "xcode-vcpkg-x64-release", - "configurePreset": "xcode-vcpkg-x64", - "displayName": "Build xcode-vcpkg-release", - "description": "Build xcode-vcpkg Release configuration", + "name": "xcode-x64-release", + "configurePreset": "xcode-x64", + "displayName": "Build Xcode release", + "description": "Build Xcode Release configuration", "configuration": "Release" }, { - "name": "xcode-vcpkg-x64-release-ci", - "configurePreset": "xcode-vcpkg-x64-release-ci", - "displayName": "Build xcode-vcpkg-release", + "name": "xcode-x64-release-ci", + "configurePreset": "xcode-x64-release-ci", + "displayName": "Build Xcode release", "description": "Build with community release triplet", "configuration": "Release" }