# 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 ifdef DC NOCASTALIGNWARN=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 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 ifndef XBOX WFLAGS+=-Wmissing-prototypes -Wmissing-declarations endif ifdef GCC40 WFLAGS+=-Wmissing-field-initializers endif ifndef XBOX WFLAGS+=-Wmissing-noreturn endif #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+=-Wno-error=implicit-fallthrough WFLAGS+=-Wno-implicit-fallthrough WFLAGS+=-Wno-format-truncation 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 WINCE ifndef XBOX ifndef PSP ifndef DC ifndef WII ifndef PS3N ifndef LINUX ifndef FREEBSD ifndef CYGWIN32 ifndef MINGW ifndef MINGW64 ifndef SDL ifndef NDS ifndef DUMMY DJGPPDOS=1 endif endif endif endif endif endif endif 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 CP?=cp MKDIR?=mkdir -p MKISOFS?=mkisofs DD?=dd 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 WII INTERFACE=sdl12 NONX86=1 STATIC=1 PREFIX?=powerpc-eabi SDL=1 SDL12=1 SDLMAIN=1 OBJDIR:=$(OBJDIR)/Wii BIN:=$(BIN)/Wii NOUPX=1 else ifdef PS3N INTERFACE=sdl12 NONX86=1 STATIC=1 PREFIX?=ppu SDL=1 SDL12=1 # unsure? #SDLMAIN=1 # can't compile SDL_mixer for ps3... NOMIXER=1 OBJDIR:=$(OBJDIR)/PS3 BIN:=$(BIN)/PS3 else ifdef MINGW INTERFACE=win32 NASMFORMAT=win32 OBJDIR:=$(OBJDIR)/Mingw BIN:=$(BIN)/Mingw else ifdef XBOX INTERFACE=sdl12 NASMFORMAT=win32 PREFIX?=/usr/local/openxdk/bin/i386-pc-xbox SDL=1 SDL12=1 OBJDIR:=$(OBJDIR)/XBOX BIN:=$(BIN)/XBOX else ifdef PSP INTERFACE=sdl12 NONX86=1 SDL=1 SDL12=1 OBJDIR:=$(OBJDIR)/PSP BIN:=$(BIN)/PSP NOUPX=1 else ifdef DC INTERFACE=sdl12 NONX86=1 SDL=1 SDL12=1 OBJDIR:=$(OBJDIR)/DC BIN:=$(BIN)/DC NOUPX=1 else ifdef WINCE INTERFACE=sdl12 NONX86=1 PREFIX?=arm-wince-pe SDL=1 SDL12=1 OBJDIR:=$(OBJDIR)/WinCE BIN:=$(BIN)/WinCE else ifdef NDS INTERFACE=nds OBJDIR:=$(OBJDIR)/nds BIN:=$(BIN)/nds NOUPX=1 endif endif endif endif endif endif endif endif endif endif endif endif endif endif endif ifdef GP2X ifdef SDL SDL12=1 endif endif ifdef ARCHNAME OBJDIR:=$(OBJDIR)/$(ARCHNAME) BIN:=$(BIN)/$(ARCHNAME) endif OBJDUMP_OPTS?=--wide --source --line-numbers LD=$(CC) ifdef SDL # SDL 2.0 ifndef SDL12 INTERFACE=sdl # SDL 1.2 else INTERFACE=sdl12 endif OBJDIR:=$(OBJDIR)/SDL endif ifndef DUMMY ifdef DEBUGMODE OBJDIR:=$(OBJDIR)/Debug BIN:=$(BIN)/Debug else OBJDIR:=$(OBJDIR)/Release BIN:=$(BIN)/Release endif endif