# Shared make information between Build engine and games MAKEFILE_SHARED:=$(lastword $(MAKEFILE_LIST)) ENGINELIB=libengine.a EDITORLIB=libbuild.a # SDK locations - adjust to match your setup # Overrides must use absolute paths since this Makefile is included at different directory levels # SDLCONFIG = /usr/local/bin/sdl-config SDLNAME = SDL DXROOT=$(abspath $(dir $(MAKEFILE_COMMON))../sdk/dx) #DXROOT=/c/sdks/directx/dx8 SDLROOT=$(abspath $(dir $(MAKEFILE_COMMON))../sdk/SDL) ifeq ($(wildcard $(SDLCONFIG)),$(SDLCONFIG)) # $(info Detected locally installed SDL 1.X) SDLROOT = /usr/local else # Swap the commenting in the following two lines to # enable SDL 2.X detection SDLCONFIG = /usr/local/file_that_does_not_exist # SDLCONFIG = /usr/local/bin/sdl2-config ifeq ($(wildcard $(SDLCONFIG)),$(SDLCONFIG)) # $(info Detected locally installed SDL 2.X) SDLROOT = /usr/local SDLNAME = SDL2 else # $(info Detected system-wide installed SDL 1.X) SDLCONFIG = /usr/bin/sdl-config endif endif SDL_FRAMEWORK = 0 DXROOT_OVERRIDE ?= SDLROOT_OVERRIDE ?= ifneq ($(DXROOT_OVERRIDE),) DXROOT=$(DXROOT_OVERRIDE) endif ifneq ($(SDLROOT_OVERRIDE),) SDLROOT=$(SDLROOT_OVERRIDE) endif ifeq (4,$(GCC_MAJOR)) L_SSP := -lssp endif BUILDCOMMONFLAGS=$(ARCH) BUILDLIBS= ifeq ($(SUBPLATFORM),LINUX) STDCPPLIB:= else # Overridden for OSes that don't have the cutdown stdc++ that is supc++ STDCPPLIB:=-lsupc++ endif ifeq ($(SUBPLATFORM),LINUX) RENDERTYPE=SDL BUILDCOMMONFLAGS+= -DHAVE_INTTYPES GTKCOMPAT32=0 ifeq ($(findstring x86_64,$(shell uname -m)),x86_64) ifeq (1,$(BUILD32_ON_64)) # On my 64bit Gentoo these are the 32bit emulation libs BUILDLIBS+= -m32 -L/emul/linux/x86/usr/lib BUILDCOMMONFLAGS+= -m32 # Override WITHOUT_GTK=0 GTKCOMPAT32=1 else override NOASM=1 endif endif endif ifeq ($(PLATFORM),DARWIN) RENDERTYPE = SDL STDCPPLIB:=-lstdc++ BUILDCOMMONFLAGS += -DHAVE_INTTYPES GTKCOMPAT32 = 0 SDL_FRAMEWORK = 1 ifeq (1,$(DARWIN9)) BUILDCOMMONFLAGS += -DDARWIN9 endif ifeq (1,$(BUILD32_ON_64)) ARCH=-arch i386 else # ASM won't work on PowerPC or x86_64 override NOASM = 1 endif endif ifeq ($(PLATFORM),WINDOWS) RENDERTYPE?=WIN WITHOUT_GTK?=1 SDL_FRAMEWORK=1 BUILDCOMMONFLAGS+= -DHAVE_INTTYPES EXESUFFIX=.exe BUILDLIBS+= -lmingwex -lwsock32 -lcomctl32 -lwinmm #-lshfolder #STDCPPLIB:=-lstdc++ endif ifeq ($(PLATFORM),BSD) RENDERTYPE=SDL BUILDCOMMONFLAGS+= -DHAVE_INTTYPES ifneq ($(findstring i386, $(SYSARCH)), i386) override NOASM=1 endif STDCPPLIB:=-lstdc++ endif ifeq ($(PLATFORM),BEOS) RENDERTYPE=SDL STDCPPLIB:=-lstdc++ endif ifeq ($(PLATFORM),SKYOS) RENDERTYPE=SDL EXESUFFIX=.app override NOASM=1 BUILDCOMMONFLAGS+= -DUNDERSCORES SDLCONFIG= SDLCONFIG_COMMONFLAGS=-I/boot/programs/sdk/include/sdl BUILDLIBS+= -lSDL -lnet endif ifeq ($(PLATFORM),WII) ifeq ($(strip $(DEVKITPPC)),) $(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") endif include $(DEVKITPPC)/wii_rules RANLIB=powerpc-eabi-ranlib STRIP=powerpc-eabi-strip RENDERTYPE=SDL EXESUFFIX=.elf override USE_OPENGL=0 override NOASM=1 override WITHOUT_GTK=1 # -msdata=eabi BUILDCOMMONFLAGS+= -g -mtune=750 -meabi -mhard-float \ -DGEKKO -DHAVE_INTTYPES -D__POWERPC__ \ -I$(LIBOGC_INC) -I$(LIBOGC_INC)/SDL -I$(PORTLIBS)/include SDLCONFIG= BUILDLIBS+= -lSDL_mixer -lsmpeg -lSDL -laesnd endif ifeq ($(PLATFORM),QNX) RENDERTYPE=SDL override USE_OPENGL=0 override NOASM=1 STDCPPLIB:=-lstdc++ BUILDLIBS+= -lsocket endif ifeq ($(PLATFORM),SUNOS) RENDERTYPE=SDL override USE_OPENGL=0 override NOASM=1 STDCPPLIB:=-lstdc++ BUILDLIBS+= -lsocket -lnsl endif ifeq ($(PLATFORM),SYLLABLE) RENDERTYPE=SDL override USE_OPENGL=0 override NOASM=1 endif ifneq (0,$(CLANG)) ifneq (,$(STDCPPLIB)) STDCPPLIB:=-Xlinker $(STDCPPLIB) endif endif ifeq ($(RENDERTYPE),SDL) ifeq ($(SDL_FRAMEWORK),1) SDLCONFIG_COMMONFLAGS += -DSDL_FRAMEWORK endif ifneq ($(PLATFORM),WINDOWS) ifeq ($(SDL_FRAMEWORK),1) ifeq ($(PLATFORM),DARWIN) SDLCONFIG_LIBS += -Wl,-framework,SDL SDLCONFIG_COMMONFLAGS+= -I$(APPLE_FRAMEWORKS)/SDL.framework/Headers endif else ifneq ($(SDLCONFIG),) SDLCONFIG_COMMONFLAGS+=$(subst -Dmain=SDL_main,,$(shell $(SDLCONFIG) --cflags)) SDLCONFIG_LIBS+= $(shell $(SDLCONFIG) --libs) endif endif else SDLCONFIG_COMMONFLAGS += -D_GNU_SOURCE=1 SDLCONFIG_LIBS+= -lmingw32 -lSDLmain -lSDL endif BUILDLIBS+= $(SDLCONFIG_LIBS) BUILDCOMMONFLAGS+= $(SDLCONFIG_COMMONFLAGS) 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) BUILDLIBS+= $(shell pkg-config --libs gtk+-2.0 | sed 's/\s-l\(pango\)\{0,1\}cairo\S*\s/ /g') else BUILDLIBS+= $(shell pkg-config --libs gtk+-2.0) endif endif else HAVE_GTK2=0 endif endif else ifeq ($(RENDERTYPE),WIN) BUILDLIBS+= -ldxguid endif endif BUILDCOMMONFLAGS+= -DRENDERTYPE$(RENDERTYPE)=1 $(W_STRICT_OVERFLOW) ifneq (0,$(USE_OPENGL)) BUILDCOMMONFLAGS+= -DUSE_OPENGL endif ifneq (0,$(NOASM)) BUILDCOMMONFLAGS+= -DNOASM endif ifneq (0,$(LINKED_GTK)) BUILDCOMMONFLAGS+= -DLINKED_GTK endif ifneq (0,$(POLYMER)) ifneq (0,$(USE_OPENGL)) BUILDCOMMONFLAGS+= -DPOLYMER endif endif ifneq ($(EXESUFFIX_OVERRIDE),) EXESUFFIX=$(EXESUFFIX_OVERRIDE) endif STATICSTDCPP?= ifeq (1,$(STATICSTDCPP)) STATICSTDCPP= -static endif ifeq (0,$(STATICSTDCPP)) STATICSTDCPP= -shared endif ifneq ($(PLATFORM),WINDOWS) ifneq ($(PLATFORM),WII) BUILDLIBS+= -ldl endif BUILDLIBS+= -pthread endif ifeq ($(PLATFORM),WINDOWS) ifneq ($(USE_LIBPNG),0) BUILDLIBS+= -lpng_mini -lz_mini endif else ifeq ($(PLATFORM),DARWIN) ifneq ($(USE_LIBPNG),0) BUILDCOMMONFLAGS+= -I/opt/local/include -I/sw/include -I/usr/local/include BUILDLIBS+= -L/opt/local/lib -L/usr/local/lib -lpng # -lz endif else ifneq ($(USE_LIBPNG),0) BUILDLIBS+= -lpng -lz endif endif endif ifeq ($(PLATFORM),WINDOWS) BUILDLIBS+= $(L_SSP) -Wl,--enable-auto-import BUILDLIBS+= -mwindows -lwsock32 -lws2_32 #-L$(ENETROOT) endif ifeq ($(PRETTY_OUTPUT),1) BUILD_SETTINGS_COMPILER = \033[1;36mcompiler: \033[0;36m\"$(COMPILER) $(OURCFLAGS)\" BUILD_SETTINGS_ASSEMBLER = \033[1;36massembler: \033[0;36m\"$(AS) $(OURASFLAGS)\" BUILD_SETTINGS_LINKER = \033[1;36mlinker: \033[0;36m\"$(PRINTLDFLAGS) $(OURLIBS) $(STATICSTDCPP) $(STDCPPLIB)\" 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" BUILD_FINISHED = printf "\033[K\033[1;36mBuild successful:\033[0m\n" COMPILE_STATUS = printf "\033[K\033[0mBuilding object \033[1m$@\033[0m...\033[0m\r" ONESTEP_STATUS = printf "\033[K\033[0mBuilding executable \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" ONESTEP_OK = printf "\033[K\033[0;32mBuilt executable \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 ONESTEP_FAILED = printf "\033[K\033[0;31mFailed building executable \033[1;31m$@\033[0;31m!\033[0m\n"; exit 1 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 LINK_STATUS = printf "\033[K\033[0;0mLinking executable \033[1m$@\033[0;0m...\033[0m\r" LINK_OK = printf "\033[K\033[0;32mLinked executable \033[1;32m$@\033[0;32m \033[0m\n" LINK_FAILED = printf "\033[K\033[0;31mFailed linking executable \033[1;31m$@\033[0;31m!\033[0m\n"; exit 1 else BUILD_STARTED = BUILD_ECHOFLAGS = BUILD_FINISHED = COMPILE_STATUS = ONESTEP_STATUS = COMPILE_OK = true ONESTEP_OK = true COMPILE_FAILED = false; exit 1 ONESTEP_FAILED = false; exit 1 ARCHIVE_STATUS = ARCHIVE_OK = true ARCHIVE_FAILED = false; exit 1 LINK_STATUS = LINK_OK = true LINK_FAILED = false; exit 1 endif