mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-12-25 12:10:49 +00:00
79bbb3fe46
MINGW/MINGW64 implies SDL.
462 lines
6.7 KiB
Makefile
462 lines
6.7 KiB
Makefile
# 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:=\
|
|
101 102\
|
|
91 92 93\
|
|
81 82 83 84\
|
|
71 72 73 74 75\
|
|
61 62 63 64\
|
|
51 52 53 54 55\
|
|
40 41 42 43 44 45 46 47 48 49
|
|
|
|
LATEST_GCC_VERSION=10.2
|
|
|
|
# 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)))
|
|
version:=$(shell $(CC) --version)
|
|
# check if this is in fact GCC
|
|
ifneq (,$(or $(findstring gcc,$(version)),$(findstring GCC,$(version))))
|
|
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 GCC102
|
|
GCC101=1
|
|
endif
|
|
|
|
ifdef GCC101
|
|
GCC93=1
|
|
endif
|
|
|
|
ifdef GCC93
|
|
GCC92=1
|
|
endif
|
|
|
|
ifdef GCC92
|
|
GCC91=1
|
|
endif
|
|
|
|
ifdef GCC91
|
|
GCC84=1
|
|
endif
|
|
|
|
ifdef GCC84
|
|
GCC83=1
|
|
endif
|
|
|
|
ifdef GCC83
|
|
GCC82=1
|
|
endif
|
|
|
|
ifdef GCC82
|
|
GCC81=1
|
|
endif
|
|
|
|
ifdef GCC81
|
|
GCC75=1
|
|
endif
|
|
|
|
ifdef GCC75
|
|
GCC74=1
|
|
endif
|
|
|
|
ifdef GCC74
|
|
GCC73=1
|
|
endif
|
|
|
|
ifdef GCC73
|
|
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
|
|
GCC55=1
|
|
endif
|
|
|
|
ifdef GCC55
|
|
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
|
|
ifndef RELAXWARNINGS
|
|
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
|
|
$(error No interface or platform flag defined)
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
#determine the interface directory (where you put all i_*.c)
|
|
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 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
|
|
#NASMFORMAT=win64
|
|
SDL=1
|
|
OBJDIR:=$(OBJDIR)/Mingw64
|
|
BIN:=$(BIN)/Mingw64
|
|
else
|
|
ifdef MINGW
|
|
NASMFORMAT=win32
|
|
SDL=1
|
|
OBJDIR:=$(OBJDIR)/Mingw
|
|
BIN:=$(BIN)/Mingw
|
|
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
|