2020-06-18 05:49:12 +00:00
|
|
|
# vim: ft=make
|
2014-03-15 16:59:03 +00:00
|
|
|
#
|
|
|
|
# Makefile.cfg for SRB2
|
|
|
|
#
|
|
|
|
|
|
|
|
#
|
|
|
|
# GNU compiler & tools' flags
|
|
|
|
# and other things
|
|
|
|
#
|
|
|
|
|
2020-06-18 05:49:12 +00:00
|
|
|
# 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
|
|
|
|
|
2020-06-18 05:52:19 +00:00
|
|
|
# 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
|
|
|
|
|
2020-06-18 05:49:12 +00:00
|
|
|
# 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\
|
2020-06-18 05:58:11 +00:00
|
|
|
Your compiler version, GCC $(version), is not supported by the Makefile.\
|
2020-06-18 05:49:12 +00:00
|
|
|
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
|
|
|
|
|
2019-08-09 00:27:57 +00:00
|
|
|
ifdef GCC91
|
|
|
|
GCC83=1
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef GCC83
|
|
|
|
GCC82=1
|
2019-03-10 00:41:56 +00:00
|
|
|
endif
|
|
|
|
|
2019-08-09 00:27:57 +00:00
|
|
|
ifdef GCC82
|
|
|
|
GCC81=1
|
2019-03-10 00:41:56 +00:00
|
|
|
endif
|
|
|
|
|
2019-08-09 00:27:57 +00:00
|
|
|
ifdef GCC81
|
2017-10-01 03:07:47 +00:00
|
|
|
GCC72=1
|
|
|
|
endif
|
|
|
|
|
2017-09-28 13:13:01 +00:00
|
|
|
ifdef GCC72
|
|
|
|
GCC71=1
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef GCC71
|
|
|
|
GCC64=1
|
|
|
|
endif
|
2017-03-12 21:45:18 +00:00
|
|
|
|
2017-09-28 13:04:36 +00:00
|
|
|
ifdef GCC64
|
2018-10-07 14:44:44 +00:00
|
|
|
GCC63=1
|
2017-09-28 13:04:36 +00:00
|
|
|
endif
|
|
|
|
|
2017-03-12 21:45:18 +00:00
|
|
|
ifdef GCC63
|
|
|
|
GCC62=1
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef GCC62
|
|
|
|
GCC61=1
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef GCC61
|
|
|
|
GCC54=1
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef GCC54
|
|
|
|
GCC53=1
|
2017-03-13 00:23:30 +00:00
|
|
|
endif
|
2017-03-12 21:45:18 +00:00
|
|
|
|
2016-01-27 06:39:12 +00:00
|
|
|
ifdef GCC53
|
|
|
|
GCC52=1
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef GCC52
|
|
|
|
GCC51=1
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef GCC51
|
|
|
|
GCC49=1
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef GCC49
|
|
|
|
GCC48=1
|
|
|
|
endif
|
|
|
|
|
2014-03-15 16:59:03 +00:00
|
|
|
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
|
2018-12-15 00:33:40 +00:00
|
|
|
WFLAGS+=-Wfloat-equal
|
2014-03-15 16:59:03 +00:00
|
|
|
#WFLAGS+=-Wtraditional
|
|
|
|
ifdef VCHELP
|
|
|
|
WFLAGS+=-Wdeclaration-after-statement
|
2019-03-04 21:45:24 +00:00
|
|
|
WFLAGS+=-Wno-error=declaration-after-statement
|
2014-03-15 16:59:03 +00:00
|
|
|
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
|
2019-08-09 02:47:33 +00:00
|
|
|
ifdef GCC91
|
|
|
|
WFLAGS+=-Wno-error=address-of-packed-member
|
|
|
|
endif
|
2014-03-15 16:59:03 +00:00
|
|
|
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
|
2019-08-09 01:25:46 +00:00
|
|
|
ifdef GCC71
|
|
|
|
WFLAGS+=-Wno-error=format-overflow=2
|
|
|
|
endif
|
2014-03-15 16:59:03 +00:00
|
|
|
WFLAGS+=-Wformat-security
|
|
|
|
ifndef GCC29
|
|
|
|
#WFLAGS+=-Winit-self
|
|
|
|
endif
|
2016-01-28 17:06:00 +00:00
|
|
|
ifdef GCC46
|
|
|
|
WFLAGS+=-Wno-suggest-attribute=noreturn
|
|
|
|
endif
|
|
|
|
|
2014-03-15 16:59:03 +00:00
|
|
|
ifdef NOLDWARNING
|
|
|
|
LDFLAGS+=-Wl,--as-needed
|
|
|
|
endif
|
2017-03-13 01:09:06 +00:00
|
|
|
|
2014-03-15 16:59:03 +00:00
|
|
|
ifdef ERRORMODE
|
|
|
|
WFLAGS+=-Werror
|
|
|
|
endif
|
2017-03-13 01:09:06 +00:00
|
|
|
|
2017-03-13 00:51:45 +00:00
|
|
|
WFLAGS+=$(OLDWFLAGS)
|
2017-03-13 01:09:06 +00:00
|
|
|
|
2014-03-15 16:59:03 +00:00
|
|
|
ifdef GCC43
|
|
|
|
#WFLAGS+=-Wno-error=clobbered
|
|
|
|
endif
|
2019-03-04 21:44:15 +00:00
|
|
|
ifdef GCC44
|
|
|
|
WFLAGS+=-Wno-error=array-bounds
|
|
|
|
endif
|
2016-05-27 05:55:52 +00:00
|
|
|
ifdef GCC46
|
|
|
|
WFLAGS+=-Wno-error=suggest-attribute=noreturn
|
|
|
|
endif
|
2017-03-13 00:43:35 +00:00
|
|
|
ifdef GCC54
|
2017-03-13 01:16:37 +00:00
|
|
|
WFLAGS+=-Wno-logical-op -Wno-error=logical-op
|
2017-03-13 00:43:35 +00:00
|
|
|
endif
|
|
|
|
ifdef GCC61
|
2017-03-13 01:16:37 +00:00
|
|
|
WFLAGS+=-Wno-tautological-compare -Wno-error=tautological-compare
|
2017-03-12 21:45:18 +00:00
|
|
|
endif
|
2018-11-27 00:37:07 +00:00
|
|
|
ifdef GCC71
|
2019-08-29 23:27:52 +00:00
|
|
|
WFLAGS+=-Wimplicit-fallthrough=4
|
2018-11-27 00:28:55 +00:00
|
|
|
endif
|
2019-08-09 02:34:09 +00:00
|
|
|
ifdef GCC81
|
2018-11-27 00:01:40 +00:00
|
|
|
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
|
2019-02-21 23:48:42 +00:00
|
|
|
WFLAGS+=-Wno-error=multistatement-macros
|
2018-11-27 00:01:40 +00:00
|
|
|
endif
|
2014-03-15 16:59:03 +00:00
|
|
|
|
2016-01-28 16:49:23 +00:00
|
|
|
|
2014-03-15 16:59:03 +00:00
|
|
|
#indicate platform and what interface use with
|
|
|
|
ifndef LINUX
|
|
|
|
ifndef FREEBSD
|
|
|
|
ifndef CYGWIN32
|
|
|
|
ifndef MINGW
|
2018-11-14 23:00:10 +00:00
|
|
|
ifndef MINGW64
|
2014-03-15 16:59:03 +00:00
|
|
|
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
|
2016-07-21 18:42:00 +00:00
|
|
|
i_net_o=$(OBJDIR)/i_net.o
|
2014-03-15 16:59:03 +00:00
|
|
|
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
|
2014-08-28 02:43:10 +00:00
|
|
|
INTERFACE=sdl
|
2014-03-15 16:59:03 +00:00
|
|
|
OBJDIR:=$(OBJDIR)/SDL
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifndef DUMMY
|
|
|
|
ifdef DEBUGMODE
|
|
|
|
OBJDIR:=$(OBJDIR)/Debug
|
|
|
|
BIN:=$(BIN)/Debug
|
|
|
|
else
|
|
|
|
OBJDIR:=$(OBJDIR)/Release
|
|
|
|
BIN:=$(BIN)/Release
|
|
|
|
endif
|
|
|
|
endif
|