# 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=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_LIBPNG ?= 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 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 $(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_LIBPNG)) COMPILERFLAGS+= -DUSE_LIBPNG ifeq ($(PLATFORM),WINDOWS) LIBS+= -lpng_mini -lz_mini else ifeq ($(PLATFORM),DARWIN) LIBS+= -lpng # -lz else LIBS+= -lpng -lz 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 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