]> git.rm.cloudns.org Git - xonotic/darkplaces.git/commitdiff
Improve x86 detection to fix compiler errors on other architectures
authorbones_was_here <bones_was_here@xonotic.au>
Sun, 30 Apr 2023 09:16:03 +0000 (19:16 +1000)
committerbones_was_here <bones_was_here@xonotic.au>
Sun, 30 Apr 2023 09:16:03 +0000 (19:16 +1000)
Also some related minor makefile cleanup.

Closes https://gitlab.com/xonotic/darkplaces/-/issues/382

See also: 1244b3ab0853e8738c8f5e5b617e8d8f25d4eca4

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
makefile
makefile.inc

index 064a6e7b99d41c8cd387a8f981cad3ef143048e4..36f6c93578813c3db21ac2181208c74d6a646e1c 100644 (file)
--- a/makefile
+++ b/makefile
@@ -29,21 +29,27 @@ endif  # ifndef DP_MAKE_TARGET
 # If we're targeting an x86 CPU we want to enable DP_SSE (CFLAGS_SSE and SSE2)
 ifeq ($(DP_MAKE_TARGET), mingw)
        DP_SSE:=1
+else ifeq ($(OS),Windows_NT)
+       ifeq ($(PROCESSOR_ARCHITECTURE),AMD64)
+               DP_SSE:=1
+       else ifeq ($(PROCESSOR_ARCHITEW6432),AMD64)
+               DP_SSE:=1
+       else ifeq ($(PROCESSOR_ARCHITECTURE),x86)
+               DP_SSE:=1
+       else
+               DP_SSE:=0
+       endif
 else
        DP_MACHINE:=$(shell uname -m)
        ifeq ($(DP_MACHINE),x86_64)
                DP_SSE:=1
-       else
-       ifeq ($(DP_MACHINE),i686)
+       else ifeq ($(DP_MACHINE),i686)
                DP_SSE:=1
-       else
-       ifeq ($(DP_MACHINE),i386)
+       else ifeq ($(DP_MACHINE),i386)
                DP_SSE:=1
        else
                DP_SSE:=0
-       endif # ifeq ($(DP_MACHINE),i386)
-       endif # ifeq ($(DP_MACHINE),i686)
-       endif # ifeq ($(DP_MACHINE),x86_64)
+       endif
 endif
 
 # Makefile name
index e1e1621cd143aa49090a67a60ae68bf1dd4e2a79..87b114ce50b58163acd101c018070cc25895c6fa 100644 (file)
@@ -18,14 +18,15 @@ CC?=gcc
 # 686 (Pentium Pro/II) optimizations
 #CPUOPTIMIZATIONS?=-march=i686
 # No specific CPU (386 compatible)
-#CPUOPTIMIZATIONS?=
-# Experimental
-#CPUOPTIMIZATIONS?=-fno-math-errno -fno-rounding-math -fno-signaling-nans -fassociative-math -freciprocal-math -fno-signed-zeros -fno-trapping-math
-# Normal
-CPUOPTIMIZATIONS?=-mno-avx
+CPUOPTIMIZATIONS?=
+# x86
+ifeq ($(DP_SSE),1)
+       CPUOPTIMIZATIONS+=-mno-avx
+endif
+# bones_was_here: added -mno-avx because when compiling for (at least) haswell or skylake with gcc or clang, with both -O2 and -O3, AVX auto-vectorisation causes subtle bugs in Xonotic QC physics, and changes the hash generated by the CI pipeline.  AVX2 seems to be OK.
+# Also moved -fno-math-errno -fno-trapping-math (etc) to OPTIM_RELEASE as they're not CPU-specific.
 # NOTE: *never* *ever* use the -ffast-math or -funsafe-math-optimizations flag
 # Also, since gcc 5, -ffinite-math-only makes NaN and zero compare equal inside engine code but not inside QC, which causes error spam for seemingly valid QC code like if (x != 0) return 1 / x;
-# bones_was_here: added -mno-avx because when compiling for (at least) haswell or skylake with gcc or clang, with both -O2 and -O3, AVX auto-vectorisation causes subtle bugs in Xonotic QC physics, and changes the hash generated by the CI pipeline.  AVX2 seems to be OK.  Also moved -fno-math-errno -fno-trapping-math to OPTIM_RELEASE as they're not CPU-specific.
 
 SDL_CONFIG?=sdl2-config
 SDLCONFIG_UNIXCFLAGS?=`$(SDL_CONFIG) --cflags`