mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2024-11-29 15:51:45 +00:00
Merge pull request #960 from DanielGibson/cmake-msvc
Fix build with VisualC++'s internal CMake
This commit is contained in:
commit
54949d59ce
3 changed files with 60 additions and 38 deletions
|
@ -107,21 +107,9 @@ if(NOT (CMAKE_SYSTEM_PROCESSOR STREQUAL CMAKE_HOST_SYSTEM_PROCESSOR))
|
||||||
# special case: cross-compiling, here CMAKE_SYSTEM_PROCESSOR should be correct, hopefully
|
# special case: cross-compiling, here CMAKE_SYSTEM_PROCESSOR should be correct, hopefully
|
||||||
# (just leave cpu at ${CMAKE_SYSTEM_PROCESSOR})
|
# (just leave cpu at ${CMAKE_SYSTEM_PROCESSOR})
|
||||||
elseif(MSVC)
|
elseif(MSVC)
|
||||||
message(DEBUG "CMAKE_GENERATOR_PLATFORM: ${CMAKE_GENERATOR_PLATFORM}")
|
# because all this wasn't ugly enough, it turned out that, unlike standalone CMake, Visual Studio's
|
||||||
if(CMAKE_GENERATOR_PLATFORM STREQUAL "Win32")
|
# integrated CMake doesn't set CMAKE_GENERATOR_PLATFORM, so I gave up on guessing the CPU arch here
|
||||||
set(cpu "i386")
|
# and moved the CPU detection to MSVC-specific code in neo/sys/platform.h
|
||||||
elseif(CMAKE_GENERATOR_PLATFORM STREQUAL "x64")
|
|
||||||
set(cpu "x86_64")
|
|
||||||
elseif(CMAKE_GENERATOR_PLATFORM STREQUAL "ARM")
|
|
||||||
# at least on RPi 32bit, gcc -dumpmachine outputs "arm-linux-gnueabihf",
|
|
||||||
# so we'll use "arm" there => use the same for 32bit ARM on MSVC
|
|
||||||
set(cpu "arm")
|
|
||||||
elseif(CMAKE_GENERATOR_PLATFORM STREQUAL "ARM64")
|
|
||||||
set(cpu "arm64")
|
|
||||||
else()
|
|
||||||
message(FATAL_ERROR "Unknown Target CPU/platform ${CMAKE_GENERATOR_PLATFORM}")
|
|
||||||
endif()
|
|
||||||
message(DEBUG " => CPU architecture extracted from that: \"${cpu}\"")
|
|
||||||
else() # not MSVC and not cross-compiling, assume GCC or clang (-compatible), seems to work for MinGW as well
|
else() # not MSVC and not cross-compiling, assume GCC or clang (-compatible), seems to work for MinGW as well
|
||||||
execute_process(COMMAND ${CMAKE_C_COMPILER} "-dumpmachine"
|
execute_process(COMMAND ${CMAKE_C_COMPILER} "-dumpmachine"
|
||||||
RESULT_VARIABLE cc_dumpmachine_res
|
RESULT_VARIABLE cc_dumpmachine_res
|
||||||
|
@ -159,13 +147,19 @@ elseif(cpu MATCHES "[aA][rR][mM].*") # some kind of arm..
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(ARCH "${cpu}")
|
if(MSVC)
|
||||||
|
# for MSVC YQ2ARCH is set in code (in src/common/header/common.h)
|
||||||
|
message(STATUS "Setting YQ2OSTYPE to \"${YQ2OSTYPE}\" - NOT setting YQ2ARCH, because we're targeting MSVC (VisualC++)")
|
||||||
|
else()
|
||||||
|
set(ARCH "${cpu}")
|
||||||
|
add_definitions(-DYQ2ARCH="${ARCH}")
|
||||||
|
message(STATUS "Setting YQ2OSTYPE to \"${YQ2OSTYPE}\" and YQ2ARCH to \"${ARCH}\".")
|
||||||
|
endif()
|
||||||
|
# make sure that ${cpu} isn't used below - if at all use ${ARCH}, but not when compiling with MSVC!
|
||||||
|
unset(cpu)
|
||||||
|
|
||||||
# END OF workarounds for CMake's poor choices regarding CPU architecture detection
|
# END OF workarounds for CMake's poor choices regarding CPU architecture detection
|
||||||
|
|
||||||
add_definitions(-DYQ2ARCH="${ARCH}")
|
|
||||||
|
|
||||||
message(STATUS "Setting YQ2OSTYPE to \"${YQ2OSTYPE}\" and YQ2ARCH to \"${ARCH}\".")
|
|
||||||
|
|
||||||
# Systemwide installation of game assets.
|
# Systemwide installation of game assets.
|
||||||
if(${SYSTEMWIDE_SUPPORT})
|
if(${SYSTEMWIDE_SUPPORT})
|
||||||
|
@ -269,25 +263,26 @@ endif()
|
||||||
include_directories(${yquake2IncludeDirectories})
|
include_directories(${yquake2IncludeDirectories})
|
||||||
link_directories(${yquake2LinkerDirectories})
|
link_directories(${yquake2LinkerDirectories})
|
||||||
|
|
||||||
# If we're building with gcc for i386 let's define -ffloat-store.
|
# these settings only work for GCC and clang
|
||||||
# This helps the old and crappy x87 FPU to produce correct values.
|
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
||||||
# Would be nice if Clang had something comparable.
|
# If we're building with gcc for i386 let's define -ffloat-store.
|
||||||
if ("${ARCH}" STREQUAL "i386")
|
# This helps the old and crappy x87 FPU to produce correct values.
|
||||||
if (${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
|
# Would be nice if Clang had something comparable.
|
||||||
|
if ("${ARCH}" STREQUAL "i386" AND ${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffloat-store")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffloat-store")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
|
||||||
|
|
||||||
# Force SSE math on x86_64. All sane compilers should do this
|
# Force SSE math on x86_64. All sane compilers should do this
|
||||||
# anyway, just to protect us from broken Linux distros.
|
# anyway, just to protect us from broken Linux distros.
|
||||||
if ("${ARCH}" STREQUAL "x86_64")
|
if ("${ARCH}" STREQUAL "x86_64")
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpmath=sse")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpmath=sse")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if ("${ARCH}" STREQUAL "arm")
|
if ("${ARCH}" STREQUAL "arm")
|
||||||
if (CMAKE_SIZEOF_VOID_P EQUAL 4)
|
if (CMAKE_SIZEOF_VOID_P EQUAL 4)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv6k")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv6k")
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(Backends-Generic-Source
|
set(Backends-Generic-Source
|
||||||
|
|
|
@ -39,10 +39,6 @@
|
||||||
#error YQ2OSTYPE should be defined by the build system
|
#error YQ2OSTYPE should be defined by the build system
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef YQ2ARCH
|
|
||||||
#error YQ2ARCH should be defined by the build system
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef BUILD_DATE
|
#ifndef BUILD_DATE
|
||||||
#define BUILD_DATE __DATE__
|
#define BUILD_DATE __DATE__
|
||||||
#endif
|
#endif
|
||||||
|
@ -57,6 +53,36 @@
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef YQ2ARCH
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
// Setting YQ2ARCH for VisualC++ from CMake doesn't work when using VS integrated CMake
|
||||||
|
// so set it in code instead
|
||||||
|
#ifdef YQ2ARCH
|
||||||
|
#undef YQ2ARCH
|
||||||
|
#endif
|
||||||
|
#ifdef _M_X64
|
||||||
|
// this matches AMD64 and ARM64EC (but not regular ARM64), but they're supposed to be binary-compatible somehow, so whatever
|
||||||
|
#define YQ2ARCH "x86_64"
|
||||||
|
#elif defined(_M_ARM64)
|
||||||
|
#define YQ2ARCH "arm64"
|
||||||
|
#elif defined(_M_ARM)
|
||||||
|
#define YQ2ARCH "arm"
|
||||||
|
#elif defined(_M_IX86)
|
||||||
|
#define YQ2ARCH "x86"
|
||||||
|
#else
|
||||||
|
// if you're not targeting one of the aforementioned architectures,
|
||||||
|
// check https://learn.microsoft.com/en-us/cpp/preprocessor/predefined-macros
|
||||||
|
// to find out how to detect yours and add it here - and please send a patch :)
|
||||||
|
#error "Unknown CPU architecture!"
|
||||||
|
// (for a quick and dirty solution, comment out the previous line, but keep in mind
|
||||||
|
// that savegames may not be compatible with other builds of Yamagi Quake II)
|
||||||
|
#define YQ2ARCH "UNKNOWN"
|
||||||
|
#endif // _M_X64 etc
|
||||||
|
#else // other compilers than MSVC
|
||||||
|
#error YQ2ARCH should be defined by the build system
|
||||||
|
#endif // _MSC_VER
|
||||||
|
#endif // YQ2ARCH
|
||||||
|
|
||||||
/* ================================================================== */
|
/* ================================================================== */
|
||||||
|
|
||||||
typedef struct sizebuf_s
|
typedef struct sizebuf_s
|
||||||
|
|
|
@ -64,6 +64,7 @@
|
||||||
* system and architecture are in the hands of the user.
|
* system and architecture are in the hands of the user.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "../../common/header/common.h" // YQ2ARCH
|
||||||
#include "../header/local.h"
|
#include "../header/local.h"
|
||||||
#include "savegame.h"
|
#include "savegame.h"
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue