Files
eepp/Makefile.base
2013-01-10 02:19:39 -03:00

568 lines
15 KiB
Makefile

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) -I./src/eepp/helper/SDL2/include
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