raze/Common.mak

961 lines
24 KiB
Makefile

# OS package maintainers: Please try invoking make with PACKAGE_REPOSITORY=1 to see if that meets your needs before patching out our optimizations entirely.
PACKAGE_REPOSITORY ?= 0
# Are we running from synthesis?
SYNTHESIS ?= 0
##### Detect platform
ifndef HOSTPLATFORM
HOSTPLATFORM=UNKNOWN
ifeq ($(findstring Windows,$(OS)),Windows)
HOSTPLATFORM=WINDOWS
else
uname:=$(strip $(shell uname -s))
ifeq ($(findstring Linux,$(uname)),Linux)
HOSTPLATFORM=LINUX
else ifeq ($(findstring BSD,$(uname)),BSD)
HOSTPLATFORM=BSD
else ifeq ($(findstring MINGW,$(uname)),MINGW)
HOSTPLATFORM=WINDOWS
else ifeq ($(findstring MSYS,$(uname)),MSYS)
HOSTPLATFORM=WINDOWS
else ifeq ($(findstring Darwin,$(uname)),Darwin)
HOSTPLATFORM=DARWIN
else ifeq ($(findstring BeOS,$(uname)),BeOS)
HOSTPLATFORM=BEOS
else ifeq ($(findstring skyos,$(uname)),skyos)
HOSTPLATFORM=SKYOS
else ifeq ($(findstring QNX,$(uname)),QNX)
HOSTPLATFORM=QNX
else ifeq ($(findstring SunOS,$(uname)),SunOS)
HOSTPLATFORM=SUNOS
else ifeq ($(findstring syllable,$(uname)),syllable)
HOSTPLATFORM=SYLLABLE
endif
endif
endif
ifndef PLATFORM
PLATFORM=$(HOSTPLATFORM)
endif
ifndef SUBPLATFORM
SUBPLATFORM=
ifeq ($(PLATFORM),$(filter $(PLATFORM),LINUX DINGOO GCW CAANOO))
SUBPLATFORM=LINUX
endif
endif
ifeq ($(HOSTPLATFORM),DARWIN)
DARWINVERSION:=$(strip $(shell uname -r | cut -d . -f 1))
DARWIN9 ?= 0
DARWIN10 ?= 0
ifeq (1,$(strip $(shell expr $(DARWINVERSION) \< 10)))
override DARWIN9 := 1
endif
ifeq (1,$(strip $(shell expr $(DARWINVERSION) \< 11)))
override DARWIN10 := 1
endif
endif
##### Makefile meta-settings
PRETTY_OUTPUT ?= 1
NULLSTREAM = /dev/null
DONT_PRINT = > $(NULLSTREAM) 2>&1
DONT_PRINT_STDERR = 2> $(NULLSTREAM)
DONT_FAIL = ; exit 0
ifeq ($(HOSTPLATFORM),WINDOWS)
# MSYS2 lets you create files named NUL but has a /dev/null. Go figure.
ifeq (,$(wildcard /dev/null))
NULLSTREAM = NUL
endif
endif
##### Toolchain setup
CROSS=
CROSS_SUFFIX=
ifneq ($(CROSS)$(CROSS_SUFFIX),)
undefine CC
undefine CXX
undefine AR
undefine RC
undefine RANLIB
undefine STRIP
endif
CC=$(CROSS)gcc$(CROSS_SUFFIX)
CXX=$(CROSS)g++$(CROSS_SUFFIX)
COBJC=$(CC) -x objective-c
COBJCXX=$(CXX) -x objective-c++
L_CC=$(CC)
L_CXX=$(CXX)
AR=$(CROSS)ar$(CROSS_SUFFIX)
RC=$(CROSS)windres$(CROSS_SUFFIX)
RANLIB=$(CROSS)ranlib$(CROSS_SUFFIX)
STRIP=$(CROSS)strip$(CROSS_SUFFIX)
AS=nasm
# LuaJIT standalone interpreter executable:
LUAJIT=luajit$(EXESUFFIX)
PKG_CONFIG=pkg-config
ELF2DOL=elf2dol
# Override defaults that absolutely will not work.
ifeq ($(CC),cc)
override CC=gcc
endif
ifeq ($(AS),as)
override AS=nasm
endif
CCFULLPATH=$(CC)
ifeq ($(PLATFORM),WII)
ifeq ($(strip $(DEVKITPPC)),)
$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=<path to>devkitPPC")
endif
include $(DEVKITPPC)/wii_rules
CCFULLPATH=$(DEVKITPPC)/bin/$(CC)
CROSS=powerpc-eabi-
RANLIB=powerpc-eabi-ranlib
STRIP=powerpc-eabi-strip
endif
ifeq ($(PLATFORM),$(filter $(PLATFORM),DINGOO GCW))
CROSS=mipsel-linux-
endif
CLANG?=0
ifeq ($(findstring clang,$(CC) $(MAKECMDGOALS)),clang)
override CLANG=1
CLANGNAME:=$(CC)
else
CLANGNAME:=clang
endif
# detect clang symlinked as gcc, as in OS X
CLANG_POTENTIAL_VERSION := $(shell $(CCFULLPATH) --version)
ifeq ($(findstring clang,$(CLANG_POTENTIAL_VERSION)),clang)
override CLANG=1
endif
ifneq (0,$(CLANG))
CLANGXXNAME:=$(subst clang,clang++,$(CLANGNAME))
override CC=$(CLANGNAME) -x c
override CXX=$(CLANGXXNAME) -x c++
override COBJC=$(CLANGNAME) -x objective-c
override COBJCXX=$(CLANGXXNAME) -x objective-c++
override L_CC=$(CLANGNAME)
override L_CXX=$(CLANGXXNAME)
endif
ifndef GCC_MAJOR
ifeq (0,$(CLANG))
GCC_MAJOR := $(shell $(CCFULLPATH) -dumpversion 2>&1 | cut -d'.' -f1)
endif
endif
ifeq ($(GCC_MAJOR),)
GCC_MAJOR := 4
endif
ifndef GCC_MINOR
ifeq (0,$(CLANG))
GCC_MINOR := $(shell $(CCFULLPATH) -dumpversion 2>&1 | cut -d'.' -f2)
endif
endif
ifeq ($(GCC_MINOR),)
GCC_MINOR := 8
endif
GCC_PREREQ_4 := 1
ifeq (1,$(strip $(shell expr $(GCC_MAJOR) \< 4)))
ifeq (0,$(CLANG))
GCC_PREREQ_4 := 0
$(error How do you still have an old GCC in $$(CURRENT_YEAR)?)
endif
endif
##### Detect machine architecture
BITS=32
ifeq ($(PLATFORM),WINDOWS)
ifndef COMPILERTARGET
COMPILERTARGET:=$(strip $(shell $(CC) -dumpmachine))
endif
IMPLICIT_ARCH=i386
ifeq ($(findstring x86_64,$(COMPILERTARGET)),x86_64)
IMPLICIT_ARCH=x86_64
BITS=64
endif
else ifeq ($(PLATFORM),WII)
IMPLICIT_ARCH=ppc
else
ifneq ($(ARCH),)
override ARCH:=$(subst i486,i386,$(subst i586,i386,$(subst i686,i386,$(strip $(ARCH)))))
IMPLICIT_ARCH=$(ARCH)
else
IMPLICIT_ARCH:=$(subst i486,i386,$(subst i586,i386,$(subst i686,i386,$(strip $(shell uname -m)))))
endif
ifeq ($(findstring x86_64,$(IMPLICIT_ARCH)),x86_64)
BITS=64
endif
endif
EXESUFFIX=
DLLSUFFIX=.so
DOLSUFFIX=.dol
ifeq ($(PLATFORM),DARWIN)
DLLSUFFIX=.dylib
endif
ifeq ($(PLATFORM),WII)
EXESUFFIX=.elf
endif
ifeq ($(PLATFORM),SKYOS)
EXESUFFIX=.app
endif
ifeq ($(PLATFORM),WINDOWS)
EXESUFFIX=.exe
DLLSUFFIX=.dll
endif
##### Toggles
# CPLUSPLUS - 1 = enable C++ building
# RELEASE - 1 = no debugging
# DEBUGANYWAY:
# 1 = Include debug symbols even when generating release code.
# 2 = Also enable sanitizers with Clang. On the C side, make 'sprite' etc. be real arrays.
# KRANDDEBUG - 1 = include logging of krand() calls for debugging the demo system
# MEMMAP - 1 = produce .memmap file when linking
# OPTLEVEL - 0..3 = GCC optimization strategy
# LTO - 1 = enable link-time optimization
# Optional overrides for text
APPNAME=
APPBASENAME=
# Build toggles
RELEASE?=1
NOASM = 0
# EXPERIMENTAL, unfinished x86_64 assembly routines. DO NOT ENABLE.
USE_ASM64 ?= 0
MEMMAP?=0
CPLUSPLUS?=1
# Feature toggles
STANDALONE ?= 0
NETCODE ?= 1
STARTUP_WINDOW ?= 1
SIMPLE_MENU ?= 0
POLYMER = 1
USE_OPENGL = 1
LUNATIC ?= 0
USE_LUAJIT_2_1 ?= 0
# Library toggles
HAVE_GTK2 ?= 1
USE_LIBVPX ?= 1
HAVE_VORBIS ?= 1
HAVE_FLAC ?= 1
HAVE_XMP ?= 1
RENDERTYPE=SDL
MIXERTYPE=SDL
SDL_TARGET ?= 2
# Debugging/Build options
DEBUGANYWAY?=0
KRANDDEBUG?=0
PROFILER?=0
# Make allocache() a wrapper around malloc()? Useful for debugging
# allocache()-allocated memory accesses with e.g. Valgrind.
# For debugging with Valgrind + GDB, see
# http://valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.gdbserver
ALLOCACHE_AS_MALLOC?=0
##### Settings overrides and implicit cascades
ifneq (0,$(KRANDDEBUG))
RELEASE=0
endif
ifneq (100,$(RELEASE)$(PROFILER)$(ALLOCACHE_AS_MALLOC))
# so that we have debug symbols
DEBUGANYWAY=1
endif
ifeq ($(PLATFORM),WINDOWS)
MIXERTYPE=WIN
ifneq ($(RENDERTYPE),SDL)
ifeq ($(MIXERTYPE),SDL)
override MIXERTYPE:=WIN
endif
endif
override HAVE_GTK2 = 0
else ifeq ($(PLATFORM),DARWIN)
HAVE_GTK2 = 0
else ifeq ($(PLATFORM),WII)
override USE_OPENGL=0
override NETCODE = 0
override HAVE_GTK2 = 0
override HAVE_FLAC = 0
SDL_TARGET=1
else ifeq ($(PLATFORM),$(filter $(PLATFORM),DINGOO GCW QNX SUNOS SYLLABLE))
override USE_OPENGL=0
override NOASM=1
else ifeq ($(PLATFORM),$(filter $(PLATFORM),BEOS SKYOS))
override NOASM=1
endif
ifneq (i386,$(strip $(IMPLICIT_ARCH)))
override NOASM=1
endif
ifeq (0,$(USE_OPENGL))
override POLYMER = 0
override USE_LIBVPX = 0
endif
ifeq ($(RELEASE),0)
override STRIP=
endif
ifneq ($(DEBUGANYWAY),0)
override STRIP=
endif
ifeq ($(RELEASE),0)
OPTLEVEL?=0
LTO=0
else
OPTLEVEL?=2
LTO=1
endif
ifneq (0,$(CLANG))
ifeq ($(PLATFORM),WINDOWS)
LTO=0
endif
endif
ifneq ($(LUNATIC),0)
# FIXME: Lunatic builds with LTO don't start up properly as the required
# symbol names are apparently not exported.
override LTO=0
endif
ifeq (0,$(CLANG))
ifeq (0,$(GCC_PREREQ_4))
override LTO=0
endif
ifeq (1,$(strip $(shell expr $(GCC_MAJOR) = 4)))
ifeq ($(PLATFORM),WII)
ifeq (1,$(strip $(shell expr $(GCC_MINOR) \< 8)))
override LTO=0
endif
else
ifeq (1,$(strip $(shell expr $(GCC_MINOR) \< 6)))
override LTO=0
endif
endif
endif
endif
########## End Toggles, Begin Construction ##########
##### Instantiate variables
COMMONFLAGS =
COMPILERFLAGS = -funsigned-char
CSTD:=-std=gnu99
CONLYFLAGS=$(CSTD)
CXXSTD:=-std=gnu++11
CXXONLYFLAGS=$(CXXSTD) -fno-exceptions -fno-rtti
ifneq (0,$(CLANG))
CSTD:=$(subst gnu,c,$(CSTD))
CXXSTD:=$(subst gnu,c,$(CXXSTD))
endif
ASFLAGS=-s #-g
LUAJIT_BCOPTS :=
LINKERFLAGS=
L_CXXONLYFLAGS=
LIBS=
GUI_LIBS=
LIBDIRS=
##### Mandatory platform parameters
ASFORMAT=elf$(BITS)
# Options to "luajit -b" for synthesis. Since it runs on Linux, we need to tell
# the native LuaJIT to emit PE object files.
ifeq ($(PLATFORM),WINDOWS)
LINKERFLAGS+= -static-libgcc -static
ifeq (0,$(CLANG))
L_CXXONLYFLAGS += -static-libstdc++
endif
ifeq (0,$(CLANG))
GUI_LIBS += -mwindows
endif
COMPILERFLAGS+= -DUNDERSCORES
ASFORMAT=win$(BITS)
ASFLAGS+= -DUNDERSCORES
ifneq ($(findstring x86_64,$(COMPILERTARGET)),x86_64)
LINKERFLAGS+= -Wl,--large-address-aware
endif
LINKERFLAGS+= -Wl,--enable-auto-import
LUAJIT_BCOPTS := -o windows
ifeq (32,$(BITS))
LUAJIT_BCOPTS += -a x86
endif
ifeq (64,$(BITS))
LUAJIT_BCOPTS += -a x64
endif
else ifeq ($(PLATFORM),DARWIN)
ifneq ($(ARCH),)
ifneq ($(findstring -arch,$(ARCH)),-arch)
override ARCH := -arch $(ARCH)
endif
endif
COMMONFLAGS += $(ARCH)
ifneq ($(findstring x86_64,$(IMPLICIT_ARCH)),x86_64)
LINKERFLAGS += -read_only_relocs suppress
endif
COMPILERFLAGS+= -DUNDERSCORES
ASFORMAT=macho
ASFLAGS+= -DUNDERSCORES
ifeq ($(findstring x86_64,$(IMPLICIT_ARCH)),x86_64)
ASFORMAT+=64
endif
else ifeq ($(PLATFORM),WII)
LINKERFLAGS+= -mrvl -meabi -mhard-float -Wl,--gc-sections
# -msdata=eabi
COMPILERFLAGS+= -DGEKKO -D__POWERPC__ -I$(LIBOGC_INC)
LIBDIRS += -L$(LIBOGC_LIB)
else ifeq ($(PLATFORM),$(filter $(PLATFORM),DINGOO GCW))
COMPILERFLAGS += -D__OPENDINGUX__
else ifeq ($(PLATFORM),SKYOS)
COMPILERFLAGS+= -DUNDERSCORES
endif
ASFLAGS += -f $(ASFORMAT)
COMPILERFLAGS+= -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
##### Optimizations
ifndef OPTOPT
ifeq ($(findstring x86_64, $(IMPLICIT_ARCH)),x86_64)
ifeq ($(findstring x86_64h, $(IMPLICIT_ARCH)),x86_64h)
OPTOPT=-march=haswell -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -mpopcnt -mpclmul -mavx -mrdrnd -mf16c -mfsgsbase -mavx2 -maes -mfma -mbmi -mbmi2
# -mcrc32 -mmovbe
else
ifeq ($(PLATFORM),DARWIN)
OPTOPT=-march=core2 -mmmx -msse -msse2 -msse3 -mssse3
endif
endif
endif
ifeq ($(findstring i386, $(IMPLICIT_ARCH)),i386)
ifeq ($(PLATFORM),DARWIN)
OPTOPT=-march=nocona -mmmx -msse -msse2 -msse3
else
OPTOPT=-march=pentium3
ifneq (0,$(GCC_PREREQ_4))
OPTOPT += -mtune=generic
# -mstackrealign
endif
OPTOPT += -mmmx
# -msse2 -mfpmath=sse,387 -malign-double
endif
endif
ifeq ($(PLATFORM),WII)
OPTOPT=-mtune=750
endif
endif
ifeq ($(PACKAGE_REPOSITORY),0)
COMMONFLAGS += -O$(OPTLEVEL) $(OPTOPT)
endif
ifneq (0,$(LTO))
COMPILERFLAGS += -DUSING_LTO
COMMONFLAGS += -flto
endif
##### Debugging
ifneq ($(RELEASE)$(DEBUGANYWAY),10)
ifeq ($(PACKAGE_REPOSITORY),0)
COMMONFLAGS += -g
ifeq (0,$(CLANG))
ifneq ($(PLATFORM),WII)
COMMONFLAGS += -fno-omit-frame-pointer
endif
endif
endif
ifeq ($(SUBPLATFORM),LINUX)
# This option is needed to allow obtaining backtraces from within a program.
LIBS+=-rdynamic
endif
endif
ifneq ($(ALLOCACHE_AS_MALLOC),0)
COMPILERFLAGS += -DDEBUG_ALLOCACHE_AS_MALLOC
endif
# See http://clang.llvm.org/docs/UsersManual.html#controlling-code-generation
# for a list of possible UBSan options.
# Clang 3.2 does only supports -fsanitize=address for the AddressSanitizer
CLANG_DEBUG_FLAGS := -fsanitize=address -fsanitize=bounds,enum,float-cast-overflow,object-size
#CLANG_DEBUG_FLAGS := $(CLANG_DEBUG_FLAGS),signed-integer-overflow
#CLANG_DEBUG_FLAGS := $(CLANG_DEBUG_FLAGS),unsigned-integer-overflow
#CLANG_DEBUG_FLAGS := $(CLANG_DEBUG_FLAGS) -fsanitize-undefined-trap-on-error
ifeq (0,$(DEBUGANYWAY))
COMPILERFLAGS += -DNDEBUG
else
COMPILERFLAGS += -DDEBUGGINGAIDS=$(DEBUGANYWAY)
ifneq (0,$(CLANG))
ifeq (2,$(DEBUGANYWAY))
COMMONFLAGS += $(CLANG_DEBUG_FLAGS)
endif
endif
endif
ifneq (0,$(KRANDDEBUG))
COMPILERFLAGS += -DKRANDDEBUG=1
endif
ifneq (0,$(PROFILER))
ifneq ($(PLATFORM),DARWIN)
LIBS+= -lprofiler
endif
COMMONFLAGS += -pg
endif
##### -f stuff
ifneq (0,$(GCC_PREREQ_4))
F_NO_STACK_PROTECTOR := -fno-stack-protector
ifeq (0,$(CLANG))
F_JUMP_TABLES := -fjump-tables
endif
endif
ifeq ($(PLATFORM),DARWIN)
ifeq (1,$(DARWIN9))
F_JUMP_TABLES :=
endif
ifeq ($(findstring ppc,$(IMPLICIT_ARCH))$(findstring i386,$(IMPLICIT_ARCH)),)
F_NO_STACK_PROTECTOR :=
endif
endif
ifeq (0,$(RELEASE))
F_NO_STACK_PROTECTOR :=
else
ifeq (0,$(CLANG))
COMMONFLAGS += -funswitch-loops
endif
ifeq (0,$(DEBUGANYWAY))
COMMONFLAGS += -fomit-frame-pointer
endif
endif
ifneq (0,$(KRANDDEBUG))
COMMONFLAGS += -fno-inline -fno-inline-functions -fno-inline-functions-called-once
endif
COMMONFLAGS+= -fno-strict-aliasing -fno-threadsafe-statics $(F_JUMP_TABLES) $(F_NO_STACK_PROTECTOR)
##### Warnings
W_STRICT_OVERFLOW := -Wno-strict-overflow
ifeq ($(PLATFORM),DARWIN)
ifneq (0,$(DARWIN9))
W_STRICT_OVERFLOW :=
endif
endif
W_UNINITIALIZED := -Wuninitialized
W_GCC_4_1 := -Wno-attributes
W_GCC_4_2 := $(W_STRICT_OVERFLOW)
W_GCC_4_4 := -Wno-unused-result
W_GCC_4_5 := -Wlogical-op -Wcast-qual
CWARNS = -W -Wall \
-Wextra \
-Wpointer-arith \
-Wno-char-subscripts \
-Wno-missing-braces \
-Wwrite-strings \
$(W_UNINITIALIZED) \
$(W_GCC_4_1) \
$(W_GCC_4_2) \
$(W_GCC_4_4) \
$(W_GCC_4_5) \
#-Wstrict-prototypes \
#-Waggregate-return \
#-Wcast-align \
#-Waddress
CONLYWARNS = -Wimplicit -Werror-implicit-function-declaration
ifneq (0,$(CLANG))
CWARNS+= -Wno-unused-value -Wno-parentheses -Wno-unknown-warning-option
else
ifeq (0,$(GCC_PREREQ_4))
W_GCC_4_5 :=
W_GCC_4_4 :=
ifeq (0,$(OPTLEVEL))
W_UNINITIALIZED :=
endif
W_GCC_4_2 :=
W_GCC_4_1 :=
endif
ifeq (1,$(strip $(shell expr $(GCC_MAJOR) = 4)))
ifeq (1,$(strip $(shell expr $(GCC_MINOR) \< 5)))
W_GCC_4_5 :=
ifeq (1,$(strip $(shell expr $(GCC_MINOR) \< 4)))
W_GCC_4_4 :=
ifeq (0,$(OPTLEVEL))
W_UNINITIALIZED :=
endif
ifeq (1,$(strip $(shell expr $(GCC_MINOR) \< 2)))
W_GCC_4_2 :=
ifeq (1,$(strip $(shell expr $(GCC_MINOR) \< 1)))
W_GCC_4_1 :=
endif
endif
endif
endif
endif
endif
##### Features
ifneq (,$(APPNAME))
COMPILERFLAGS+= -DAPPNAME=\"$(APPNAME)\"
endif
ifneq (,$(APPBASENAME))
COMPILERFLAGS+= -DAPPBASENAME=\"$(APPBASENAME)\"
endif
ifneq (0,$(NOASM))
COMPILERFLAGS+= -DNOASM
endif
ifneq (0,$(USE_ASM64))
COMPILERFLAGS+= -DUSE_ASM64
endif
ifneq (0,$(MEMMAP))
ifeq ($(PLATFORM),DARWIN)
LINKERFLAGS+=-Wl,-map -Wl,$@.memmap
else
LINKERFLAGS+=-Wl,-Map=$@.memmap
endif
endif
COMPILERFLAGS+= -DRENDERTYPE$(RENDERTYPE)=1 -DMIXERTYPE$(MIXERTYPE)=1
ifeq (0,$(NETCODE))
COMPILERFLAGS+= -DNETCODE_DISABLE
endif
ifneq (0,$(STARTUP_WINDOW))
COMPILERFLAGS+= -DSTARTUP_WINDOW
endif
ifneq (0,$(SIMPLE_MENU))
COMPILERFLAGS+= -DEDUKE32_SIMPLE_MENU
endif
ifneq (0,$(STANDALONE))
COMPILERFLAGS+= -DEDUKE32_STANDALONE
endif
ifneq (0,$(USE_OPENGL))
COMPILERFLAGS+= -DUSE_OPENGL
endif
ifneq (0,$(POLYMER))
COMPILERFLAGS+= -DPOLYMER
endif
##### External library paths
ifeq ($(PLATFORM),WINDOWS)
COMPILERFLAGS+= -Iplatform/Windows/include
LIBDIRS+= -Lplatform/Windows/lib/$(BITS)
else ifeq ($(PLATFORM),DARWIN)
ifneq ($(shell port --version &>/dev/null; echo $$?),127)
LIBDIRS+= -L/opt/local/lib
COMPILERFLAGS+= -I/opt/local/include
endif
ifneq ($(shell brew --version &>/dev/null; echo $$?),127)
LIBDIRS+= -L/usr/local/lib
COMPILERFLAGS+= -I/usr/local/include
endif
ifneq ($(shell fink --version &>/dev/null; echo $$?),127)
LIBDIRS+= -L/sw/lib
COMPILERFLAGS+= -I/sw/include
endif
else ifeq ($(PLATFORM),BSD)
COMPILERFLAGS+= -I/usr/local/include
else ifeq ($(PLATFORM),WII)
COMPILERFLAGS+= -I$(PORTLIBS)/include -Iplatform/Wii/include
LIBDIRS += -L$(PORTLIBS)/lib -Lplatform/Wii/lib
endif
##### External libraries
ifneq ($(LUNATIC),0)
ifneq ($(USE_LUAJIT_2_1),0)
COMPILERFLAGS+= -DUSE_LUAJIT_2_1
endif
ifeq ($(PLATFORM),WINDOWS)
LIBS+= -lluajit
else
LIBS+= -lluajit-5.1
endif
endif
ifneq (0,$(USE_LIBVPX))
COMPILERFLAGS+= -DUSE_LIBVPX
LIBS+= -lvpx
endif
ifneq (0,$(HAVE_VORBIS))
COMPILERFLAGS+= -DHAVE_VORBIS
endif
ifneq (0,$(HAVE_FLAC))
COMPILERFLAGS+= -DHAVE_FLAC
endif
ifneq (0,$(HAVE_XMP))
COMPILERFLAGS+= -DHAVE_XMP
endif
ifeq ($(RENDERTYPE),SDL)
ifeq ($(PLATFORM),WII)
SDLCONFIG=
else ifeq ($(PLATFORM),SKYOS)
COMPILERFLAGS+= -I/boot/programs/sdk/include/sdl
SDLCONFIG=
endif
ifeq ($(SDL_TARGET),2)
SDLCONFIG ?= sdl2-config
SDLNAME ?= SDL2
else ifeq ($(SDL_TARGET),1)
SDLCONFIG ?= sdl-config
SDLNAME ?= SDL
ifeq (0,$(RELEASE))
COMPILERFLAGS += -DNOSDLPARACHUTE
endif
endif
ifneq ($(strip $(SDLCONFIG)),)
ifeq ($(strip $(shell $(SDLCONFIG) --version $(DONT_PRINT_STDERR))),)
override SDLCONFIG =
endif
endif
COMPILERFLAGS += -DSDL_TARGET=$(SDL_TARGET)
SDL_FRAMEWORK ?= 0
ifneq ($(SDL_FRAMEWORK),0)
ifeq ($(PLATFORM),DARWIN)
APPLE_FRAMEWORKS ?=/Library/Frameworks
LIBDIRS += -F$(APPLE_FRAMEWORKS)
ifeq ($(MIXERTYPE),SDL)
COMPILERFLAGS += -I$(APPLE_FRAMEWORKS)/$(SDLNAME)_mixer.framework/Headers
LIBS += -Wl,-framework,$(SDLNAME)_mixer
endif
COMPILERFLAGS += -I$(APPLE_FRAMEWORKS)/$(SDLNAME).framework/Headers
LIBS += -Wl,-framework,$(SDLNAME) -Wl,-rpath -Wl,"@loader_path/../Frameworks"
endif
else
ifeq ($(MIXERTYPE),SDL)
LIBS += -l$(SDLNAME)_mixer
endif
ifneq ($(SDLCONFIG),)
SDLCONFIG_CFLAGS := $(strip $(subst -Dmain=SDL_main,,$(shell $(SDLCONFIG) --cflags)))
SDLCONFIG_LIBS := $(strip $(subst -mwindows,,$(shell $(SDLCONFIG) --libs)))
COMPILERFLAGS += $(SDLCONFIG_CFLAGS)
LIBS += $(SDLCONFIG_LIBS)
else
ifeq ($(SDL_TARGET),1)
COMPILERFLAGS += -D_GNU_SOURCE=1
endif
COMPILERFLAGS += -D_REENTRANT -DSDL_USEFOLDER
LIBS+= -l$(SDLNAME)
endif
endif
endif
ifneq (0,$(HAVE_GTK2))
ifneq (No,$(shell $(PKG_CONFIG) --exists gtk+-2.0 || echo No))
COMPILERFLAGS += -DHAVE_GTK2 $(shell $(PKG_CONFIG) --cflags gtk+-2.0)
else
override HAVE_GTK2=0
endif
endif
##### System libraries
ifeq ($(PLATFORM),WINDOWS)
ifneq (0,$(GCC_PREREQ_4))
L_SSP := -lssp
endif
LIBS+= -lmingwex -lgdi32 -lpthread
ifeq ($(RENDERTYPE),WIN)
LIBS += -ldxguid
else
LIBS += -ldxguid_sdl -lmingw32 -limm32 -lole32 -loleaut32 -lversion
endif
LIBS += -lcomctl32 -lwinmm $(L_SSP) -lwsock32 -lws2_32 -lshlwapi
# -lshfolder
else ifeq ($(PLATFORM),SKYOS)
LIBS+= -lnet
else ifeq ($(PLATFORM),QNX)
LIBS+= -lsocket
else ifeq ($(PLATFORM),SUNOS)
LIBS+= -lsocket -lnsl
else ifeq ($(PLATFORM),WII)
LIBS+= -laesnd_tueidj -lfat -lwiiuse -lbte -lwiikeyboard -logc
else ifeq ($(SUBPLATFORM),LINUX)
LIBS+= -lrt
endif
ifeq (,$(filter $(PLATFORM),WINDOWS WII))
ifneq ($(PLATFORM),BSD)
LIBS+= -ldl
endif
ifneq ($(PLATFORM),DARWIN)
LIBS+= -pthread
endif
endif
LIBS += -lm
##### Detect version control revision, if applicable
ifeq (,$(VC_REV))
ifneq (,$(wildcard EDUKE32_REVISION))
VC_REV := $(shell cat EDUKE32_REVISION)
endif
endif
ifeq (,$(VC_REV))
VC_REV := $(shell svn info 2>&1 | grep Revision | cut -d' ' -f2)
endif
ifeq (,$(VC_REV))
VC_REV := $(shell git svn info 2>&1 | grep Revision | cut -d' ' -f2)
endif
ifneq (,$(VC_REV)$(VC_REV_CUSTOM))
REVFLAG := -DREV="\"r$(VC_REV)$(VC_REV_CUSTOM)\""
endif
##### Final assembly of commands
COMPILER_C=$(CC) $(CONLYFLAGS) $(COMMONFLAGS) $(CWARNS) $(CONLYWARNS) $(COMPILERFLAGS) $(CUSTOMOPT)
COMPILER_CXX=$(CXX) $(CXXONLYFLAGS) $(COMMONFLAGS) $(CWARNS) $(COMPILERFLAGS) $(CUSTOMOPT)
COMPILER_OBJC=$(COBJC) $(CONLYFLAGS) $(COMMONFLAGS) $(CWARNS) $(CONLYWARNS) $(COMPILERFLAGS) $(CUSTOMOPT)
COMPILER_OBJCXX=$(COBJCXX) $(CXXONLYFLAGS) $(COMMONFLAGS) $(CWARNS) $(COMPILERFLAGS) $(CUSTOMOPT)
LINKER=$(L_CXX) $(CXXONLYFLAGS) $(L_CXXONLYFLAGS) $(COMMONFLAGS) $(LINKERFLAGS) $(CUSTOMOPT)
ifneq ($(CPLUSPLUS),0)
COMPILER_C=$(COMPILER_CXX)
COMPILER_OBJC=$(COMPILER_OBJCXX)
endif
##### Allow standard environment variables to take precedence, to help package maintainers.
ifneq (,$(CFLAGS))
COMMONFLAGS+= $(CFLAGS)
endif
ifneq (,$(CXXFLAGS))
CXXONLYFLAGS+= $(CXXFLAGS)
endif
ifneq (,$(LDFLAGS))
LINKERFLAGS+= $(LDFLAGS)
endif
##### Pretty-printing
ifeq ($(PRETTY_OUTPUT),1)
RECIPE_IF = if
BUILD_STARTED = printf "\033[K\033[1;36mBuilding: \033[0;36m$(MAKE) $(MAKECMDGOALS) -$(MAKEFLAGS)\033[0m\n"
COMPILE_STATUS = printf "\033[K\033[0mBuilding object \033[1m$@\033[0m...\033[0m\r"
COMPILE_OK = printf "\033[K\033[0;32mBuilt object \033[1;32m$@\033[0;32m \033[0m\n"
COMPILE_FAILED = printf "\033[K\033[0;31mFailed building \033[1;31m$@\033[0;31m from\033[0m \033[1;31m$<\033[0;31m!\033[0m\n"; exit 1
RECIPE_RESULT_COMPILE = ; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
ONESTEP_STATUS = printf "\033[K\033[0mBuilding \033[1m$@\033[0m...\033[0m\r"
ONESTEP_OK = printf "\033[K\033[0;32mBuilt \033[1;32m$@\033[0;32m \033[0m\n"
ONESTEP_FAILED = printf "\033[K\033[0;31mFailed building \033[1;31m$@\033[0;31m!\033[0m\n"; exit 1
RECIPE_RESULT_ONESTEP = ; then $(ONESTEP_OK); else $(ONESTEP_FAILED); fi
ARCHIVE_STATUS = printf "\033[K\033[0mCreating library archive \033[1m$@\033[0m...\033[0m\r"
ARCHIVE_OK = printf "\033[K\033[0;32mCreated library archive \033[1;32m$@\033[0;32m \033[0m\n"
ARCHIVE_FAILED = printf "\033[K\033[0;31mFailed creating library archive \033[1;31m$@\033[0;31m from\033[0m \033[1;31m$<\033[0;31m!\033[0m\n"; exit 1
RECIPE_RESULT_ARCHIVE = ; then $(ARCHIVE_OK); else $(ARCHIVE_FAILED); fi
LINK_STATUS = printf "\033[K\033[0;0mLinking \033[1m$@\033[0;0m...\033[0m\r"
LINK_OK = printf "\033[K\033[0;32mLinked \033[1;32m$@\033[0;32m \033[0m\n"
LINK_FAILED = printf "\033[K\033[0;31mFailed linking \033[1;31m$@\033[0;31m!\nIf the build options, environment, or system packages have changed, run \'\033[1;31mmake clean\033[0;31m\' and try again.\033[0m\n"; exit 1
RECIPE_RESULT_LINK = ; then $(LINK_OK); else $(LINK_FAILED); fi
else
RECIPE_IF =
BUILD_STARTED =
COMPILE_STATUS =
COMPILE_OK = true
COMPILE_FAILED = false; exit 1
RECIPE_RESULT_COMPILE =
ONESTEP_STATUS =
ONESTEP_OK = true
ONESTEP_FAILED = false; exit 1
RECIPE_RESULT_ONESTEP =
ARCHIVE_STATUS =
ARCHIVE_OK = true
ARCHIVE_FAILED = false; exit 1
RECIPE_RESULT_ARCHIVE =
LINK_STATUS =
LINK_OK = true
LINK_FAILED = false; exit 1
RECIPE_RESULT_LINK =
endif