blob: dfec0bf500af8bfa3e09031493e5e362f550ed95 [file] [log] [blame]
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 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_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
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)),)
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
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) $(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) $(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/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