X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=makefile.inc;h=90e2bf86aaca8a5e9853a262f3a182c0b45a2a69;hb=83c1da9c25329f63b7667bbce062692ef7c75668;hp=d35e6bdc26b322fc278b1e370ff413649b55bc92;hpb=62d48f29bb1ae6d13983bc0c324a700e4ac28dec;p=xonotic%2Fdarkplaces.git diff --git a/makefile.inc b/makefile.inc index d35e6bdc..90e2bf86 100644 --- a/makefile.inc +++ b/makefile.inc @@ -18,15 +18,13 @@ 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 -ifeq ($(CC), clang) - CPUOPTIMIZATIONS?=-fno-math-errno -fno-rounding-math -fno-trapping-math -else - CPUOPTIMIZATIONS?=-fno-math-errno -fno-rounding-math -fno-signaling-nans -fno-trapping-math +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; @@ -37,41 +35,20 @@ SDLCONFIG_UNIXLIBS?=`$(SDL_CONFIG) --libs` SDLCONFIG_UNIXLIBS_X11?=-lX11 SDLCONFIG_UNIXSTATICLIBS?=`$(SDL_CONFIG) --static-libs` SDLCONFIG_UNIXSTATICLIBS_X11?=-lX11 -SDLCONFIG_MACOSXCFLAGS=-I/Library/Frameworks/SDL2.framework/Headers -I$(HOME)/Library/Frameworks/SDL2.framework/Headers -SDLCONFIG_MACOSXLIBS=-F$(HOME)/Library/Frameworks/ -framework SDL2 -framework Cocoa $(SDLCONFIG_MACOSXCFLAGS) -SDLCONFIG_MACOSXSTATICLIBS=-F$(HOME)/Library/Frameworks/ -framework SDL2 -framework Cocoa $(SDLCONFIG_MACOSXCFLAGS) +SDLCONFIG_MACOSXCFLAGS=$(SDLCONFIG_UNIXCFLAGS) +SDLCONFIG_MACOSXLIBS=$(SDLCONFIG_UNIXLIBS) +SDLCONFIG_MACOSXSTATICLIBS=$(SDLCONFIG_UNIXSTATICLIBS) STRIP?=strip ###### Sound ##### -OBJ_SND_COMMON=snd_main.o snd_mem.o snd_mix.o snd_ogg.o snd_wav.o +OBJ_SND_COMMON=snd_main.o snd_mem.o snd_mix.o snd_ogg.o snd_wav.o $(OBJ_SND_XMP) # No sound OBJ_SND_NULL=snd_null.o LIB_SND_NULL= -# Open Sound System (Linux, FreeBSD and Solaris) -OBJ_SND_OSS=$(OBJ_SND_COMMON) snd_oss.o -LIB_SND_OSS=$(LIB_SND_XMP) - -# Advanced Linux Sound Architecture (Linux) -OBJ_SND_ALSA=$(OBJ_SND_COMMON) snd_alsa.o -LIB_SND_ALSA=-lasound $(LIB_SND_XMP) - -# Core Audio (Mac OS X) -OBJ_SND_COREAUDIO=$(OBJ_SND_COMMON) snd_coreaudio.o -LIB_SND_COREAUDIO=-framework CoreAudio $(LIB_SND_XMP) - -# BSD / Sun audio API (NetBSD and OpenBSD) -OBJ_SND_BSD=$(OBJ_SND_COMMON) snd_bsd.o -LIB_SND_BSD=$(LIB_SND_XMP) - -# DirectX and Win32 WAVE output (Win32) -OBJ_SND_WIN=$(OBJ_SND_COMMON) snd_win.o -LIB_SND_WIN=$(LIB_SND_XMP) - - ###### Common objects and flags ##### # Common objects @@ -93,12 +70,15 @@ OBJ_COMMON= \ cl_particles.o \ cl_screen.o \ cl_video.o \ + cl_video_libavw.o \ clvm_cmds.o \ cmd.o \ collision.o \ com_crc16.o \ com_ents.o \ com_ents4.o \ + com_game.o \ + com_infostring.o \ com_msg.o \ common.o \ console.o \ @@ -136,6 +116,7 @@ OBJ_COMMON= \ model_sprite.o \ netconn.o \ palette.o \ + phys.o \ polygon.o \ portals.o \ protocol.o \ @@ -148,6 +129,7 @@ OBJ_COMMON= \ r_shadow.o \ r_sky.o \ r_sprites.o \ + r_stats.o \ sbar.o \ sv_ccmds.o \ sv_demo.o \ @@ -189,7 +171,14 @@ ifeq ($(PEDANTIC),1) else CFLAGS_STANDARD= endif -CFLAGS_COMMON=$(CFLAGS_STANDARD) $(CFLAGS_MAKEDEP) $(CFLAGS_PRELOAD) $(CFLAGS_FS) $(CFLAGS_WARNINGS) $(CFLAGS_LIBZ) $(CFLAGS_LIBJPEG) $(CFLAGS_SND_XMP) $(CFLAGS_NET) $(CFLAGS_SDL) -D_FILE_OFFSET_BITS=64 -D__KERNEL_STRICT_NAMES -I../../../ + +CFLAGS_TCC= + +ifeq ($(CC), tcc) + CFLAGS_TCC=-DSDL_DISABLE_IMMINTRIN_H +endif + +CFLAGS_COMMON=$(CFLAGS_STANDARD) $(CFLAGS_TCC) $(CFLAGS_MAKEDEP) $(CFLAGS_PRELOAD) $(CFLAGS_FS) $(CFLAGS_WARNINGS) $(CFLAGS_LIBZ) $(CFLAGS_LIBJPEG) $(CFLAGS_SND_XMP) $(CFLAGS_NET) $(CFLAGS_SDL) -D_FILE_OFFSET_BITS=64 -D__KERNEL_STRICT_NAMES -I../../../ CFLAGS_CLIENT=-DCONFIG_MENU $(CFLAGS_VIDEO_CAPTURE) CFLAGS_SERVER= CFLAGS_DEBUG=-ggdb @@ -211,7 +200,8 @@ OPTIM_DEBUG=$(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 $(CPUOPTIMIZATIONS) +OPTIM_RELEASE=-O3 -fno-strict-aliasing -fno-math-errno -fno-trapping-math $(CPUOPTIMIZATIONS) # 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; @@ -231,7 +221,7 @@ LDFLAGS_UNIXSV_PRELOAD=-lz -ljpeg -lpng -lcurl LDFLAGS_UNIXSDL_PRELOAD=-lz -ljpeg -lpng -logg -ltheora -lvorbis -lvorbisenc -lvorbisfile -lcurl -lxmp CFLAGS_UNIX_PRELOAD=-DPREFER_PRELOAD -LDFLAGS_UNIXSDL=$(SDLCONFIG_LIBS) +LDFLAGS_UNIXSDL=$(SDL_LIBS) #-lGLESv2 EXE_UNIXSV=darkplaces-dedicated EXE_UNIXSDL=darkplaces-sdl EXE_UNIXSVNEXUIZ=nexuiz-dedicated @@ -253,7 +243,7 @@ LDFLAGS_LINUXSDL=$(LDFLAGS_UNIXCOMMON) -lrt -ldl $(LDFLAGS_UNIXSDL) # Link LDFLAGS_MACOSXSV=$(LDFLAGS_UNIXCOMMON) -ldl -LDFLAGS_MACOSXSDL=$(LDFLAGS_UNIXCOMMON) -ldl -framework IOKit $(SDLCONFIG_STATICLIBS) ../../../SDLMain.m +LDFLAGS_MACOSXSDL=$(LDFLAGS_UNIXCOMMON) -ldl -framework IOKit $(SDLCONFIG_STATICLIBS) #../../../SDLMain.m ##### SunOS specific variables ##### @@ -279,7 +269,7 @@ WINDRES ?= windres # Link # see LDFLAGS_WINCOMMON in makefile LDFLAGS_WINSV=$(LDFLAGS_WINCOMMON) $(LIB_CRYPTO) $(LIB_CRYPTO_RIJNDAEL) -mconsole -lwinmm -lws2_32 $(LIB_Z) $(LIB_JPEG) -LDFLAGS_WINSDL=$(LDFLAGS_WINCOMMON) $(LIB_CRYPTO) $(LIB_CRYPTO_RIJNDAEL) $(SDLCONFIG_LIBS) -lwinmm -lws2_32 $(LIB_Z) $(LIB_JPEG) $(LIB_SND_XMP) +LDFLAGS_WINSDL=$(LDFLAGS_WINCOMMON) $(LIB_CRYPTO) $(LIB_CRYPTO_RIJNDAEL) $(LDFLAGS_UNIXSDL) -lwinmm -lws2_32 $(LIB_Z) $(LIB_JPEG) $(LIB_SND_XMP) EXE_WINSV=darkplaces-dedicated.exe EXE_WINSDL=darkplaces-sdl.exe EXE_WINSVNEXUIZ=nexuiz-dedicated.exe @@ -438,21 +428,29 @@ prepare : #this checks USEODE when compiling so it needs the ODE flags as well -prvm_cmds.o: prvm_cmds.c +cl_parse.o: cl_parse.c $(CHECKLEVEL2) $(DO_CC) $(CFLAGS_ODE) -world.o: world.c +cs_progs.o: cs_progs.c + $(CHECKLEVEL2) + $(DO_CC) $(CFLAGS_ODE) + +sv_main.o: sv_main.c $(CHECKLEVEL2) $(DO_CC) $(CFLAGS_ODE) -vid_glx.o: vid_glx.c +sv_phys.o: sv_phys.c $(CHECKLEVEL2) - $(DO_CC) -I/usr/X11R6/include + $(DO_CC) $(CFLAGS_ODE) -keysym2ucs.o: keysym2ucs.c +prvm_cmds.o: prvm_cmds.c $(CHECKLEVEL2) - $(DO_CC) -I/usr/X11R6/include + $(DO_CC) $(CFLAGS_ODE) + +world.o: world.c + $(CHECKLEVEL2) + $(DO_CC) $(CFLAGS_ODE) crypto.o: crypto.c $(CHECKLEVEL2) @@ -462,6 +460,20 @@ mod_skeletal_animatevertices_sse.o: mod_skeletal_animatevertices_sse.c $(CHECKLEVEL2) $(DO_CC) $(CFLAGS_SSE) +snd_xmp.o: snd_xmp.c + $(CHECKLEVEL2) + $(DO_CC) $(CFLAGS_SND_XMP) + +#this checks USEXMP when compiling so it needs the XMP flags as well +snd_main.o: snd_main.c + $(CHECKLEVEL2) + $(DO_CC) $(CFLAGS_SND_XMP) + +#this checks USEXMP when compiling so it needs the XMP flags as well +snd_mem.o: snd_mem.c + $(CHECKLEVEL2) + $(DO_CC) $(CFLAGS_SND_XMP) + darkplaces.o: %.o : %.rc $(CHECKLEVEL2) $(WINDRES) -o $@ $< @@ -497,6 +509,7 @@ clean: -$(CMD_RM) $(EXE_SDLNEXUIZ) -$(CMD_RM) *.o -$(CMD_RM) *.d + -$(CMD_RM) *.gch -$(CMD_RM) build-obj/ clean-profile: clean