STRLOWERCASE = $(subst A,a,$(subst B,b,$(subst C,c,$(subst D,d,$(subst E,e,$(subst F,f,$(subst G,g,$(subst H,h,$(subst I,i,$(subst J,j,$(subst K,k,$(subst L,l,$(subst M,m,$(subst N,n,$(subst O,o,$(subst P,p,$(subst Q,q,$(subst R,r,$(subst S,s,$(subst T,t,$(subst U,u,$(subst V,v,$(subst W,w,$(subst X,x,$(subst Y,y,$(subst Z,z,$1)))))))))))))))))))))))))) #cross-compiling support ifeq ($(MINGW32),yes) BUILD_OS = mingw32 else ifeq ($(IOS),yes) BUILD_OS = ios else BUILD_OS = $(strip $(call STRLOWERCASE, $(shell uname) ) ) endif endif export VERSION = 0.9 export CP = cp export LN = ln export LNFLAGS = -s -f export ARFLAGS = rcs export DESTDIR = /usr export DESTLIBDIR = $(DESTDIR)/lib export DESTINCDIR = $(DESTDIR)/include export MKDIR = mkdir -p export RM = rm -rf FRAMEWORKFLAGS = STATIC_LIBS = DYLIBS_BACKENDS = ifeq ($(BUILD_OS), mingw32) export AR = i686-w64-mingw32-ar export CC = i686-w64-mingw32-gcc export CPP = i686-w64-mingw32-g++ OSLIBEXTENSION = dll else ifeq ($(BUILD_OS), ios) ifeq ($(IOSVERSION),) ifneq (,$(findstring 4.3,$(XCODE))) IOSVERSION = 5.1 else IOSVERSION = 5.0 endif endif ifeq ($(STATIC_FT2),) STATIC_FT2=yes endif ifeq ($(SIMULATOR),yes) ARCH = i386 PARCHFLAGS = -m32 -march=i386 PLATNAME = Simulator else ARCH = armv7 PARCHFLAGS = -march=armv7 -marm -mcpu=cortex-a8 PLATNAME = OS endif #if TOOLCHAINPATH is empty ifeq ($(TOOLCHAINPATH),) #if xcode is 4.3 ifneq (,$(findstring 4.3,$(XCODE))) TOOLCHAINPATH = /Applications/Xcode.app/Contents/Developer/Platforms/iPhone$(PLATNAME).platform/Developer/usr/bin/ SYSROOTPATH = /Applications/Xcode.app/Contents/Developer/Platforms/iPhone$(PLATNAME).platform/Developer/SDKs/iPhone$(PLATNAME)$(IOSVERSION).sdk FRAMEWORKPATH = /Applications/Xcode.app/Contents/Developer/Platforms/iPhone$(PLATNAME).platform/Developer/SDKs/iPhone$(PLATNAME)$(IOSVERSION).sdk/System/Library/Frameworks else TOOLCHAINPATH = /Developer/Platforms/iPhone$(PLATNAME).platform/Developer/usr/bin/ SYSROOTPATH = /Developer/Platforms/iPhone$(PLATNAME).platform/Developer/SDKs/iPhone$(PLATNAME)$(IOSVERSION).sdk FRAMEWORKPATH = /Developer/Platforms/iPhone$(PLATNAME).platform/Developer/SDKs/iPhone$(PLATNAME)$(IOSVERSION).sdk/System/Library/Frameworks endif endif export C_INCLUDE_PATH = $(SYSROOTPATH)/usr/include export CPLUS_INCLUDE_PATH = $(SYSROOTPATH)/usr/include export LIBRARY_PATH = $(FRAMEWORKPATH)/usr/lib PLATFORMFLAGS = -arch ${ARCH} -miphoneos-version-min=$(IOSVERSION) -isysroot $(SYSROOTPATH) -I${C_INCLUDE_PATH} FRAMEWORKFLAGS += -arch ${ARCH} $(PARCHFLAGS) -F$(FRAMEWORKPATH) -L$(SYSROOTPATH)/usr/lib -isysroot $(SYSROOTPATH) endif export AR = $(TOOLCHAINPATH)ar ifeq ($(CLANG_BUILD), yes) export CC = $(TOOLCHAINPATH)clang export CPP = $(TOOLCHAINPATH)clang++ else export CC = $(TOOLCHAINPATH)gcc export CPP = $(TOOLCHAINPATH)g++ endif ifneq (,$(findstring cygwin,$(BUILD_OS))) OSLIBEXTENSION = dll else ifneq ($(BUILD_OS), darwin) OSLIBEXTENSION = so else OSLIBEXTENSION = dylib endif endif SDLCONFIGPATH = endif ifeq ($(ARCH),) ARCHEXT = else ARCHEXT =-$(ARCH) endif LIBPATH = ./libs/$(BUILD_OS)/$(RELEASETYPE)/ DYLIB = libeepp$(ARCHEXT).$(OSLIBEXTENSION) ifeq ($(DYNAMIC), yes) LIB = $(DYLIB) LIBNAME = $(LIBPATH)$(LIB) INSTALL = && $(LN) $(LNFLAGS) $(DESTLIBDIR)/$(LIB).$(VERSION) $(DESTLIBDIR)/$(LIB) else LIB = libeepp$(ARCHEXT).a LIBNAME = $(LIBPATH)$(LIB) INSTALL = endif ifeq ($(DEBUGBUILD), yes) DEBUGFLAGS = -g -DDEBUG -DEE_DEBUG -DEE_MEMORY_MANAGER RELEASETYPE = debug else ifeq ($(CLANG_BUILD), yes) DEBUGFLAGS = -fno-strict-aliasing -O3 -DNDEBUG -ffast-math else DEBUGFLAGS = -fno-strict-aliasing -O3 -s -DNDEBUG -ffast-math endif RELEASETYPE = release endif ifeq ($(DYNAMIC), yes) BUILDFLAGS = -fPIC -DEE_DYNAMIC -DEE_EXPORTS LINKFLAGS = -shared -DEE_DYNAMIC -DEE_EXPORTS else BUILDFLAGS = LINKFLAGS = endif ifeq ($(BACKENDS_ALL),yes) BACKEND_SDL = yes BACKEND_SDL2 = yes BACKEND_ALLEGRO = yes BACKEND_SFML = yes endif ifeq ($(BACKEND_SDL),) ifeq ($(BACKEND_SDL2),) ifeq ($(BACKEND_ALLEGRO),) ifeq ($(BACKEND_SFML),) TRY_USE_SDL = yes endif endif endif endif SDL_BACKEND_LINK = SDL_BACKEND_SRC = SDL2_BACKEND_LINK = SDL2_BACKEND_SRC = SDL_DEFINE = # No backend selected? Select some SDL ifeq ($(TRY_USE_SDL),yes) ifeq ($(BUILD_OS), ios) TRY_SDL2 = yes else ifeq ($(BUILD_OS), darwin) TRY_SDL2 = yes else ifeq ($(BUILD_OS), linux) TRY_SDL2 = yes endif ifeq ($(TRY_SDL2),) TRY_SDL2 = no endif endif endif ifeq ($(TRY_SDL2), yes) # First check for SDL2 SDLVERSION2 = $(shell type -P $(SDLCONFIGPATH)sdl2-config &>/dev/null && $(SDLCONFIGPATH)sdl2-config --version || echo "") ifeq ($(SDLVERSION2),) # Then for SDL 1.2 SDLVERSION = $(shell type -P $(SDLCONFIGPATH)sdl-config &>/dev/null && $(SDLCONFIGPATH)sdl-config --version || echo "") ifeq ($(SDLVERSION),) # Default 2.0.0 SDL_VERSION = 2.0.0 else SDL_VERSION = $(SDLVERSION) endif else SDL_VERSION = $(SDLVERSION2) endif else # First check for SDL 1.2 SDLVERSION = $(shell type -P $(SDLCONFIGPATH)sdl-config &>/dev/null && $(SDLCONFIGPATH)sdl-config --version || echo "") ifeq ($(SDLVERSION),) # Then for SDL 2 SDLVERSION2 = $(shell type -P $(SDLCONFIGPATH)sdl2-config &>/dev/null && $(SDLCONFIGPATH)sdl2-config --version || echo "") ifeq ($(SDLVERSION2),) # Default 1.2 SDL_VERSION = 1.2 else SDL_VERSION = $(SDLVERSION2) endif else SDL_VERSION = $(SDLVERSION) endif endif # If version is 1.2.x ifneq (,$(findstring 1.2,$(SDL_VERSION))) ifeq ($(BUILD_OS), darwin) SDL_ADD_LINK += -framework Cocoa -lSDLmain endif SDL_BACKEND_LINK += -lSDL $(SDL_ADD_LINK) SDL_BACKEND_SRC += $(wildcard ./src/eepp/window/backend/SDL/*.cpp) EE_SDL_VERSION += -DEE_SDL_VERSION_1_2 DYLIBS_BACKENDS += $(SDL_BACKEND_LINK) else ifeq ($(SHARED_BACKEND),) SDL2_STATIC_FOUND = $(shell ls libs/$(BUILD_OS)/libSDL2.a >/dev/null 2>&1 && echo "YES" || echo "NO") ifeq ($(SDL2_STATIC_FOUND),NO) SHARED_BACKEND = yes endif endif # Compile as shared? ifeq ($(SHARED_BACKEND),yes) SDL2_BACKEND_LINK += -lSDL2 EE_SDL_VERSION += -DEE_SDL_VERSION_2 DYLIBS_BACKENDS += $(SDL2_BACKEND_LINK) else # Compile as static then... SDL2_BACKEND_LINK += libs/$(BUILD_OS)/libSDL2.a EE_SDL_VERSION += -DEE_SDL_VERSION_2 STATIC_LIBS += $(SDL2_BACKEND_LINK) endif SDL2_BACKEND_SRC += $(wildcard ./src/eepp/window/backend/SDL2/*.cpp) endif SDL_DEFINE += -DEE_BACKEND_SDL_ACTIVE $(EE_SDL_VERSION) else ifeq ($(BACKEND_SDL2), yes) SDL2_BACKEND_SRC += $(wildcard ./src/eepp/window/backend/SDL2/*.cpp) ifeq ($(SDL_DEFINE),) SDL_DEFINE += -DEE_BACKEND_SDL_ACTIVE endif SDL_DEFINE += -DEE_SDL_VERSION_2 # Compile as shared? ifeq ($(SHARED_BACKEND),yes) SDL2_BACKEND_LINK += -lSDL2 DYLIBS_BACKENDS += $(SDL2_BACKEND_LINK) else # Compile as static then... SDL2_BACKEND_LINK += libs/$(BUILD_OS)/libSDL2.a STATIC_LIBS += $(SDL2_BACKEND_LINK) endif else ifeq ($(BACKEND_SDL), yes) ifeq ($(BUILD_OS), darwin) SDL_ADD_LINK += -framework Cocoa -lSDLmain endif SDL_BACKEND_LINK += -lSDL $(SDL_ADD_LINK) DYLIBS_BACKENDS += $(SDL_BACKEND_LINK) SDL_BACKEND_SRC += $(wildcard ./src/eepp/window/backend/SDL/*.cpp) SDL_DEFINE += -DEE_BACKEND_SDL_ACTIVE -DEE_SDL_VERSION_1_2 endif endif endif ifeq ($(BACKEND_ALLEGRO), yes) ifeq ($(STATIC_ALLEGRO),) ifeq ($(BUILD_OS), darwin) ALLEGRO_BACKEND_LINK = -lallegro -lallegro_main else ALLEGRO_BACKEND_LINK = -lallegro endif DYLIBS_BACKENDS += $(ALLEGRO_BACKEND_LINK) else ALLEGRO_BACKEND_LINK = libs/$(BUILD_OS)/liballegro.a libs/$(BUILD_OS)/liballegro_main.a STATIC_LIBS += $(ALLEGRO_BACKEND_LINK) endif ALLEGRO_BACKEND_SRC = $(wildcard ./src/eepp/window/backend/allegro5/*.cpp) ALLEGRO_DEFINE = -DEE_BACKEND_ALLEGRO_ACTIVE else ALLEGRO_BACKEND_LINK = ALLEGRO_BACKEND_SRC = ALLEGRO_DEFINE = endif ifeq ($(BACKEND_SFML), yes) ifeq ($(STATIC_SFML),) SFML_BACKEND_LINK = -lsfml-system -lsfml-window DYLIBS_BACKENDS += $(SFML_BACKEND_LINK) else SFML_BACKEND_LINK = libs/$(BUILD_OS)/libsfml-system.a libs/$(BUILD_OS)/libsfml-window.a STATIC_LIBS += $(SFML_BACKEND_LINK) endif SFML_BACKEND_SRC = $(wildcard ./src/eepp/window/backend/SFML/*.cpp) SFML_DEFINE = -DEE_BACKEND_SFML_ACTIVE else SFML_BACKEND_LINK = SFML_BACKEND_SRC = SFML_DEFINE = endif BACKENDFLAGS = $(SDL_DEFINE) $(ALLEGRO_DEFINE) $(SFML_DEFINE) ifeq ($(LIBSNDFILE_ENABLE),yes) ifeq ($(MINGW32),yes) LIBSNDFILE = -llibsndfile-1 else #if it is cygwin ifneq (,$(findstring cygwin,$(BUILD_OS))) LIBSNDFILE = -llibsndfile-1 else LIBSNDFILE = -lsndfile endif endif SNDFILEFLAG = -DEE_LIBSNDFILE_ENABLED else LIBSNDFILE = SNDFILEFLAG = endif ifeq ($(STATIC_FT2),yes) LIBFREETYPE2 = INCFREETYPE2 = -I./src/eepp/helper/freetype2/include else LIBFREETYPE2 = -lfreetype ifneq (,$(findstring cygwin,$(BUILD_OS))) INCFREETYPE2 = -I./src/eepp/helper/freetype2/include else ifeq ($(BUILD_OS), haiku) INCFREETYPE2 = -I./src/eepp/helper/freetype2/include else INCFREETYPE2 = -I$(DESTINCDIR)/freetype2 endif endif endif ifeq ($(BUILD_OS), ios) ifeq ($(BACKEND_SDL2),yes) BACKENDINCLUDE = -I./src/eepp/helper/SDL2/include else ifeq ($(BACKEND_ALLEGRO),yes) BACKENDINCLUDE = -I./src/eepp/helper/allegro5/include endif endif PLATFORMFLAGS += $(BACKENDINCLUDE) ifneq ($(GLES2), yes) ifneq ($(GLES1), yes) GLES1=yes endif endif endif FINALFLAGS = $(DEBUGFLAGS) $(SNDFILEFLAG) ifeq ($(GLES2), yes) ifneq ($(GLES1), yes) FINALFLAGS += -DEE_GLES2 -DSOIL_GLES2 GL_VERSION = GLES2 else FINALFLAGS += -DEE_GLES1 -DSOIL_GLES1 -DEE_GLES2 -DSOIL_GLES2 GL_VERSION = GLES endif else ifeq ($(GLES1), yes) FINALFLAGS += -DEE_GLES1 -DSOIL_GLES1 GL_VERSION = GLES1 else GL_VERSION = GL endif endif BASEINC = -I./include/ -I./src/ OTHERINC = $(BASEINC) BININC = -I./include/ ##################### OS BUILD OPTIONS ##################### ifeq ($(BUILD_OS), linux) DYLIBS = -lrt -lpthread -lX11 -lopenal -lGL -lXcursor $(LIBFREETYPE2) $(DYLIBS_BACKENDS) LIBS = $(DYLIBS) $(LIBSNDFILE) $(STATIC_LIBS) OTHERINC += $(INCFREETYPE2) PLATFORMSRC = $(wildcard ./src/eepp/window/platform/x11/*.cpp) $(wildcard ./src/eepp/system/platform/posix/*.cpp) else ifeq ($(BUILD_OS), darwin) LIBS = -framework OpenGL -framework OpenAL -framework CoreFoundation -framework AGL $(LIBSNDFILE) $(SDL_BACKEND_LINK) $(SDL2_BACKEND_LINK) $(ALLEGRO_BACKEND_LINK) $(SFML_BACKEND_LINK) $(LIBFREETYPE2) OTHERINC += $(INCFREETYPE2) -I/usr/local/include/freetype2 PLATFORMSRC = $(wildcard ./src/eepp/window/platform/osx/*.cpp) $(wildcard ./src/eepp/system/platform/posix/*.cpp) else ifeq ($(BUILD_OS), haiku) LIBS = -lopenal -lGL $(SDL_BACKEND_LINK) $(SDL2_BACKEND_LINK) $(LIBFREETYPE2) OTHERINC += $(INCFREETYPE2) PLATFORMSRC = $(wildcard ./src/eepp/system/platform/posix/*.cpp) else ifeq ($(BUILD_OS), freebsd) LIBS = -lrt -lpthread -lX11 -lopenal -lGL -lXcursor $(LIBSNDFILE) $(SDL_BACKEND_LINK) $(SDL2_BACKEND_LINK) $(ALLEGRO_BACKEND_LINK) $(SFML_BACKEND_LINK) $(LIBFREETYPE2) OTHERINC += $(INCFREETYPE2) PLATFORMSRC = $(wildcard ./src/eepp/window/platform/x11/*.cpp) $(wildcard ./src/eepp/system/platform/posix/*.cpp) else ifeq ($(BUILD_OS), mingw32) LIBS = -lOpenAL32 -lopengl32 -lmingw32 -lglu32 -lgdi32 -static-libgcc -static-libstdc++ -mwindows $(LIBSNDFILE) $(SDL_BACKEND_LINK) $(SDL2_BACKEND_LINK) $(ALLEGRO_BACKEND_LINK) $(SFML_BACKEND_LINK) $(LIBFREETYPE2) OTHERINC += $(INCFREETYPE2) PLATFORMSRC = $(wildcard ./src/eepp/window/platform/win/*.cpp) $(wildcard ./src/eepp/system/platform/win/*.cpp) else #if it is cygwin ifneq (,$(findstring cygwin,$(BUILD_OS))) LIBS = -lOpenAL32 -lmingw32 -lopengl32 -lglu32 -lgdi32 -static-libgcc -mwindows $(LIBSNDFILE) $(SDL_BACKEND_LINK) $(SDL2_BACKEND_LINK) $(ALLEGRO_BACKEND_LINK) $(SFML_BACKEND_LINK) $(LIBFREETYPE2) OTHERINC += -I./src/eepp/helper/zlib $(INCFREETYPE2) PLATFORMSRC = $(wildcard ./src/eepp/window/platform/win/*.cpp) $(wildcard ./src/eepp/system/platform/win/*.cpp) else ifeq ($(BUILD_OS), ios) LIBS = -framework OpenGLES -framework OpenAL -framework AudioToolbox -framework CoreAudio -framework Foundation -framework CoreFoundation -framework UIKit -framework QuartzCore -framework CoreGraphics $(SDL_BACKEND_LINK) $(SDL2_BACKEND_LINK) $(ALLEGRO_BACKEND_LINK) $(SFML_BACKEND_LINK) ifndef CROSSIOS LIBS += -static-libgcc -static-libstdc++ endif OTHERINC += $(INCFREETYPE2) ifeq ($(ARCH),armv7) OTHERINC += -DU_HAVE_GCC_ATOMICS=0 endif PLATFORMSRC = $(wildcard ./src/eepp/system/platform/posix/*.cpp) endif #endif ios endif #endif cygwin endif #endif mingw32 endif #endif freebsd endif #endif haiku endif #endif darwin endif #endif linux ##################### OS BUILD OPTIONS ##################### export CFLAGS = $(ARCHFLAGS) -Wall -Wno-unknown-pragmas $(FINALFLAGS) $(BUILDFLAGS) $(BACKENDFLAGS) $(PLATFORMFLAGS) export CFLAGSEXT = $(ARCHFLAGS) $(FINALFLAGS) $(BUILDFLAGS) $(PLATFORMFLAGS) export LDFLAGS = $(ARCHFLAGS) $(LINKFLAGS) $(FRAMEWORKFLAGS) HELPERSFLAGS = -DSTBI_FAILURE_USERMSG -DFT2_BUILD_LIBRARY HELPERSINC = -I./include/eepp/helper/chipmunk -I./src/eepp/helper/zlib -I./src/eepp/helper/freetype2/include -I./include/eepp/helper/SOIL2 -I./include/eepp/helper/glew ifeq ($(BUILD_OS), mingw32) OSEXTENSION = .exe else OSEXTENSION = endif ifeq ($(BUILD_OS), haiku) SRCGLEW = else ifeq ($(BUILD_OS), ios) SRCGLEW = else SRCGLEW = $(wildcard ./src/eepp/helper/glew/*.c) endif endif ifeq ($(STATIC_FT2), yes) SRCFREETYPE = $(wildcard ./src/eepp/helper/freetype2/src/*/*.c) else SRCFREETYPE = endif SRCHELPERS = $(SRCFREETYPE) $(SRCGLEW) $(wildcard ./src/eepp/helper/SOIL2/src/SOIL2/*.c) $(wildcard ./src/eepp/helper/stb_vorbis/*.c) $(wildcard ./src/eepp/helper/zlib/*.c) $(wildcard ./src/eepp/helper/libzip/*.c) $(wildcard ./src/eepp/helper/chipmunk/*.c) $(wildcard ./src/eepp/helper/chipmunk/constraints/*.c) SRCMODULES = $(wildcard ./src/eepp/helper/jpeg-compressor/*.cpp) $(wildcard ./src/eepp/helper/haikuttf/*.cpp) $(wildcard ./src/eepp/base/*.cpp) $(wildcard ./src/eepp/audio/*.cpp) $(wildcard ./src/eepp/gaming/*.cpp) $(wildcard ./src/eepp/gaming/mapeditor/*.cpp) $(wildcard ./src/eepp/graphics/*.cpp) $(wildcard ./src/eepp/graphics/renderer/*.cpp) $(wildcard ./src/eepp/math/*.cpp) $(wildcard ./src/eepp/system/*.cpp) $(wildcard ./src/eepp/ui/*.cpp) $(wildcard ./src/eepp/ui/tools/*.cpp) $(wildcard ./src/eepp/utils/*.cpp) $(wildcard ./src/eepp/window/*.cpp) $(wildcard ./src/eepp/window/backend/null/*.cpp) $(wildcard ./src/eepp/window/platform/null/*.cpp) $(SDL_BACKEND_SRC) $(SDL2_BACKEND_SRC) $(ALLEGRO_BACKEND_SRC) $(SFML_BACKEND_SRC) $(PLATFORMSRC) $(wildcard ./src/eepp/physics/*.cpp) $(wildcard ./src/eepp/physics/constraints/*.cpp) OBJHELPERS = $(SRCHELPERS:.c=.o) OBJMODULES = $(SRCMODULES:.cpp=.o) ifeq ($(ARCH),) OBJDIR = obj/$(BUILD_OS)/$(RELEASETYPE)/ else ifeq ($(BUILD_OS), ios) OBJDIR = obj/$(BUILD_OS)/$(RELEASETYPE)/$(ARCH)/$(GL_VERSION)/ else OBJDIR = obj/$(BUILD_OS)/$(RELEASETYPE)/$(ARCH)/ endif endif FOBJHELPERS = $(patsubst ./%, $(OBJDIR)%, $(OBJHELPERS) ) FOBJMODULES = $(patsubst ./%, $(OBJDIR)%, $(OBJMODULES) ) ifneq ($(BUILD_OS), darwin) DYLIB_EXTRA = -Wl,-soname,$(LIB).$(VERSION) else DYLIB_EXTRA = -Wl endif