From ee23d80815486174d93cb6326fe0967036669cc2 Mon Sep 17 00:00:00 2001 From: Aaron Kimbrell Date: Wed, 30 Sep 2026 08:52:52 -0500 Subject: [PATCH] build: 64-bit targets only CMake refuses to configure when pointers aren't 8 bytes, and dCommonVars.h asserts it, so sent and stored sizes can't silently change width. Co-Authored-By: Claude Opus 5.5 --- CMakeLists.txt | 5 +++++ README.md | 2 ++ dCommon/dEnums/dCommonVars.h | 2 ++ 3 files changed, 9 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 14b7c1eb5..0b1ba6eba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,11 @@ if("${CMAKE_SOURCE_DIR}" MATCHES " ") message(FATAL_ERROR "The server cannot build in the path (" ${CMAKE_SOURCE_DIR} ") because it contains a space. Please move the server to a path without spaces.") endif() +# Only 64-bit builds are supported: sent and stored values assume 64-bit pointers and sizes +if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8) + message(FATAL_ERROR "The server only builds for 64-bit targets (this configuration is ${CMAKE_SIZEOF_VOID_P}-byte pointers). Use a 64-bit compiler and generator, e.g. -A x64 with Visual Studio.") +endif() + include(CTest) set(CMAKE_C_STANDARD 99) diff --git a/README.md b/README.md index 23e982680..647bc9a24 100644 --- a/README.md +++ b/README.md @@ -326,6 +326,8 @@ CREATE DATABASE darkflame; ``` ## Build the server +The server only builds for 64-bit targets; CMake refuses to configure a 32-bit build. + You can either run `build.sh` when in the root folder of the repository: ```bash diff --git a/dCommon/dEnums/dCommonVars.h b/dCommon/dEnums/dCommonVars.h index 271669e30..89946de39 100644 --- a/dCommon/dEnums/dCommonVars.h +++ b/dCommon/dEnums/dCommonVars.h @@ -14,6 +14,8 @@ #pragma warning (disable:4251) //Disables SQL warnings +static_assert(sizeof(void*) == 8, "The server only builds for 64-bit targets"); + // These are the same define, but they mean two different things in different contexts // so a different define to distinguish what calculation is happening will help clarity. #define FRAMES_TO_MS(x) (1000 / (x))