regal/Makefile.regal
Nigel Stewart 3ad6fd770e Revised version of commit b92e6bb26a
Consolidation of various GL context limits into RegalEmu.h and ContextInfo
Improved array bounds checking for emulation
More querable states for GL database
Revision: Resolve Iff fixed-function lighting emulation perf regression.
2013-09-09 12:23:02 -05:00

298 lines
8.3 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
all:: regal.lib
clean:: regal.clean
REGAL.LDFLAGS := -lstdc++ -pthread -lm
REGAL.LIBS :=
ifeq ($(filter nacl%,$(SYSTEM)),)
REGAL.LDFLAGS += -ldl
endif
REGAL.SRCS := $(REGAL.CXX)
# Disable mongoose and Regal HTTP for NaCl build
ifeq ($(filter nacl% emscripten%,$(SYSTEM)),)
REGAL.SRCS += src/mongoose/mongoose.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)
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_NO_HTTP=1
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
# Emscripten options
ifneq ($(filter nacl% emscripten%,$(SYSTEM)),)
REGAL.CFLAGS += -DREGAL_SYS_EMSCRIPTEN=1 -DREGAL_SYS_EGL=1 -DREGAL_SYS_ES2=1
REGAL.CFLAGS += -DREGAL_NO_HTTP=1
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 -DREGAL_STATIC_EGL
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_NO_HTTP=1
REGAL.CFLAGS += -Wno-constant-logical-operand
REGAL.CFLAGS += -DREGAL_PLUGIN=0
REGAL.CFLAGS += -DREGAL_TRACE=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
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)
LDFLAGS.SO := $(LDFLAGS.DYNAMIC) -Wl,-soname=$(REGAL.SONAME)
endif
ifneq ($(filter darwin%,$(SYSTEM)),)
REGAL.SONAME := lib$(NAME).$(SO_MAJOR).dylib
REGAL.DEVLNK := lib$(NAME).dylib
REGAL.SHARED := lib$(NAME).$(SO_VERSION).dylib
REGAL.FRAMEWORK := $(NAME)
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
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
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)/$(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)/$(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) $(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) $(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) $(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) $(REGAL.INCLUDE) -o $@ -c $<
tmp/$(SYSTEM)/regal/static/%.o: src/mongoose/%.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/mongoose/%.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