From 71e366e8129cb97bda348fa9bf86727c5e7887c7 Mon Sep 17 00:00:00 2001 From: bones_was_here Date: Fri, 12 Apr 2024 03:55:08 +1000 Subject: [PATCH] build: minor adjustments VS2019: get more of the targets to build (needed to specify modern C standard for all of them, and SDK "10.0" seems to mean "use latest version installed"). VS2019: improve README.md instructions. Makefile: fix PEDANTIC=1 test builds and warning spam. sys: properly fix warnings related to SDL's wrapping of main() for all platforms. Signed-off-by: bones_was_here --- README.md | 16 +++++++--------- darkplaces-sdl2-vs2019.vcxproj | 14 +++++++++----- docs/msvc2019_C11.png | Bin 14541 -> 0 bytes makefile.inc | 4 +++- protocol.h | 3 +-- sys.h | 2 ++ sys_null.c | 5 +++++ sys_sdl.c | 5 +++++ sys_shared.c | 11 +++++------ 9 files changed, 37 insertions(+), 23 deletions(-) delete mode 100644 docs/msvc2019_C11.png diff --git a/README.md b/README.md index acb53919..df037d5c 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,7 @@ These instructions are adequate for Quake, but for Xonotic please refer to [its ### Required packages The minimum SDL version is 2.0.18 for Linux and 2.24.0 for Windows. +The supported compilers are GCC and Clang. The following package names are for Debian, see below for Windows and Mac. ##### Client @@ -96,19 +97,16 @@ If you get errors (that don't seem to be about missing dependencies) try `make c Not recommended due to poor support for C standards, and lack of maintenance. -DarkPlaces requires C11, so Windows SDK 10.0.22000.0 (VS 2019) or 10.0.20348.0 (VS 2022) or later is needed. -To install it, run the Visual Studio Installer, click "Modify", click "Individual components", select the latest Windows SDK version and de-select older versions. -You will also need the NuGet Package Manager selected (to download SDL2 headers the first time you build). +DarkPlaces requires C11, so Windows SDK 10.0.20348.0 or later is needed. +To install it, run the Visual Studio Installer, click "Modify", click "Individual components", type "Windows SDK" in the search box, select the latest Windows SDK and de-select older versions. +You will also need "NuGet package manager" selected (to download SDL2 headers the first time you build). Click "Modify" to apply the changes. -VS 2019 -![MSVC2019](msvc2019_C11.png) +Open `darkplaces-vs2019.sln`, select build type (`Debug` or `Release`) and platform (`Win32` or `x64`), and choose "Build Solution" from the "Build" menu to create files `darkplaces-sdl2-vs2019.exe` and `SDL2.dll`. -Open `darkplaces-vs2019.sln`, select build type "Debug" or "Release, and choose "Build Solution" from the "Build" menu to create the file `darkplaces-sdl2-vs2019.exe`. +The Release build crashes. The Debug x64 build doesn't crash (but is rather slow) so this will be Fun for someone to debug. -The Release build crashes. The Debug build doesn't crash (but is rather slow) so this will be Fun for someone to debug. - -To get a build suitable for playing Quake you'll need to use MinGW gcc, or download the autobuild from Xonotic (see above). +To get a build suitable for playing you'll need to use MinGW GCC, or download the autobuild from Xonotic (see above). ## Contributing diff --git a/darkplaces-sdl2-vs2019.vcxproj b/darkplaces-sdl2-vs2019.vcxproj index d2cd07e2..f94592a5 100644 --- a/darkplaces-sdl2-vs2019.vcxproj +++ b/darkplaces-sdl2-vs2019.vcxproj @@ -23,30 +23,30 @@ darkplacessdl2 Win32Proj darkplaces-sdl2-vs2019 - 10.0.22000.0 + 10.0 Application - v142 MultiByte true + v142 Application - v142 MultiByte + v142 Application - v142 MultiByte true + v142 Application - v142 MultiByte + v142 @@ -88,6 +88,8 @@ 4706;4127;4100;4055;4054;4244;4305;4702;%(DisableSpecificWarnings) true /wd"4201" %(AdditionalOptions) + stdcpp17 + stdc17 $(OutDir)$(TargetName)$(TargetExt) @@ -139,6 +141,8 @@ 4706;4127;4100;4055;4054;4244;4305;4702;%(DisableSpecificWarnings) true /wd"4201" %(AdditionalOptions) + stdcpp17 + stdc17 $(OutDir)$(TargetName)$(TargetExt) diff --git a/docs/msvc2019_C11.png b/docs/msvc2019_C11.png deleted file mode 100644 index 59266364a31a4e53723ac753887d6679c4dbe349..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14541 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 a8r?@L%&w1N;qWm