raze/Common.mak
hendricks266 f4fa0ceafd Makefile: Replace "gnu" with "c" in language standard declarations if we are using clang.
This should give us compatibility without compromising platforms that either don't recognize the "gnu" variants but include strdup, snprintf, etc anyway (clang on desktop), or that support "gnu" and don't include these functions in the "c" variants (gcc in devkitPPC).

DONT_BUILD.

git-svn-id: https://svn.eduke32.com/eduke32@6110 1a8010ca-5511-0410-912e-c29ae57300e0
2017-03-27 17:13:13 +00:00

1085 lines
28 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
# Use colored output. Disable for build system debugging.
PRETTY_OUTPUT ?= 1
# Tools
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)
AR=$(CROSS)ar$(CROSS_SUFFIX)
RC=$(CROSS)windres$(CROSS_SUFFIX)
RANLIB=$(CROSS)ranlib$(CROSS_SUFFIX)
STRIP=$(CROSS)strip$(CROSS_SUFFIX)
AS=nasm
PKG_CONFIG=pkg-config
NULLSTREAM = /dev/null
DONT_PRINT = > $(NULLSTREAM) 2>&1
DONT_PRINT_STDERR = 2> $(NULLSTREAM)
DONT_FAIL = ; exit 0
# Override defaults that absolutely will not work.
ifeq ($(CC),cc)
override CC=gcc
endif
ifeq ($(AS),as)
override AS=nasm
endif
COBJC=$(CC) -x objective-c
COBJCXX=$(CXX) -x objective-c++
L_CC=$(CC)
L_CXX=$(CXX)
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
ELF2DOL=elf2dol
DOLSUFFIX=.dol
endif
CLANG?=0
CLANG_POTENTIAL_VERSION := $(shell $(CCFULLPATH) --version)
ifeq ($(findstring clang,$(CC) $(MAKECMDGOALS)),clang)
override CLANG=1
CLANGNAME:=$(CC)
else
CLANGNAME:=clang
endif
# detect clang symlinked as gcc, as in OS X
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
# GCC version, for conditional selection of flags.
ifndef GCC_MAJOR
GCC_MAJOR := $(shell $(CCFULLPATH) -dumpversion 2>&1 | cut -d'.' -f1)
endif
ifeq ($(GCC_MAJOR),)
GCC_MAJOR := 4
endif
ifndef GCC_MINOR
GCC_MINOR := $(shell $(CCFULLPATH) -dumpversion 2>&1 | cut -d'.' -f2)
endif
ifeq ($(GCC_MINOR),)
GCC_MINOR := 8
endif
# Detect the platform if it wasn't explicitly given to us from
# the outside world. This allows cross-compilation by overriding
# CC and giving us PLATFORM specifically.
#
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),LINUX)
SUBPLATFORM=LINUX
endif
ifeq ($(PLATFORM),DINGOO)
SUBPLATFORM=LINUX
CROSS=mipsel-linux-
endif
ifeq ($(PLATFORM),GCW)
SUBPLATFORM=LINUX
CROSS=mipsel-linux-
endif
ifeq ($(PLATFORM),CAANOO)
SUBPLATFORM=LINUX
endif
endif
# Binary suffix override:
EXESUFFIX_OVERRIDE ?=
# Are we running from synthesis?
SYNTHESIS ?= 0
# Mac OS X Frameworks location
# Like above, use absolute paths.
APPLE_FRAMEWORKS ?=/Library/Frameworks
# Engine options
# USE_OPENGL - enables basic OpenGL Polymost renderer
# POLYMER - enables fancy Polymer renderer
# NOASM - disables the use of inline assembly pragmas
# LINKED_GTK - enables compile-time linkage to GTK
#
APPNAME=
APPBASENAME=
STANDALONE ?= 0
POLYMER = 1
USE_OPENGL = 1
NOASM = 0
LINKED_GTK = 0
BUILD32_ON_64 ?= 0
USE_LIBPNG ?= 1
USE_LIBVPX ?= 1
HAVE_VORBIS ?= 1
HAVE_FLAC ?= 1
ifeq ($(PLATFORM),WINDOWS)
HAVE_XMP ?= 1
else
HAVE_XMP ?= 0
endif
NETCODE ?= 1
STARTUP_WINDOW ?= 1
SIMPLE_MENU ?= 0
LUNATIC ?= 0
USE_LUAJIT_2_1 ?= 0
# EXPERIMENTAL, unfinished x86_64 assembly routines. DO NOT ENABLE.
USE_ASM64 ?= 0
ifeq (0,$(USE_OPENGL))
override POLYMER = 0
override USE_LIBVPX = 0
endif
# Debugging/Build options
# 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.
# DISABLEINLINING - 1 = compile inline functions as extern __fastcall instead of static inline
# KRANDDEBUG - 1 = include logging of krand() calls for debugging the demo system
# MEMMAP - 1 = produce .memmap file when linking
# EFENCE - 1 = compile with Electric Fence for malloc() debugging
# OPTLEVEL - 0..3 = GCC optimization strategy
# LTO - 1 = enable link-time optimization, for GCC 4.5 and up
#
CPLUSPLUS?=1
RELEASE?=1
DEBUGANYWAY?=0
KRANDDEBUG?=0
MEMMAP?=0
DISABLEINLINING?=0
EFENCE?=0
DMALLOC?=0
PROFILER?=0
MUDFLAP?=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
# Select the default optimization level for release and debug builds.
ifeq ($(RELEASE),0)
OPTLEVEL?=0
else
OPTLEVEL?=2
endif
ifeq ($(RELEASE),0)
override STRIP=
endif
ifneq ($(DEBUGANYWAY),0)
override STRIP=
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
ifndef LTO
LTO=1
ifneq (0,$(CLANG))
ifeq ($(PLATFORM), WINDOWS)
LTO=0
endif
endif
endif
COMMONFLAGS =
COMPILERFLAGS = -funsigned-char
ifeq ($(PACKAGE_REPOSITORY),0)
COMMONFLAGS += $(OPTIMIZATIONS)
endif
OPTIMIZATIONS=-O$(OPTLEVEL) $(OPTOPT)
DEBUGFLAG=-g
ifeq (0,$(CLANG))
ifneq ($(PLATFORM),WII)
DEBUGFLAG=-ggdb -fno-omit-frame-pointer
endif
endif
ifneq ($(RELEASE)$(DEBUGANYWAY),10)
# debug build or DEBUGANYWAY=1 --> -g flag
OPTIMIZATIONS += $(DEBUGFLAG)
endif
CSTD:=-std=gnu99
CONLYFLAGS=$(CSTD)
CXXSTD:=-std=gnu++03
CXXONLYFLAGS=$(CXXSTD) -fno-exceptions -fno-rtti
ifneq (0,$(CLANG))
CSTD:=$(subst gnu,c,$(CSTD))
CXXSTD:=$(subst gnu,c,$(CXXSTD))
endif
ASFORMAT=elf$(BITS)
ASFLAGS=-s -f $(ASFORMAT) #-g
LINKERFLAGS=
L_CXXONLYFLAGS=
LIBS=-lm
GUI_LIBS=
LIBDIRS=
ifeq (1,$(strip $(shell expr $(GCC_MAJOR) \>= 4)))
F_NO_STACK_PROTECTOR := -fno-stack-protector
# there are some link-time issues with stack protectors, so make it possible to override
F_STACK_PROTECTOR_ALL ?= -fstack-protector-all
ifeq (0,$(CLANG))
F_JUMP_TABLES := -fjump-tables
endif
M_TUNE_GENERIC := -mtune=generic
M_STACKREALIGN := -mstackrealign
endif
W_STRICT_OVERFLOW := -Wno-strict-overflow
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
# 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
WINLIB?=/$(BITS)
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
ifeq ($(PLATFORM),DARWIN)
ifndef DARWINVERSION
DARWINVERSION:=$(strip $(shell uname -r | cut -d . -f 1))
endif
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
# COMMONFLAGS += -fno-leading-underscore
ifeq (1,$(DARWIN9))
F_JUMP_TABLES :=
W_STRICT_OVERFLOW :=
endif
ifneq ($(ARCH),)
ifneq ($(findstring -arch,$(ARCH)),-arch)
override ARCH := -arch $(ARCH)
endif
endif
ifeq (1,$(BUILD32_ON_64))
COMMONFLAGS += $(F_NO_STACK_PROTECTOR)
ifeq ($(ARCH),)
override ARCH:=-arch i386
endif
else
ifeq ($(findstring ppc,$(IMPLICIT_ARCH)),ppc)
COMMONFLAGS += $(F_NO_STACK_PROTECTOR)
endif
endif
COMMONFLAGS += $(ARCH)
endif
ifneq (0,$(RELEASE))
# Debugging disabled
COMMONFLAGS += $(F_NO_STACK_PROTECTOR)
else
# Debugging enabled
ifneq (0,$(KRANDDEBUG))
COMMONFLAGS += -fno-inline -fno-inline-functions -fno-inline-functions-called-once
endif
endif
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 $(M_TUNE_GENERIC) -mmmx
# -msse2 -mfpmath=sse,387 -malign-double $(M_STACKREALIGN)
endif
endif
endif
ifneq (0,$(KRANDDEBUG))
RELEASE=0
endif
ifneq (0,$(PROFILER))
# XXX: Why?
DEBUGANYWAY=1
endif
ifeq ($(PLATFORM),WII)
override USE_LIBVPX = 0
override NETCODE = 0
override HAVE_FLAC = 0
override HAVE_XMP = 0
endif
ifeq ($(PLATFORM),GCW)
override USE_LIBVPX = 0
endif
ifeq ($(PLATFORM),DINGOO)
override USE_LIBVPX = 0
endif
ifneq (0,$(USE_LIBVPX))
# On Windows, we link statically to libvpx
LIBS+= -lvpx
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
ifneq (0,$(RELEASE))
## Debugging disabled
ifeq (0,$(CLANG))
COMMONFLAGS += -funswitch-loops
ifeq (1,$(strip $(shell expr $(GCC_MAJOR) \< 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
ifeq (0,$(DEBUGANYWAY))
COMMONFLAGS += -fomit-frame-pointer
COMPILERFLAGS += -DNDEBUG
else
# Our $(DEBUGANYWAY) -> DEBUGGINGAIDS #define
COMPILERFLAGS += -DDEBUGGINGAIDS=$(DEBUGANYWAY)
ifneq (0,$(CLANG))
ifeq (2,$(DEBUGANYWAY))
COMMONFLAGS += $(CLANG_DEBUG_FLAGS)
endif
endif
endif
ifneq (0,$(LTO))
COMPILERFLAGS += -DUSING_LTO
COMMONFLAGS += -flto
endif
else
## Debugging enabled
# Our $(DEBUGANYWAY) -> DEBUGGINGAIDS #define
COMPILERFLAGS += -DDEBUGGINGAIDS=$(DEBUGANYWAY)
ifneq (0,$(CLANG))
ifeq (2,$(DEBUGANYWAY))
COMMONFLAGS += $(CLANG_DEBUG_FLAGS)
endif
endif
ifeq ($(SUBPLATFORM),LINUX)
LIBS+=-rdynamic
endif
ifneq (0,$(MUDFLAP))
LIBS+= -lmudflapth
COMMONFLAGS += -fmudflapth
endif
ifneq (0,$(PROFILER))
ifneq ($(PLATFORM),DARWIN)
LIBS+= -lprofiler
endif
COMMONFLAGS += -pg
endif
ifneq (0,$(KRANDDEBUG))
COMPILERFLAGS += -DKRANDDEBUG=1
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 (1,$(strip $(shell expr $(GCC_MAJOR) \< 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
COMMONFLAGS+= -fno-strict-aliasing $(F_JUMP_TABLES)
COMPILERFLAGS+= -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
ifeq (0,$(NETCODE))
COMPILERFLAGS+= -DNETCODE_DISABLE
endif
#### Lunatic development
# LuaJIT standalone interpreter executable:
LUAJIT=luajit$(EXESUFFIX)
# 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)
LUAJIT_BCOPTS := -o windows
ifeq (32,$(BITS))
LUAJIT_BCOPTS += -a x86
endif
ifeq (64,$(BITS))
LUAJIT_BCOPTS += -a x64
endif
endif
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,$(DISABLEINLINING))
COMPILERFLAGS+= -DDISABLE_INLINING
endif
# This should come from the environment:
ifdef EDUKE32_MY_DEVELOPER_ID
COMPILERFLAGS+= -DMY_DEVELOPER_ID=$(EDUKE32_MY_DEVELOPER_ID)
endif
ifneq (0,$(USE_LIBPNG))
COMPILERFLAGS+= -DUSE_LIBPNG
endif
ifneq (0,$(USE_LIBVPX))
COMPILERFLAGS+= -DUSE_LIBVPX
endif
ifneq (0,$(STARTUP_WINDOW))
COMPILERFLAGS+= -DSTARTUP_WINDOW
endif
ifneq (0,$(SIMPLE_MENU))
COMPILERFLAGS+= -DEDUKE32_SIMPLE_MENU
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
ifneq (0,$(EFENCE))
LIBS+= -lefence
COMPILERFLAGS+= -DEFENCE
endif
ifneq (0,$(DMALLOC))
LIBS+= -ldmalloc
COMPILERFLAGS+= -DDMALLOC
endif
ifneq (0,$(STANDALONE))
COMPILERFLAGS+= -DEDUKE32_STANDALONE
endif
ifneq (,$(APPNAME))
COMPILERFLAGS+= -DAPPNAME=\"$(APPNAME)\"
endif
ifneq (,$(APPBASENAME))
COMPILERFLAGS+= -DAPPBASENAME=\"$(APPBASENAME)\"
endif
# may be overridden
EXESUFFIX=
DLLSUFFIX=.so
SDL_TARGET ?= 2
SDL_FRAMEWORK ?= 0
ifeq (1,$(strip $(shell expr $(GCC_MAJOR) \>= 4)))
L_SSP := -lssp
endif
# ifeq (1,$(strip $(shell expr $(GCC_MAJOR) \>= 5)))
# ifneq (0,$(LTO))
# COMMONFLAGS += -fno-lto-odr-type-merging
# endif
# endif
ifeq ($(SUBPLATFORM),LINUX)
GTKCOMPAT32=0
ifeq ($(PLATFORM),GCW)
override USE_OPENGL=0
override NOASM=1
endif
ifeq ($(PLATFORM),DINGOO)
override USE_OPENGL=0
override NOASM=1
endif
ifneq ($(findstring i386,$(IMPLICIT_ARCH)),i386)
ifeq (1,$(BUILD32_ON_64))
# On my 64bit Gentoo these are the 32bit emulation libs
LIBDIRS+= -L/emul/linux/x86/usr/lib
COMMONFLAGS+= -m32
# Override WITHOUT_GTK=0
GTKCOMPAT32=1
endif
endif
LIBS+= -lrt
endif
ifeq ($(PLATFORM),DARWIN)
COMPILERFLAGS+= -DUNDERSCORES
ASFORMAT=macho
ASFLAGS+= -DUNDERSCORES
ifeq ($(findstring x86_64,$(IMPLICIT_ARCH)),x86_64)
ASFORMAT+=64
override NOASM=1
endif
# LIBDIRS+= -Lplatform/Apple/lib
# COMPILERFLAGS+= -Iplatform/Apple/include
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
DLLSUFFIX=.dylib
GTKCOMPAT32 = 0
WITHOUT_GTK ?= 1
ifeq (1,$(DARWIN9))
COMPILERFLAGS += -DDARWIN9
endif
ifneq ($(findstring x86_64,$(IMPLICIT_ARCH)),x86_64)
LINKERFLAGS += -read_only_relocs suppress
endif
endif
ifeq ($(PLATFORM),WINDOWS)
COMPILERFLAGS+= -DUNDERSCORES -Iplatform/Windows/include
LINKERFLAGS+= -static-libgcc
ifeq (0,$(CLANG))
L_CXXONLYFLAGS += -static-libstdc++
endif
ASFORMAT=win$(BITS)
ASFLAGS+= -DUNDERSCORES
# Windows types can be SDL or WIN
RENDERTYPE?=SDL
MIXERTYPE?=WIN
ifneq ($(RENDERTYPE),SDL)
ifeq ($(MIXERTYPE),SDL)
override MIXERTYPE:=WIN
endif
endif
WITHOUT_GTK?=1
EXESUFFIX=.exe
DLLSUFFIX=.dll
LIBDIRS+= -Lplatform/Windows/lib$(WINLIB)
LIBS+= -Wl,--enable-auto-import -lmingwex -lgdi32 -lcomctl32 -lwinmm $(L_SSP) -lwsock32 -lws2_32 -lshlwapi
ifeq (0,$(CLANG))
GUI_LIBS += -mwindows
endif
#-lshfolder
else
RENDERTYPE?=SDL
MIXERTYPE?=SDL
endif
ifeq ($(PLATFORM),BSD)
COMPILERFLAGS+= -I/usr/local/include
endif
ifeq ($(PLATFORM),BEOS)
override NOASM=1
endif
ifeq ($(PLATFORM),SKYOS)
EXESUFFIX=.app
override NOASM=1
COMPILERFLAGS+= -DUNDERSCORES -I/boot/programs/sdk/include/sdl
SDLCONFIG=
LIBS+= -lSDL -lnet
endif
ifeq ($(PLATFORM),WII)
EXESUFFIX=.elf
override USE_OPENGL=0
override POLYMER=0
override NOASM=1
override WITHOUT_GTK=1
# -msdata=eabi
COMMONFLAGS+= -g -mtune=750 -meabi -mhard-float
COMPILERFLAGS+= -DGEKKO -D__POWERPC__ -I$(LIBOGC_INC) -I$(PORTLIBS)/include -Iplatform/Wii/include
SDLCONFIG=
SDL_TARGET=1
LIBDIRS += -L$(LIBOGC_LIB) -L$(PORTLIBS)/lib -Lplatform/Wii/lib
endif
ifeq ($(PLATFORM),QNX)
override USE_OPENGL=0
override NOASM=1
LIBS+= -lsocket
endif
ifeq ($(PLATFORM),SUNOS)
override USE_OPENGL=0
override NOASM=1
LIBS+= -lsocket -lnsl
endif
ifeq ($(PLATFORM),SYLLABLE)
override USE_OPENGL=0
override NOASM=1
endif
ifeq ($(PLATFORM),GCW)
COMPILERFLAGS += -D__OPENDINGUX__
endif
ifeq ($(PLATFORM),DINGOO)
COMPILERFLAGS += -D__OPENDINGUX__
endif
ifneq ($(findstring i386,$(IMPLICIT_ARCH)),i386)
override NOASM=1
endif
ifneq ($(EXESUFFIX_OVERRIDE),)
EXESUFFIX=$(EXESUFFIX_OVERRIDE)
endif
ifeq ($(RENDERTYPE),SDL)
ifeq ($(SDL_TARGET),2)
SDLCONFIG ?= sdl2-config
SDLNAME ?= SDL2
endif
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)
ifneq ($(SDL_FRAMEWORK),0)
ifeq ($(PLATFORM),DARWIN)
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
ifeq (1,$(WITHOUT_GTK))
HAVE_GTK2=0
else
ifneq (No,$(shell $(PKG_CONFIG) --exists gtk+-2.0 || echo No))
HAVE_GTK2=1
# On my 64bit Gentoo box I have Cairo enabled which means the libs list includes
# -lpangocairo-1.0 and -lcairo, however the 32bit compatibility libraries don't
# include cairo, so we need to filter out those -l switches in order to link
ifneq ($(LINKED_GTK),0)
ifeq ($(GTKCOMPAT32),1)
LIBS+= $(shell $(PKG_CONFIG) --libs gtk+-2.0 | sed 's/\s-l\(pango\)\{0,1\}cairo\S*\s/ /g')
else
LIBS+= $(shell $(PKG_CONFIG) --libs gtk+-2.0)
endif
endif
COMPILERFLAGS += -DHAVE_GTK2 $(shell $(PKG_CONFIG) --cflags gtk+-2.0)
else
HAVE_GTK2=0
endif
endif
ifeq ($(PLATFORM),WINDOWS)
LIBS += -ldxguid_sdl -lmingw32 -lgdi32 -limm32 -lole32 -loleaut32 -lwinmm -lversion
endif
endif
ifeq ($(RENDERTYPE),WIN)
LIBS+= -ldxguid
endif
ifeq ($(PLATFORM),WII)
LIBS+= -laesnd_tueidj -lpng -lfat -lwiiuse -lbte -logc -lm -lwiikeyboard
endif
COMPILERFLAGS+= -DRENDERTYPE$(RENDERTYPE)=1 -DMIXERTYPE$(MIXERTYPE)=1
ifneq (0,$(USE_OPENGL))
COMPILERFLAGS+= -DUSE_OPENGL
endif
ifneq (0,$(NOASM))
COMPILERFLAGS+= -DNOASM
endif
ifneq (0,$(USE_ASM64))
COMPILERFLAGS+= -DUSE_ASM64
endif
ifneq (0,$(LINKED_GTK))
COMPILERFLAGS+= -DLINKED_GTK
endif
ifneq (0,$(POLYMER))
ifneq (0,$(USE_OPENGL))
COMPILERFLAGS+= -DPOLYMER
endif
endif
ifneq ($(PLATFORM),WINDOWS)
ifneq ($(PLATFORM),WII)
ifneq ($(PLATFORM),BSD)
LIBS+= -ldl
endif
ifneq ($(PLATFORM),DARWIN)
LIBS+= -pthread
endif
endif
endif
ifeq ($(PLATFORM),WINDOWS)
ifneq ($(USE_LIBPNG),0)
LIBS+= -lpng_mini -lz_mini
endif
else
ifeq ($(PLATFORM),DARWIN)
ifneq ($(USE_LIBPNG),0)
LIBS+= -lpng # -lz
endif
else
ifneq ($(USE_LIBPNG),0)
LIBS+= -lpng -lz
endif
endif
endif
ifeq ($(PLATFORM),WINDOWS)
ifneq ($(findstring x86_64,$(COMPILERTARGET)),x86_64)
LINKERFLAGS+= -Wl,--large-address-aware
endif
endif
ifneq (0,$(MEMMAP))
ifeq ($(PLATFORM),DARWIN)
LINKERFLAGS+=-Wl,-map -Wl,$@.memmap
else
LINKERFLAGS+=-Wl,-Map=$@.memmap
endif
endif
ifneq (0,$(PROFILER))
LINKERFLAGS+=-pg
endif
ifeq ($(PLATFORM),WII)
LINKERFLAGS+= -mrvl -meabi -mhard-float -Wl,--gc-sections
# -msdata=eabi
endif
# 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
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
ifneq (,$(CFLAGS))
COMMONFLAGS+= $(CFLAGS)
endif
ifneq (,$(CXXFLAGS))
CXXONLYFLAGS+= $(CXXFLAGS)
endif
ifneq (,$(LDFLAGS))
LINKERFLAGS+= $(LDFLAGS)
endif
ifeq ($(PRETTY_OUTPUT),1)
RECIPE_IF = if
BUILD_SETTINGS_COMPILER = \033[1;36mcompiler: \033[0;36m\"$(COMPILER_C)\"
BUILD_SETTINGS_ASSEMBLER = \033[1;36massembler: \033[0;36m\"$(AS) $(ASFLAGS)\"
BUILD_SETTINGS_LINKER = \033[1;36mlinker: \033[0;36m\"$(LINKER) $(GUI_LIBS) $(LIBDIRS) $(LIBS)\"
ifeq (0,$(NOASM))
BUILD_SETTINGS = printf "$(BUILD_SETTINGS_COMPILER)\n$(BUILD_SETTINGS_ASSEMBLER)\n$(BUILD_SETTINGS_LINKER)\033[0m\n"
else
BUILD_SETTINGS = printf "$(BUILD_SETTINGS_COMPILER)\n$(BUILD_SETTINGS_LINKER)\033[0m\n"
endif
BUILD_STARTED = printf "\033[K\033[1;36mBuild started using:\033[0m\n"; $(BUILD_SETTINGS)
BUILD_ECHOFLAGS = printf "\033[K\033[1;36mEnded compilation in this directory using:\n$(BUILD_SETTINGS_COMPILER)\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 =
BUILD_ECHOFLAGS =
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