# vim: ft=make # # Makefile.cfg for SRB2 # # # GNU compiler & tools' flags # and other things # # See the following variable don't start with 'GCC'. This is # to avoid a false positive with the version detection... SUPPORTED_GCC_VERSIONS:=\ 91\ 81 82 83\ 71 72\ 61 62 63 64\ 51 52 53 54\ 40 41 42 43 44 45 46 47 48 49 LATEST_GCC_VERSION=9.1 # gcc or g++ ifdef PREFIX CC=$(PREFIX)-gcc CXX=$(PREFIX)-g++ OBJCOPY=$(PREFIX)-objcopy OBJDUMP=$(PREFIX)-objdump STRIP=$(PREFIX)-strip WINDRES=$(PREFIX)-windres else OBJCOPY=objcopy OBJDUMP=objdump STRIP=strip WINDRES=windres endif # because Apple screws with us on this # need to get bintools from homebrew ifdef MACOSX CC=clang CXX=clang OBJCOPY=gobjcopy OBJDUMP=gobjdump endif # Automatically set version flag, but not if one was manually set ifeq (,$(filter GCC%,$(.VARIABLES))) ifneq (,$(findstring GCC,$(shell $(CC) --version))) # if it's GCC version:=$(shell $(CC) -dumpversion) # Turn version into words of major, minor v:=$(subst ., ,$(version)) # concat. major minor v:=$(word 1,$(v))$(word 2,$(v)) # If this version is not in the list, default to the latest supported ifeq (,$(filter $(v),$(SUPPORTED_GCC_VERSIONS))) $(info\ Your compiler version, GCC $(version), is not supported by the Makefile.\ The Makefile will assume GCC $(LATEST_GCC_VERSION).) GCC$(subst .,,$(LATEST_GCC_VERSION))=1 else $(info Detected GCC $(version) (GCC$(v))) GCC$(v)=1 endif endif endif ifdef GCC91 GCC83=1 endif ifdef GCC83 GCC82=1 endif ifdef GCC82 GCC81=1 endif ifdef GCC81 GCC72=1 endif ifdef GCC72 GCC71=1 endif ifdef GCC71 GCC64=1 endif ifdef GCC64 GCC63=1 endif ifdef GCC63 GCC62=1 endif ifdef GCC62 GCC61=1 endif ifdef GCC61 GCC54=1 endif ifdef GCC54 GCC53=1 endif ifdef GCC53 GCC52=1 endif ifdef GCC52 GCC51=1 endif ifdef GCC51 GCC49=1 endif ifdef GCC49 GCC48=1 endif ifdef GCC48 GCC47=1 endif ifdef GCC47 GCC46=1 endif ifdef GCC46 GCC45=1 endif ifdef GCC45 GCC44=1 endif ifdef GCC44 GCC43=1 endif ifdef GCC43 GCC42=1 endif ifdef GCC42 GCC41=1 endif ifdef GCC41 GCC40=1 VCHELP=1 endif ifdef GCC295 GCC29=1 endif OLDWFLAGS:=$(WFLAGS) # -W -Wno-unused WFLAGS=-Wall ifndef GCC295 #WFLAGS+=-Wno-packed endif ifdef ERRORMODE WARNINGMODE=1 endif ifdef WARNINGMODE WFLAGS+=-W #WFLAGS+=-Wno-sign-compare ifndef GCC295 WFLAGS+=-Wno-div-by-zero endif #WFLAGS+=-Wsystem-headers WFLAGS+=-Wfloat-equal #WFLAGS+=-Wtraditional ifdef VCHELP WFLAGS+=-Wdeclaration-after-statement WFLAGS+=-Wno-error=declaration-after-statement endif WFLAGS+=-Wundef ifndef GCC295 WFLAGS+=-Wendif-labels endif ifdef GCC41 WFLAGS+=-Wshadow endif #WFLAGS+=-Wlarger-than-%len% WFLAGS+=-Wpointer-arith -Wbad-function-cast ifdef GCC45 #WFLAGS+=-Wc++-compat endif WFLAGS+=-Wcast-qual ifndef NOCASTALIGNWARN WFLAGS+=-Wcast-align endif WFLAGS+=-Wwrite-strings ifndef ERRORMODE #WFLAGS+=-Wconversion ifdef GCC43 #WFLAGS+=-Wno-sign-conversion endif endif WFLAGS+=-Wsign-compare ifdef GCC91 WFLAGS+=-Wno-error=address-of-packed-member endif ifdef GCC45 WFLAGS+=-Wlogical-op endif WFLAGS+=-Waggregate-return ifdef HAIKU ifdef GCC41 #WFLAGS+=-Wno-attributes endif endif #WFLAGS+=-Wstrict-prototypes ifdef GCC40 WFLAGS+=-Wold-style-definition endif WFLAGS+=-Wmissing-prototypes -Wmissing-declarations ifdef GCC40 WFLAGS+=-Wmissing-field-initializers endif WFLAGS+=-Wmissing-noreturn #WFLAGS+=-Wmissing-format-attribute #WFLAGS+=-Wno-multichar #WFLAGS+=-Wno-deprecated-declarations #WFLAGS+=-Wpacked #WFLAGS+=-Wpadded #WFLAGS+=-Wredundant-decls WFLAGS+=-Wnested-externs #WFLAGS+=-Wunreachable-code WFLAGS+=-Winline ifdef GCC43 WFLAGS+=-funit-at-a-time WFLAGS+=-Wlogical-op endif ifndef GCC295 WFLAGS+=-Wdisabled-optimization endif endif WFLAGS+=-Wformat-y2k ifdef GCC71 WFLAGS+=-Wno-error=format-overflow=2 endif WFLAGS+=-Wformat-security ifndef GCC29 #WFLAGS+=-Winit-self endif ifdef GCC46 WFLAGS+=-Wno-suggest-attribute=noreturn endif ifdef NOLDWARNING LDFLAGS+=-Wl,--as-needed endif ifdef ERRORMODE WFLAGS+=-Werror endif WFLAGS+=$(OLDWFLAGS) ifdef GCC43 #WFLAGS+=-Wno-error=clobbered endif ifdef GCC44 WFLAGS+=-Wno-error=array-bounds endif ifdef GCC46 WFLAGS+=-Wno-error=suggest-attribute=noreturn endif ifdef GCC54 WFLAGS+=-Wno-logical-op -Wno-error=logical-op endif ifdef GCC61 WFLAGS+=-Wno-tautological-compare -Wno-error=tautological-compare endif ifdef GCC71 WFLAGS+=-Wimplicit-fallthrough=4 endif ifdef GCC81 WFLAGS+=-Wno-error=format-overflow WFLAGS+=-Wno-error=stringop-truncation WFLAGS+=-Wno-error=stringop-overflow WFLAGS+=-Wno-format-overflow WFLAGS+=-Wno-stringop-truncation WFLAGS+=-Wno-stringop-overflow WFLAGS+=-Wno-error=multistatement-macros endif #indicate platform and what interface use with ifndef LINUX ifndef FREEBSD ifndef CYGWIN32 ifndef MINGW ifndef MINGW64 ifndef SDL ifndef DUMMY DJGPPDOS=1 endif endif endif endif endif endif endif #determine the interface directory (where you put all i_*.c) i_cdmus_o=$(OBJDIR)/i_cdmus.o i_net_o=$(OBJDIR)/i_net.o i_system_o=$(OBJDIR)/i_system.o i_sound_o=$(OBJDIR)/i_sound.o i_main_o=$(OBJDIR)/i_main.o #set OBJDIR and BIN's starting place OBJDIR=../objs BIN=../bin #Nasm ASM and rm ifdef YASM NASM?=yasm else NASM?=nasm endif REMOVE?=rm -f MKDIR?=mkdir -p GZIP?=gzip GZIP_OPTS?=-9 -f -n GZIP_OPT2=$(GZIP_OPTS) --rsyncable UPX?=upx UPX_OPTS?=--best --preserve-build-id ifndef ECHO UPX_OPTS+=-q endif #Interface Setup ifdef DJGPPDOS INTERFACE=djgppdos NASMFORMAT=coff OBJDIR:=$(OBJDIR)/djgppdos ifdef WATTCP OBJDIR:=$(OBJDIR)/wattcp endif WFLAGS+=-Wno-format BIN:=$(BIN)/Dos else ifdef DUMMY INTERFACE=dummy OBJDIR:=$(OBJDIR)/dummy BIN:=$(BIN)/dummy else ifdef LINUX NASMFORMAT=elf -DLINUX SDL=1 ifdef LINUX64 OBJDIR:=$(OBJDIR)/Linux64 BIN:=$(BIN)/Linux64 else OBJDIR:=$(OBJDIR)/Linux BIN:=$(BIN)/Linux endif else ifdef FREEBSD INTERFACE=sdl NASMFORMAT=elf -DLINUX SDL=1 OBJDIR:=$(OBJDIR)/FreeBSD BIN:=$(BIN)/FreeBSD else ifdef SOLARIS INTERFACE=sdl NASMFORMAT=elf -DLINUX SDL=1 OBJDIR:=$(OBJDIR)/Solaris BIN:=$(BIN)/Solaris else ifdef CYGWIN32 INTERFACE=sdl NASMFORMAT=win32 SDL=1 OBJDIR:=$(OBJDIR)/cygwin BIN:=$(BIN)/Cygwin else ifdef MINGW64 INTERFACE=win32 #NASMFORMAT=win64 OBJDIR:=$(OBJDIR)/Mingw64 BIN:=$(BIN)/Mingw64 else ifdef MINGW INTERFACE=win32 NASMFORMAT=win32 OBJDIR:=$(OBJDIR)/Mingw BIN:=$(BIN)/Mingw endif endif endif endif endif endif endif endif ifdef ARCHNAME OBJDIR:=$(OBJDIR)/$(ARCHNAME) BIN:=$(BIN)/$(ARCHNAME) endif OBJDUMP_OPTS?=--wide --source --line-numbers LD=$(CC) ifdef SDL INTERFACE=sdl OBJDIR:=$(OBJDIR)/SDL endif ifndef DUMMY ifdef DEBUGMODE OBJDIR:=$(OBJDIR)/Debug BIN:=$(BIN)/Debug else OBJDIR:=$(OBJDIR)/Release BIN:=$(BIN)/Release endif endif