regal/Makefile.regal
Scott Nations 586b2e12be Add support for OpenGL 4.5 and recent extensions
Update Regal GLEW to 1.11.0, including OpenGL 4.5
Refresh apitrace from upstream
Can now "make framework" under Mac OS
Merged pull requests 134, 135, and 136
2014-08-12 21:32:45 -05:00

342 lines
9.9 KiB
Text

ifndef MAKEFILE_REGAL_INCLUDED
MAKEFILE_REGAL_INCLUDED := 1
.PHONY: regal.lib regal.clean
include build/common.inc
include build/regal.inc
#
# regal
#
#
# Regenerate Regal sources
#
export:
python scripts/Export.py --api gl 4.4 --api wgl 4.4 --api glx 4.4 --api cgl 1.4 --api egl 1.0 --outdir .
# Shared library target not currently supported for NaCL or emscripten
ifneq ($(filter nacl% emscripten%,$(SYSTEM)),)
REGAL.SHARED :=
endif
ifdef REGAL.STATIC
include Makefile.apitrace
include Makefile.libpng
include Makefile.glsloptlib
include Makefile.pcrelib
all:: regal.lib
clean:: regal.clean
framework:: regal.framework
REGAL.LDFLAGS :=
ifeq ($(filter nacl%,$(SYSTEM)),)
REGAL.LDFLAGS += -lstdc++
endif
REGAL.LDFLAGS += -pthread -lm
REGAL.LIBS :=
ifeq ($(filter nacl%,$(SYSTEM)),)
REGAL.LDFLAGS += -ldl
endif
REGAL.SRCS := $(REGAL.CXX)
# Disable civetweb and Regal HTTP for NaCl build
ifeq ($(filter nacl% emscripten%,$(SYSTEM)),)
REGAL.SRCS += src/civetweb/civetweb.c
endif
ifeq ($(filter -DREGAL_NO_MD5%,$(CFLAGS)),)
REGAL.SRCS += src/md5/src/md5.c
endif
REGAL.SRCS += src/jsonsl/jsonsl.c
# Optional flags
# REGAL_SYS_ES1 for ES1 back-end support, disabled by default
# REGAL.CFLAGS += -DREGAL_SYS_ES1=1
#
# Add debug-specific flags
#
ifeq ($(MODE),debug)
#REGAL.CFLAGS += -DREGAL_ASSERT_VERBOSE=1
#REGAL.CFLAGS += -DREGAL_NO_ASSERT=1
endif
#
# In release mode we're aggressive about leaving out functionality
# in order to minimize the footprint of libRegal.so.1
#
ifeq ($(MODE),release)
REGAL.CFLAGS += -DNDEBUG
REGAL.CFLAGS += -DREGAL_DECL_EXPORT=1
REGAL.CFLAGS += -DREGAL_LOG_ALL=0
REGAL.CFLAGS += -DREGAL_LOG_ONCE=0
REGAL.CFLAGS += -DREGAL_LOG_JSON=0
REGAL.CFLAGS += -DREGAL_HTTP=0
REGAL.CFLAGS += -DREGAL_NO_ASSERT=1
REGAL.CFLAGS += -DREGAL_NO_PNG=1
REGAL.CFLAGS += -DREGAL_STATISTICS=0
REGAL.CFLAGS += -DREGAL_CODE=0
REGAL.CFLAGS += -fomit-frame-pointer
REGAL_LOG ?= 0
REGAL_ERROR ?= 0
REGAL_CACHE ?= 0
REGAL_DEBUG ?= 0
#REGAL_EMULATION ?= 1 # 0 for "loader only"
#REGAL.CFLAGS += -DREGAL_NO_TLS=0 # 1 for single threaded
endif
#
# Flags for custom mode
#
ifeq ($(MODE),custom)
endif
# NaCL options
ifneq ($(filter nacl%,$(SYSTEM)),)
REGAL.CFLAGS += -DREGAL_SYS_ES2=1
REGAL.CFLAGS += -DREGAL_HTTP=0
REGAL.CFLAGS += -DREGAL_STATISTICS=0
REGAL.CFLAGS += -Wno-constant-logical-operand
REGAL.CFLAGS += -DREGAL_PLUGIN=0
REGAL.CFLAGS += -DREGAL_TRACE=0
REGAL.CFLAGS += -DREGAL_NAMESPACE=1 -DREGAL_STATIC_ES2
REGAL_LOG = 0
REGAL_NO_TLS = 1
# Enabling this requires the library to be built with it, as well as all code
# that uses it. Defining this means that Regal will link statically to GL
# and EGL, and code will have to #include <GL/Regal.h> before any GL
# includes to pull in a bunch of #defines (e.g. #define glGetError rglGetError)
#LIB.CFLAGS += -DREGAL_SYS_EMSCRIPTEN_STATIC=1
endif
#
# Emscripten-specific
#
ifneq ($(filter emscripten%,$(SYSTEM)),)
REGAL.CFLAGS += -DREGAL_SYS_EMSCRIPTEN=1 -DREGAL_SYS_EGL=1 -DREGAL_SYS_ES2=1
REGAL.CFLAGS += -DREGAL_HTTP=0
REGAL.CFLAGS += -Wno-constant-logical-operand
REGAL.CFLAGS += -DREGAL_PLUGIN=0
REGAL.CFLAGS += -DREGAL_TRACE=0
REGAL.CFLAGS += -s LEGACY_GL_EMULATION=1
REGAL.CFLAGS += -s OUTLINING_LIMIT=50000
REGAL.CFLAGS += --js-opts 0
REGAL_LOG := 0
REGAL_ERROR := 0
REGAL_CACHE := 0
REGAL_DEBUG := 0
REGAL_NO_TLS := 1
endif
#
ifneq ($(REGAL_LOG),)
REGAL.CFLAGS += -DREGAL_LOG=$(REGAL_LOG)
endif
ifneq ($(REGAL_ERROR),)
REGAL.CFLAGS += -DREGAL_ERROR=$(REGAL_ERROR)
endif
ifneq ($(REGAL_CACHE),)
REGAL.CFLAGS += -DREGAL_CACHE=$(REGAL_CACHE)
endif
ifneq ($(REGAL_DEBUG),)
REGAL.CFLAGS += -DREGAL_DEBUG=$(REGAL_DEBUG)
endif
ifneq ($(REGAL_EMULATION),)
REGAL.CFLAGS += -DREGAL_EMULATION=$(REGAL_EMULATION)
endif
ifneq ($(REGAL_WRANGLER),)
REGAL.CFLAGS += -DREGAL_WRANGLER=$(REGAL_WRANGLER)
endif
ifneq ($(REGAL_NO_TLS),)
REGAL.CFLAGS += -DREGAL_NO_TLS=$(REGAL_NO_TLS)
endif
REGAL.CFLAGS += -fvisibility=hidden
REGAL.SRCS.NAMES := $(notdir $(REGAL.SRCS))
REGAL.HEADERS :=
REGAL.HEADERS += include/GL/Regal.h
REGAL.HEADERS += src/regal/RegalPrivate.h
REGAL.OBJS := $(addprefix tmp/$(SYSTEM)/regal/static/,$(REGAL.SRCS.NAMES))
REGAL.OBJS := $(REGAL.OBJS:.c=.o)
REGAL.OBJS := $(REGAL.OBJS:.cpp=.o)
REGAL.DEPS := $(REGAL.OBJS:.o=.d)
REGAL.SOBJS := $(addprefix tmp/$(SYSTEM)/regal/shared/,$(REGAL.SRCS.NAMES))
REGAL.SOBJS := $(REGAL.SOBJS:.c=.o)
REGAL.SOBJS := $(REGAL.SOBJS:.cpp=.o)
REGAL.SDEPS := $(LIBS.SOBJS:.o=.d)
-include $(REGAL.DEPS) $(REGAL.SDEPS)
REGAL.LIBS += $(LDFLAGS.X11)
ifneq ($(filter linux%,$(SYSTEM)),)
REGAL.SONAME := lib$(NAME).so.$(SO_MAJOR)
REGAL.DEVLNK := lib$(NAME).so
REGAL.SHARED := lib$(NAME).so.$(SO_VERSION)
REGAL.LDFLAGS.SO := $(LDFLAGS.SO) $(LDFLAGS.DYNAMIC) -Wl,-soname=$(REGAL.SONAME)
endif
ifneq ($(filter darwin%,$(SYSTEM)),)
OPENGL_NAME := OpenGL
OPENGL_FRAMEWORK := $(OPENGL_NAME).framework
OPENGL := $(OPENGL_FRAMEWORK)/Versions/A/$(OPENGL_NAME)
REGAL.SONAME := lib$(NAME).$(SO_MAJOR).dylib
REGAL.DEVLNK := lib$(NAME).dylib
REGAL.SHARED := lib$(NAME).$(SO_VERSION).dylib
REGAL.FRAMEWORK := $(NAME)
REGAL.LDFLAGS.SO := $(LDFLAGS.SO) $(LDFLAGS.DYNAMIC) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR)
#LDFLAGS.SO += -install_name $(REGAL_DEST)/lib/$(REGAL.SHARED)
REGAL.LDFLAGS += -Wl,-reexport-lGLU -L/System/Library/Frameworks/$(OPENGL_FRAMEWORK)/Versions/A/Libraries
INFO_PLIST := build/mac/Info.plist
endif
ifdef REGAL.STATIC
regal.lib: lib/$(SYSTEM)/$(REGAL.STATIC)
endif
ifdef REGAL.SHARED
regal.lib: lib/$(SYSTEM)/$(REGAL.SHARED)
endif
regal.clean:
$(RM) -r tmp/$(SYSTEM)/regal/static
$(RM) -r tmp/$(SYSTEM)/regal/shared
ifdef REGAL.STATIC
$(RM) -r lib/$(SYSTEM)/$(REGAL.STATIC)
endif
ifdef REGAL.SHARED
$(RM) -r bin/$(SYSTEM)/$(REGAL.SHARED)
endif
ifneq ($(filter darwin%,$(SYSTEM)),)
regal.framework:
$(RM) -r $(OPENGL_FRAMEWORK)
$(MKDIR) $(OPENGL_FRAMEWORK)/Versions/A/Resources
$(MKDIR) $(OPENGL_FRAMEWORK)/Versions/A/Libraries
$(LN) A $(OPENGL_FRAMEWORK)/Versions/Current
$(LN) Versions/Current/Resources $(OPENGL_FRAMEWORK)/Resources
$(LN) Versions/Current/Headers $(OPENGL_FRAMEWORK)/Headers
$(LN) Versions/Current/Libraries $(OPENGL_FRAMEWORK)/Libraries
$(LN) Versions/Current/$(OPENGL_NAME) $(OPENGL_FRAMEWORK)/$(OPENGL_NAME)
$(CP) $(INFO_PLIST) $(OPENGL_FRAMEWORK)/Resources
ifdef REGAL.SHARED
$(CP) lib/$(SYSTEM)/$(REGAL.SHARED) $(OPENGL_FRAMEWORK)/Versions/A/Libraries/$(OPENGL_NAME)
endif
$(LN) Libraries/$(OPENGL_NAME) $(OPENGL_FRAMEWORK)/Versions/A/$(OPENGL_NAME)
endif
ifdef APITRACE.STATIC
lib/$(SYSTEM)/$(REGAL.STATIC): lib/$(SYSTEM)/$(APITRACE.STATIC) lib/$(SYSTEM)/$(SNAPPY.STATIC)
endif
ifneq ($(filter nacl%,$(SYSTEM)),)
ifeq ($(NACL_LIBC),glibc)
regal.lib: lib/$(SYSTEM)/$(REGAL.SHARED)
endif
endif
lib/$(SYSTEM)/$(REGAL.STATIC): lib/$(SYSTEM)/$(GLSLOPT.STATIC) lib/$(SYSTEM)/$(PCRE.STATIC) lib/$(SYSTEM)/$(LIBPNG.STATIC) lib/$(SYSTEM)/$(ZLIB.STATIC) $(REGAL.OBJS)
@mkdir -p $(dir $@)
$(LOG_AR)$(CCACHE) $(AR) cr $@ $(REGAL.OBJS)
ifneq ($(RANLIB),)
$(LOG_RANLIB)$(RANLIB) $@
endif
ifneq ($(STRIP),)
$(LOG_STRIP)$(STRIP) -x $@
endif
REGAL.SHARED.DEPEND :=
REGAL.SHARED.DEPEND += lib/$(SYSTEM)/$(GLSLOPT.STATIC) lib/$(SYSTEM)/$(PCRE.STATIC) lib/$(SYSTEM)/$(LIBPNG.STATIC) lib/$(SYSTEM)/$(ZLIB.STATIC)
ifdef APITRACE.STATIC
REGAL.SHARED.DEPEND += lib/$(SYSTEM)/$(APITRACE.STATIC) lib/$(SYSTEM)/$(SNAPPY.STATIC)
endif
ifdef REGAL.SHARED
lib/$(SYSTEM)/$(REGAL.SHARED): $(REGAL.SHARED.DEPEND) $(REGAL.SOBJS)
ifdef APITRACE.STATIC
$(LOG_LD)$(CCACHE) $(LD) $(LDFLAGS.EXTRA) $(REGAL.LDFLAGS.SO) -o $@ $(LDFLAGS.STARTGROUP) $(REGAL.SOBJS) lib/$(SYSTEM)/$(APITRACE.STATIC) $(LDFLAGS.ENDGROUP) $(REGAL.SHARED.DEPEND) $(REGAL.LIBS) $(REGAL.LDFLAGS)
else
$(LOG_LD)$(CCACHE) $(LD) $(LDFLAGS.EXTRA) $(REGAL.LDFLAGS.SO) -o $@ $(REGAL.SOBJS) $(REGAL.SHARED.DEPEND) $(REGAL.LIBS) $(REGAL.LDFLAGS)
endif
ifneq ($(LN),)
$(LN) $(REGAL.SHARED) lib/$(SYSTEM)/$(REGAL.SONAME)
$(LN) $(REGAL.SHARED) lib/$(SYSTEM)/$(REGAL.DEVLNK)
ifneq ($(REGAL.FRAMEWORK),)
$(LN) $(REGAL.SHARED) lib/$(SYSTEM)/$(REGAL.FRAMEWORK)
endif
endif
ifneq ($(STRIP),)
$(LOG_STRIP)$(STRIP) -x $@
endif
endif
tmp/$(SYSTEM)/regal/static/%.o: src/regal/%.cpp $(REGAL.HEADERS)
@mkdir -p $(dir $@)
$(LOG_CXX)$(CCACHE) $(CXX) $(REGAL.CFLAGS) $(CFLAGS) $(CFLAGS.SO) $(GLSLOPT.INCLUDE) $(REGAL.INCLUDE) -o $@ -c $<
tmp/$(SYSTEM)/regal/shared/%.o: src/regal/%.cpp $(REGAL.HEADERS)
@mkdir -p $(dir $@)
$(LOG_CXX)$(CCACHE) $(CXX) $(REGAL.CFLAGS) $(CFLAGS) $(PICFLAG) $(CFLAGS.SO) $(GLSLOPT.INCLUDE) $(REGAL.INCLUDE) -o $@ -c $<
tmp/$(SYSTEM)/regal/static/%.o: src/civetweb/%.c $(REGAL.HEADERS)
@mkdir -p $(dir $@)
$(LOG_CC)$(CCACHE) $(CC) $(REGAL.CFLAGS) $(CFLAGS) $(CFLAGS.SO) $(REGAL.INCLUDE) -o $@ -c $<
tmp/$(SYSTEM)/regal/shared/%.o: src/civetweb/%.c $(REGAL.HEADERS)
@mkdir -p $(dir $@)
$(LOG_CC)$(CCACHE) $(CC) $(REGAL.CFLAGS) $(CFLAGS) $(PICFLAG) $(CFLAGS.SO) $(REGAL.INCLUDE) -o $@ -c $<
tmp/$(SYSTEM)/regal/static/%.o: src/md5/src/%.c $(REGAL.HEADERS)
@mkdir -p $(dir $@)
$(LOG_CC)$(CCACHE) $(CC) $(REGAL.CFLAGS) $(CFLAGS) $(CFLAGS.SO) $(REGAL.INCLUDE) -o $@ -c $<
tmp/$(SYSTEM)/regal/shared/%.o: src/md5/src/%.c $(REGAL.HEADERS)
@mkdir -p $(dir $@)
$(LOG_CC)$(CCACHE) $(CC) $(REGAL.CFLAGS) $(CFLAGS) $(PICFLAG) $(CFLAGS.SO) $(REGAL.INCLUDE) -o $@ -c $<
tmp/$(SYSTEM)/regal/static/%.o: src/jsonsl/%.c $(REGAL.HEADERS)
@mkdir -p $(dir $@)
$(LOG_CC)$(CCACHE) $(CC) $(REGAL.CFLAGS) $(CFLAGS) $(CFLAGS.SO) $(REGAL.INCLUDE) -o $@ -c $<
tmp/$(SYSTEM)/regal/shared/%.o: src/jsonsl/%.c $(REGAL.HEADERS)
@mkdir -p $(dir $@)
$(LOG_CC)$(CCACHE) $(CC) $(REGAL.CFLAGS) $(CFLAGS) $(PICFLAG) $(CFLAGS.SO) $(REGAL.INCLUDE) -o $@ -c $<
endif
endif