From f133f8563158ab33d8b06e29f69b9f1e605be70b Mon Sep 17 00:00:00 2001 From: bones_was_here Date: Tue, 23 Jan 2024 15:43:48 +1000 Subject: [PATCH] Makefile: optimise debug builds somewhat Also fixes warning spam in debug builds. Signed-off-by: bones_was_here --- makefile.inc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/makefile.inc b/makefile.inc index 40b70e21..ab30eeb6 100644 --- a/makefile.inc +++ b/makefile.inc @@ -137,7 +137,7 @@ else CFLAGS_STANDARD= endif -CFLAGS_WARNINGS=-Wall -Winline -Werror=vla -Werror=c++-compat -Wwrite-strings -Wshadow -Wold-style-definition -Wstrict-prototypes -Wsign-compare -Wdeclaration-after-statement -Wmissing-prototypes +CFLAGS_WARNINGS=-Wall -Werror=vla -Werror=c++-compat -Wwrite-strings -Wshadow -Wold-style-definition -Wstrict-prototypes -Wsign-compare -Wdeclaration-after-statement -Wmissing-prototypes CFLAGS_TCC= ifeq ($(CC), tcc) @@ -171,14 +171,17 @@ ifeq ($(DP_SSE),1) 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. -OPTIM_DEBUG=$(CPUOPTIMIZATIONS) +# We can get good stack traces at -O1 with -fno-omit-frame-pointer (as recommended by ASan docs) for a hefty boost compared to unoptimised. +OPTIM_DEBUG=-O1 -fno-omit-frame-pointer $(CPUOPTIMIZATIONS) #OPTIM_RELEASE=-O2 -fno-strict-aliasing -ffast-math -funroll-loops $(CPUOPTIMIZATIONS) #OPTIM_RELEASE=-O2 -fno-strict-aliasing -fno-math-errno -fno-trapping-math -fno-signaling-nans -fcx-limited-range -funroll-loops $(CPUOPTIMIZATIONS) #OPTIM_RELEASE=-O2 -fno-strict-aliasing -funroll-loops $(CPUOPTIMIZATIONS) #OPTIM_RELEASE=-O2 -fno-strict-aliasing $(CPUOPTIMIZATIONS) #OPTIM_RELEASE=-O3 -fno-strict-aliasing $(CPUOPTIMIZATIONS) #OPTIM_RELEASE=-O3 -fno-strict-aliasing -fno-math-errno -fno-trapping-math $(CPUOPTIMIZATIONS) -OPTIM_RELEASE=-O3 -fno-math-errno -fno-trapping-math $(CPUOPTIMIZATIONS) +# -Winline is here instead of in CFLAGS_WARNINGS because we need inlining disabled for good stack traces in debug builds, +# also because UBSan and ASan cause this warning to be spammed. +OPTIM_RELEASE=-O3 -fno-math-errno -fno-trapping-math $(CPUOPTIMIZATIONS) -Winline # 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; -- 2.39.2