blob: a9e6f346aa67bdd7848a6b44eec70080b748dd86 [file] [log] [blame]
# To build in debug mode:
# - use MODE=debug on gmake command-line
#
# To build using ccache (http://ccache.samba.org/)
# - use CCACHE=ccache on gmake command-line
#
# To disable stripping of binaries either:
# - use MODE=debug on gmake command-line
# - use STRIP= on gmake command-line
# - edit this makefile to set STRIP to the empty string
#
# To disable symlinks:
# - use LN= on gmake command-line
#
# To specify additional compiler flags:
# - use CFLAGS= on gmake command-line
#
# To see verbose output
# - use V=1 on gmake command-line
include config/version
SHELL = /bin/sh
ifndef SYSTEM
SYSTEM := $(shell config/config.guess | cut -d - -f 3 | sed -e 's/[0-9\.]//g;')
endif
SYSTEM.SUPPORTED = $(shell test -f config/Makefile.$(SYSTEM) && echo 1)
ifeq ($(SYSTEM.SUPPORTED), 1)
include config/Makefile.$(SYSTEM)
else
$(error "Platform '$(SYSTEM)' not supported")
endif
include build/regal.inc
include build/regaltest.inc
include build/zlib.inc
include build/libpng.inc
include build/glu.inc
include build/glut.inc
REGAL_DEST ?= /usr
BINDIR ?= $(REGAL_DEST)/bin
LIBDIR ?= $(REGAL_DEST)/lib
AR ?= ar
INSTALL ?= install
RANLIB ?= ranlib
STRIP ?= strip
RM ?= rm -f
LN ?= ln -sf
# Release mode is the default
ifeq ($(MODE),)
MODE := release
endif
ifeq ($(MODE),debug)
OPT = $(CFLAGS.DEBUG)
STRIP :=
endif
ifeq ($(MODE),release)
OPT = $(CFLAGS.RELEASE)
endif
ifndef V
LOG_CXX = @echo " [CXX] $@";
LOG_CC = @echo " [CC] $@";
LOG_LD = @echo " [LD] $@";
LOG_AR = @echo " [AR] $@";
LOG_RANLIB = @echo " [RANLIB] $@";
LOG_STRIP = @echo " [STRIP] $@";
endif
INCLUDE = -Iinclude
override CFLAGS := $(OPT) $(CFLAGS) $(WARN) $(INCLUDE) $(CFLAGS.EXTRA)
#
# Default target: all
#
all: regal.lib glew.lib regal.bin
# GLU and GLUT for platforms other than NaCl and Mac
ifneq ($(filter nacl%,$(SYSTEM)),)
ifneq ($(filter darwin%,$(SYSTEM)),)
all: glu.lib glut.lib
endif
endif
#
# Regenerate Regal sources
#
export:
scripts/Export.py --api gl 4.2 --api wgl 4.0 --api glx 4.0 --api cgl 1.4 --api egl 1.0 --outdir .
#
# zlib
#
ZLIB.SRCS := $(ZLIB.C)
ZLIB.SRCS.NAMES := $(notdir $(ZLIB.SRCS))
ZLIB.OBJS := $(addprefix tmp/$(SYSTEM)/zlib/static/,$(ZLIB.SRCS.NAMES))
ZLIB.OBJS := $(ZLIB.OBJS:.c=.o)
ZLIB.DEPS := $(ZLIB.OBJS:.o=.d)
ZLIB.CFLAGS := -Isrc/zlib/include
ZLIB.STATIC := libz.a
-include $(ZLIB.DEPS)
ifneq ($(filter linux%,$(SYSTEM)),)
ZLIB.CFLAGS += -DHAVE_UNISTD_H
endif
ifneq ($(filter darwin%,$(SYSTEM)),)
ZLIB.CFLAGS += -DHAVE_UNISTD_H
endif
ifneq ($(filter nacl%,$(SYSTEM)),)
ZLIB.CFLAGS += -DHAVE_UNISTD_H
endif
zlib.lib: lib/$(SYSTEM)/$(ZLIB.STATIC)
tmp/$(SYSTEM)/zlib/static/%.o: src/zlib/src/%.c
@mkdir -p $(dir $@)
$(LOG_CC)$(CCACHE) $(CC) $(ZLIB.CFLAGS) $(CFLAGS) $(PICFLAG) -o $@ -c $<
lib/$(SYSTEM)/$(ZLIB.STATIC): $(ZLIB.OBJS)
@mkdir -p $(dir $@)
$(LOG_AR)$(CCACHE) $(AR) cr $@ $(ZLIB.OBJS)
ifneq ($(RANLIB),)
$(LOG_RANLIB)$(RANLIB) $@
endif
ifneq ($(STRIP),)
$(LOG_STRIP)$(STRIP) -x $@
endif
#
# libpng
#
LIBPNG.SRCS := $(LIBPNG.C)
LIBPNG.SRCS.NAMES := $(notdir $(LIBPNG.SRCS))
LIBPNG.OBJS := $(addprefix tmp/$(SYSTEM)/libpng/static/,$(LIBPNG.SRCS.NAMES))
LIBPNG.OBJS := $(LIBPNG.OBJS:.c=.o)
LIBPNG.DEPS := $(LIBPNG.DEPS:.o=.d)
LIBPNG.CFLAGS := -Isrc/zlib/include -Isrc/libpng/include
LIBPNG.STATIC := libpng.a
-include $(LIBPNG.DEPS)
ifneq ($(filter linux%,$(SYSTEM)),)
LIBPNG.CFLAGS += -DHAVE_UNISTD_H
endif
ifneq ($(filter darwin%,$(SYSTEM)),)
LIBPNG.CFLAGS += -DHAVE_UNISTD_H
endif
ifneq ($(filter nacl%,$(SYSTEM)),)
LIBPNG.CFLAGS += -DHAVE_UNISTD_H
endif
libpng.lib: zlib.lib lib/$(SYSTEM)/$(LIBPNG.STATIC)
tmp/$(SYSTEM)/libpng/static/%.o: src/libpng/src/%.c
@mkdir -p $(dir $@)
$(LOG_CC)$(CCACHE) $(CC) $(LIBPNG.CFLAGS) $(CFLAGS) $(PICFLAG) -o $@ -c $<
lib/$(SYSTEM)/$(LIBPNG.STATIC): $(LIBPNG.OBJS)
@mkdir -p $(dir $@)
$(LOG_AR)$(CCACHE) $(AR) cr $@ $(LIBPNG.OBJS)
ifneq ($(RANLIB),)
$(LOG_RANLIB)$(RANLIB) $@
endif
ifneq ($(STRIP),)
$(LOG_STRIP)$(STRIP) -x $@
endif
#
LIB.LDFLAGS := -lstdc++ -pthread -lm
LIB.LIBS :=
ifeq ($(filter nacl%,$(SYSTEM)),)
LIB.LDFLAGS += -ldl
endif
LIB.SRCS := $(REGAL.CXX)
# Disable mongoose and Regal HTTP for NaCl build
ifeq ($(filter nacl%,$(SYSTEM)),)
LIB.SRCS += src/mongoose/mongoose.c
endif
ifeq ($(filter -DREGAL_NO_MD5%,$(CFLAGS)),)
LIB.SRCS += src/md5/src/md5.c
endif
LIB.SRCS += src/jsonsl/jsonsl.c
LIB.INCLUDE += -Isrc/zlib/include
LIB.INCLUDE += -Isrc/libpng/include
LIB.INCLUDE += -Isrc/mongoose
LIB.INCLUDE += -Isrc/md5/include
LIB.INCLUDE += -Isrc/lookup3
LIB.INCLUDE += -Isrc/jsonsl
# Optional flags
# REGAL_SYS_ES1 for ES1 back-end support, disabled by default
# LIB.CFLAGS += -DREGAL_SYS_ES1=1
#
# Add debug-specific flags
#
ifeq ($(MODE),debug)
endif
#
# In release mode we're agressive about leaving out functionality
# in order to minimize the footprint of libRegal.so.1
#
ifeq ($(MODE),release)
LIB.CFLAGS += -DNDEBUG
LIB.CFLAGS += -DREGAL_DECL_EXPORT=1
LIB.CFLAGS += -DREGAL_LOG=0
LIB.CFLAGS += -DREGAL_LOG_ALL=0
LIB.CFLAGS += -DREGAL_LOG_ONCE=0
LIB.CFLAGS += -DREGAL_LOG_JSON=0
LIB.CFLAGS += -DREGAL_NO_HTTP=1
LIB.CFLAGS += -DREGAL_NO_ASSERT=1
LIB.CFLAGS += -DREGAL_NO_PNG=1
LIB.CFLAGS += -fomit-frame-pointer
LIB.CFLAGS += -DREGAL_ERROR=0
LIB.CFLAGS += -DREGAL_DEBUG=0
LIB.CFLAGS += -DREGAL_CACHE=0
LIB.CFLAGS += -DREGAL_EMULATION=1 # 0 for "loader only"
LIB.CFLAGS += -DREGAL_NO_TLS=0 # 1 for single threaded
endif
#
# Flags for custom mode
#
ifeq ($(MODE),custom)
endif
LIB.INCLUDE += -Isrc/boost
LIB.SRCS.NAMES := $(notdir $(LIB.SRCS))
LIB.HEADERS :=
LIB.HEADERS += include/GL/Regal.h
LIB.HEADERS += src/regal/RegalPrivate.h
LIB.OBJS := $(addprefix tmp/$(SYSTEM)/regal/static/,$(LIB.SRCS.NAMES))
LIB.OBJS := $(LIB.OBJS:.c=.o)
LIB.OBJS := $(LIB.OBJS:.cpp=.o)
LIB.DEPS := $(LIB.OBJS:.o=.d)
LIB.SOBJS := $(addprefix tmp/$(SYSTEM)/regal/shared/,$(LIB.SRCS.NAMES))
LIB.SOBJS := $(LIB.SOBJS:.c=.o)
LIB.SOBJS := $(LIB.SOBJS:.cpp=.o)
LIB.SDEPS := $(LIBS.SOBJS:.o=.d)
-include $(LIB.DEPS) $(LIB.SDEPS)
LIB.LIBS += -Llib/$(SYSTEM) -lpng -lz
ifneq ($(filter darwin%,$(SYSTEM)),)
LIB.LDFLAGS += -Wl,-reexport-lGLU -L/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries
endif
regal.lib: lib/$(SYSTEM)/$(LIB.STATIC)
ifeq ($(filter nacl%,$(SYSTEM)),)
regal.lib: lib/$(SYSTEM)/$(LIB.SHARED)
endif
lib/$(SYSTEM)/$(LIB.STATIC): lib/$(SYSTEM)/$(LIBPNG.STATIC) lib/$(SYSTEM)/$(ZLIB.STATIC) $(LIB.OBJS)
@mkdir -p $(dir $@)
$(LOG_AR)$(CCACHE) $(AR) cr $@ $(LIB.OBJS)
ifneq ($(RANLIB),)
$(LOG_RANLIB)$(RANLIB) $@
endif
ifneq ($(STRIP),)
$(LOG_STRIP)$(STRIP) -x $@
endif
lib/$(SYSTEM)/$(LIB.SHARED): lib/$(SYSTEM)/$(LIBPNG.STATIC) lib/$(SYSTEM)/$(ZLIB.STATIC) $(LIB.SOBJS)
$(LOG_LD)$(CCACHE) $(LD) $(LDFLAGS.EXTRA) $(LDFLAGS.SO) -o $@ $(LIB.SOBJS) $(LIB.LIBS) $(LIB.LDFLAGS)
ifneq ($(LN),)
$(LN) $(LIB.SHARED) lib/$(SYSTEM)/$(LIB.SONAME)
$(LN) $(LIB.SHARED) lib/$(SYSTEM)/$(LIB.DEVLNK)
ifneq ($(LIB.FRAMEWORK),)
$(LN) $(LIB.SHARED) lib/$(SYSTEM)/$(LIB.FRAMEWORK)
endif
endif
ifneq ($(STRIP),)
$(LOG_STRIP)$(STRIP) -x $@
endif
tmp/$(SYSTEM)/regal/static/%.o: src/regal/%.cpp $(LIB.HEADERS)
@mkdir -p $(dir $@)
$(LOG_CXX)$(CCACHE) $(CC) $(LIB.CFLAGS) $(CFLAGS) $(CFLAGS.SO) $(LIB.INCLUDE) -o $@ -c $<
tmp/$(SYSTEM)/regal/shared/%.o: src/regal/%.cpp $(LIB.HEADERS)
@mkdir -p $(dir $@)
$(LOG_CXX)$(CCACHE) $(CC) $(LIB.CFLAGS) $(CFLAGS) $(PICFLAG) $(CFLAGS.SO) $(LIB.INCLUDE) -o $@ -c $<
tmp/$(SYSTEM)/regal/static/%.o: src/mongoose/%.c $(LIB.HEADERS)
@mkdir -p $(dir $@)
$(LOG_CC)$(CCACHE) $(CC) $(LIB.CFLAGS) $(CFLAGS) $(CFLAGS.SO) $(LIB.INCLUDE) -o $@ -c $<
tmp/$(SYSTEM)/regal/shared/%.o: src/mongoose/%.c $(LIB.HEADERS)
@mkdir -p $(dir $@)
$(LOG_CC)$(CCACHE) $(CC) $(LIB.CFLAGS) $(CFLAGS) $(PICFLAG) $(CFLAGS.SO) $(LIB.INCLUDE) -o $@ -c $<
tmp/$(SYSTEM)/regal/static/%.o: src/md5/src/%.c $(LIB.HEADERS)
@mkdir -p $(dir $@)
$(LOG_CC)$(CCACHE) $(CC) $(LIB.CFLAGS) $(CFLAGS) $(CFLAGS.SO) $(LIB.INCLUDE) -o $@ -c $<
tmp/$(SYSTEM)/regal/shared/%.o: src/md5/src/%.c $(LIB.HEADERS)
@mkdir -p $(dir $@)
$(LOG_CC)$(CCACHE) $(CC) $(LIB.CFLAGS) $(CFLAGS) $(PICFLAG) $(CFLAGS.SO) $(LIB.INCLUDE) -o $@ -c $<
tmp/$(SYSTEM)/regal/static/%.o: src/jsonsl/%.c $(LIB.HEADERS)
@mkdir -p $(dir $@)
$(LOG_CC)$(CCACHE) $(CC) $(LIB.CFLAGS) $(CFLAGS) $(CFLAGS.SO) $(LIB.INCLUDE) -o $@ -c $<
tmp/$(SYSTEM)/regal/shared/%.o: src/jsonsl/%.c $(LIB.HEADERS)
@mkdir -p $(dir $@)
$(LOG_CC)$(CCACHE) $(CC) $(LIB.CFLAGS) $(CFLAGS) $(PICFLAG) $(CFLAGS.SO) $(LIB.INCLUDE) -o $@ -c $<
#
# RegalGLEW
#
GLEW.SRCS += src/glew/src/glew.c
GLEW.SRCS.NAMES := $(notdir $(GLEW.SRCS))
GLEW.OBJS := $(addprefix tmp/$(SYSTEM)/glew/shared/,$(GLEW.SRCS.NAMES))
GLEW.OBJS := $(GLEW.OBJS:.c=.o)
GLEW.DEPS := $(GLEW.OBJS:.o=.d)
GLEW.CFLAGS := -Isrc/glew/include -Isrc/glu/include -DGLEW_EXPORTS -DGLEW_BUILD -DGLEW_REGAL
GLEW.LIBS := -Llib/$(SYSTEM) -lRegal
GLEW.SHARED := libRegalGLEW.$(EXT.DYNAMIC)
GLEW.STATIC := libRegalGLEW.a
-include $(GLEW.DEPS)
glew.lib: lib/$(SYSTEM)/$(GLEW.STATIC)
ifeq ($(filter nacl%,$(SYSTEM)),)
glew.lib: lib/$(SYSTEM)/$(GLEW.SHARED)
endif
tmp/$(SYSTEM)/glew/shared/%.o: src/glew/src/%.c
@mkdir -p $(dir $@)
$(LOG_CC)$(CCACHE) $(CC) $(PICFLAG) $(GLEW.CFLAGS) $(CFLAGS) $(CFLAGS.SO) -o $@ -c $<
lib/$(SYSTEM)/$(GLEW.STATIC): $(GLEW.OBJS)
@mkdir -p $(dir $@)
$(LOG_AR)$(CCACHE) $(AR) cr $@ $(GLEW.OBJS)
ifneq ($(RANLIB),)
$(LOG_RANLIB)$(RANLIB) $@
endif
ifneq ($(STRIP),)
$(LOG_STRIP)$(STRIP) -x $@
endif
lib/$(SYSTEM)/$(GLEW.SHARED): $(GLEW.OBJS) lib/$(SYSTEM)/$(LIB.SHARED)
@mkdir -p $(dir $@)
$(LOG_LD)$(CCACHE) $(LD) $(LDFLAGS.EXTRA) $(LDFLAGS.DYNAMIC) -o $@ $(GLEW.OBJS) $(GLEW.LIBS) $(LIB.LDFLAGS)
ifneq ($(STRIP),)
$(LOG_STRIP)$(STRIP) -x $@
endif
#
# RegalGLU
#
GLU.SRCS := $(GLU.C) $(GLU.CXX)
GLU.SRCS.NAMES := $(notdir $(GLU.SRCS))
GLU.OBJS := $(addprefix tmp/$(SYSTEM)/glu/shared/,$(GLU.SRCS.NAMES))
GLU.OBJS := $(GLU.OBJS:.c=.o) $(GLU.OBJS:.cc=.o)
GLU.OBJS := $(filter %.o,$(GLU.OBJS))
GLU.DEPS := $(GLU.OBJS:.o=.d)
GLU.CFLAGS := -Isrc/glu/include -Isrc/glu/libnurbs/interface -Isrc/glu/libnurbs/internals -Isrc/glu/libnurbs/nurbtess
GLU.CFLAGS += -DLIBRARYBUILD
GLU.LIBS := -Llib/$(SYSTEM) -lRegal
GLU.LIBS += -pthread -lm
GLU.SHARED := libRegalGLU.$(EXT.DYNAMIC)
GLU.STATIC := libRegalGLU.a
-include $(GLU.DEPS)
glu.lib: lib/$(SYSTEM)/$(GLU.STATIC)
ifeq ($(filter nacl%,$(SYSTEM)),)
glu.lib: lib/$(SYSTEM)/$(GLU.SHARED)
endif
tmp/$(SYSTEM)/glu/shared/%.o: src/glu/libtess/%.c
@mkdir -p $(dir $@)
$(LOG_CC)$(CCACHE) $(CC) $(PICFLAG) $(GLU.CFLAGS) $(CFLAGS) $(CFLAGS.SO) -o $@ -c $<
tmp/$(SYSTEM)/glu/shared/%.o: src/glu/libutil/%.c
@mkdir -p $(dir $@)
$(LOG_CC)$(CCACHE) $(CC) $(PICFLAG) $(GLU.CFLAGS) $(CFLAGS) $(CFLAGS.SO) -o $@ -c $<
tmp/$(SYSTEM)/glu/shared/%.o: src/glu/libnurbs/interface/%.cc
@mkdir -p $(dir $@)
$(LOG_CXX)$(CCACHE) $(CC) $(PICFLAG) $(GLU.CFLAGS) $(CFLAGS) $(CFLAGS.SO) -o $@ -c $<
tmp/$(SYSTEM)/glu/shared/%.o: src/glu/libnurbs/internals/%.cc
@mkdir -p $(dir $@)
$(LOG_CXX)$(CCACHE) $(CC) $(PICFLAG) $(GLU.CFLAGS) $(CFLAGS) $(CFLAGS.SO) -o $@ -c $<
tmp/$(SYSTEM)/glu/shared/%.o: src/glu/libnurbs/nurbtess/%.cc
@mkdir -p $(dir $@)
$(LOG_CXX)$(CCACHE) $(CC) $(PICFLAG) $(GLU.CFLAGS) $(CFLAGS) $(CFLAGS.SO) -o $@ -c $<
lib/$(SYSTEM)/$(GLU.SHARED): $(GLU.OBJS) lib/$(SYSTEM)/$(LIB.SHARED)
@mkdir -p $(dir $@)
$(LOG_LD)$(CCACHE) $(LD) $(LDFLAGS.EXTRA) $(LDFLAGS.DYNAMIC) $(GLU.LIBS) $(LIB.LDFLAGS) -o $@ $(GLU.OBJS)
ifneq ($(STRIP),)
$(LOG_STRIP)$(STRIP) -x $@
endif
lib/$(SYSTEM)/$(GLU.STATIC): $(GLU.OBJS)
@mkdir -p $(dir $@)
$(LOG_AR)$(CCACHE) $(AR) cr $@ $(GLU.OBJS)
ifneq ($(RANLIB),)
$(LOG_RANLIB)$(RANLIB) $@
endif
ifneq ($(STRIP),)
$(LOG_STRIP)$(STRIP) -x $@
endif
#
# RegalGLUT
#
GLUT.SRCS := $(GLUT.C)
GLUT.SRCS.NAMES := $(notdir $(GLUT.SRCS))
GLUT.OBJS := $(addprefix tmp/$(SYSTEM)/glut/shared/,$(GLUT.SRCS.NAMES))
GLUT.OBJS := $(GLUT.OBJS:.c=.o)
GLUT.DEPS := $(GLUT.OBJS:.o=.d)
GLUT.CFLAGS := -Isrc/glut/include -Isrc/glu/include -DBUILD_GLUT32 -DGLUT_BUILDING_LIB -DGLUT_STATIC
#GLUT.CFLAGS += -DCDECL=
GLUT.LIBS := -Llib/$(SYSTEM) -lRegal -lRegalGLU
GLUT.LIBS += -lX11 -lXmu -lXi
GLUT.LIBS += -pthread -lm
GLUT.SHARED := libRegalGLUT.$(EXT.DYNAMIC)
GLUT.STATIC := libRegalGLUT.a
-include $(GLUT.DEPS)
ifeq ($(filter nacl%,$(SYSTEM)),)
glut.lib: lib/$(SYSTEM)/$(GLUT.SHARED)
endif
tmp/$(SYSTEM)/glut/shared/%.o: src/glut/src/%.c
@mkdir -p $(dir $@)
$(LOG_CC)$(CCACHE) $(CC) $(GLUT.CFLAGS) $(CFLAGS) $(PICFLAG) $(CFLAGS.SO) -o $@ -c $<
lib/$(SYSTEM)/$(GLUT.SHARED): $(GLUT.OBJS) lib/$(SYSTEM)/$(GLU.SHARED) lib/$(SYSTEM)/$(LIB.SHARED)
$(LOG_LD)$(CCACHE) $(LD) $(LDFLAGS.EXTRA) $(LDFLAGS.DYNAMIC) -o $@ $(GLUT.OBJS) $(GLUT.LIBS)
ifneq ($(STRIP),)
$(LOG_STRIP)$(STRIP) -x $@
endif
#
# RegalGLEW glewinfo
#
GLEWINFO.SRCS += src/glew/src/glewinfo.c
GLEWINFO.SRCS.NAMES := $(notdir $(GLEWINFO.SRCS))
GLEWINFO.OBJS := $(addprefix tmp/$(SYSTEM)/glewinfo/static/,$(GLEWINFO.SRCS.NAMES))
GLEWINFO.OBJS := $(GLEWINFO.OBJS:.c=.o)
GLEWINFO.DEPS := $(GLEWINFO.OBJS:.o=.d)
GLEWINFO.CFLAGS := -Iinclude -Isrc/glew/include -DGLEW_REGAL -DGLEW_NO_GLU
GLEWINFO.LIBS += -Llib/$(SYSTEM) -lRegal $(LDFLAGS.X11) -lRegalGLEW $(LDFLAGS.GLUT) $(LDFLAGS.GLU) $(LDFLAGS.AGL)
-include $(GLEWINFO.DEPS)
ifneq ($(filter linux%,$(SYSTEM)),)
GLEWINFO.LIBS += -lX11
endif
tmp/$(SYSTEM)/glewinfo/static/%.o: src/glew/src/%.c
@mkdir -p $(dir $@)
$(LOG_CC)$(CCACHE) $(CC) $(GLEWINFO.CFLAGS) $(CFLAGS) $(CFLAGS.SO) -o $@ -c $<
bin/$(SYSTEM)/glewinfo: $(GLEWINFO.OBJS) lib/$(SYSTEM)/$(LIB.SHARED) lib/$(SYSTEM)/$(GLEW.SHARED)
@mkdir -p $(dir $@)
$(LOG_LD)$(CCACHE) $(LD) $(LDFLAGS.EXTRA) -o $@ $(GLEWINFO.OBJS) $(GLEWINFO.LIBS) $(LIB.LDFLAGS)
ifneq ($(STRIP),)
$(LOG_STRIP)$(STRIP) -x $@
endif
# GLUT and GLU dependency for non-Nacl, non-Mac
ifeq ($(filter nacl%,$(SYSTEM)),)
ifeq ($(filter darwin%,$(SYSTEM)),)
bin/$(SYSTEM)/glewinfo: lib/$(SYSTEM)/$(GLUT.SHARED) lib/$(SYSTEM)/$(GLU.SHARED)
endif
endif
# Examples
ifneq ($(filter nacl%,$(SYSTEM)),)
regal.bin: bin/$(SYSTEM)/nacl$(BIN_EXTENSION) examples/nacl/nacl.nmf
else
regal.bin: bin/$(SYSTEM)/glewinfo bin/$(SYSTEM)/dreamtorus bin/$(SYSTEM)/tiger bin/$(SYSTEM)/regaltest$(BIN_EXTENSION)
endif
#
# dreamtorus
#
DREAMTORUS.SRCS += examples/dreamtorus/src/render.cpp
DREAMTORUS.SRCS += examples/dreamtorus/glut/code/main.cpp
DREAMTORUS.SRCS.NAMES := $(notdir $(DREAMTORUS.SRCS))
DREAMTORUS.OBJS := $(addprefix tmp/$(SYSTEM)/dreamtorus/static/,$(DREAMTORUS.SRCS.NAMES))
DREAMTORUS.OBJS := $(DREAMTORUS.OBJS:.cpp=.o)
DREAMTORUS.DEPS := $(DREAMTORUS.DEPS:.o=.d)
DREAMTORUS.CFLAGS := -Iinclude -Iexamples/dreamtorus/src
DREAMTORUS.LIBS += -Llib/$(SYSTEM) $(LDFLAGS.GLUT) $(LDFLAGS.GLU) -lRegal $(LDFLAGS.X11)
DREAMTORUS.LIBS += -lm -pthread
-include $(DREAMTORUS.DEPS)
tmp/$(SYSTEM)/dreamtorus/static/%.o: examples/dreamtorus/src/%.cpp
@mkdir -p $(dir $@)
$(LOG_CXX)$(CCACHE) $(CC) $(DREAMTORUS.CFLAGS) $(CFLAGS) $(CFLAGS.SO) -o $@ -c $<
tmp/$(SYSTEM)/dreamtorus/static/%.o: examples/dreamtorus/glut/code/%.cpp
@mkdir -p $(dir $@)
$(LOG_CXX)$(CCACHE) $(CC) $(DREAMTORUS.CFLAGS) $(CFLAGS) $(CFLAGS.SO) -o $@ -c $<
bin/$(SYSTEM)/dreamtorus: $(DREAMTORUS.OBJS) lib/$(SYSTEM)/$(LIB.SHARED)
@mkdir -p $(dir $@)
$(LOG_LD)$(CCACHE) $(LD) $(LDFLAGS.EXTRA) -o $@ $(DREAMTORUS.OBJS) $(DREAMTORUS.LIBS) $(LIB.LDFLAGS)
ifneq ($(STRIP),)
$(LOG_STRIP)$(STRIP) -x $@
endif
# dreamtorus GLUT and GLU dependency for non-Mac, non-Nacl builds
ifeq ($(filter nacl%,$(SYSTEM)),)
ifeq ($(filter darwin%,$(SYSTEM)),)
bin/$(SYSTEM)/dreamtorus: lib/$(SYSTEM)/$(GLUT.SHARED) lib/$(SYSTEM)/$(GLU.SHARED)
endif
endif
#
# NaCl example
#
NACL.SRCS += examples/nacl/main.c
NACL.SRCS.NAMES := $(notdir $(NACL.SRCS))
NACL.OBJS := $(addprefix tmp/$(SYSTEM)/nacl/static/,$(NACL.SRCS.NAMES))
NACL.OBJS := $(NACL.OBJS:.c=.o)
NACL.CFLAGS := -Iinclude
NACL.LIBS += -Llib/$(SYSTEM) -lRegal
NACL.LIBS += -lpng -lz -lm -pthread -lppapi -lppapi_gles2 -lstdc++
tmp/$(SYSTEM)/nacl/static/%.o: examples/nacl/%.c
@mkdir -p $(dir $@)
$(LOG_CC)$(CC) $(CFLAGS) -std=gnu99 $(NACL.CFLAGS) $(CFLAGS.SO) -o $@ -c $<
bin/$(SYSTEM)/nacl$(BIN_EXTENSION): lib/$(SYSTEM)/$(LIB.STATIC) $(NACL.OBJS)
@mkdir -p $(dir $@)
$(LOG_LD)$(LD) $(LDFLAGS.EXTRA) -o $@ $(NACL.OBJS) $(NACL.LIBS)
ifneq ($(STRIP),)
$(LOG_STRIP)$(STRIP) -x $@
endif
examples/nacl/nacl.nmf: bin/$(SYSTEM)/nacl$(BIN_EXTENSION)
$(NACL_SDK_ROOT)/tools/create_nmf.py -o $@ bin/$(SYSTEM)/nacl*.nexe -s examples/nacl
#
# tiger
#
TIGER.SRCS += examples/tiger/nvpr_tiger.c
TIGER.SRCS += examples/tiger/tiger.c
TIGER.SRCS += examples/tiger/xform.c
TIGER.SRCS.NAMES := $(notdir $(TIGER.SRCS))
TIGER.OBJS := $(addprefix tmp/$(SYSTEM)/tiger/static/,$(TIGER.SRCS.NAMES))
TIGER.OBJS := $(TIGER.OBJS:.c=.o)
TIGER.DEPS := $(TIGER.DEPS:.o=.d)
TIGER.CFLAGS := -Iinclude -DGLEW_NO_GLU
TIGER.LIBS += -Llib/$(SYSTEM) -lRegalGLEW $(LDFLAGS.GLUT) $(LDFLAGS.GLU) -lRegal $(LDFLAGS.X11)
TIGER.LIBS += -lm -pthread
-include $(TIGER.DEPS)
tmp/$(SYSTEM)/tiger/static/%.o: examples/tiger/%.c
@mkdir -p $(dir $@)
$(LOG_CC)$(CCACHE) $(CC) $(TIGER.CFLAGS) $(CFLAGS) $(CFLAGS.SO) -o $@ -c $<
bin/$(SYSTEM)/tiger: $(TIGER.OBJS) lib/$(SYSTEM)/$(GLEW.SHARED) lib/$(SYSTEM)/$(LIB.SHARED) lib/$(SYSTEM)/$(GLEW.SHARED)
@mkdir -p $(dir $@)
$(LOG_LD)$(CCACHE) $(LD) $(LDFLAGS.EXTRA) -o $@ $(TIGER.OBJS) $(TIGER.LIBS)
ifneq ($(STRIP),)
$(LOG_STRIP)$(STRIP) -x $@
endif
# GLUT and GLU dependency for non-Nacl, non-Mac
ifeq ($(filter nacl%,$(SYSTEM)),)
ifeq ($(filter darwin%,$(SYSTEM)),)
bin/$(SYSTEM)/tiger: lib/$(SYSTEM)/$(GLUT.SHARED) lib/$(SYSTEM)/$(GLU.SHARED)
endif
endif
######################################
#
# googletest + googlemock
#
GTEST.SRCS += src/googletest/src/gtest-all.cc
GTEST.SRCS += src/googlemock/src/gmock-all.cc
GTEST.SRCS.NAMES := $(notdir $(GTEST.SRCS))
GTEST.OBJS := $(addprefix tmp/$(SYSTEM)/gtest/static/,$(GTEST.SRCS.NAMES))
GTEST.OBJS := $(GTEST.OBJS:.cc=.o)
GTEST.DEPS := $(GTEST.OBJS:.o=.d)
GTEST.CFLAGS := -Isrc/googletest/include -Isrc/googletest -Isrc/googlemock/include -Isrc/googlemock
GTEST.STATIC := libgtest.a
-include $(GTEST.DEPS)
tmp/$(SYSTEM)/gtest/static/gtest-all.o: src/googletest/src/gtest-all.cc
@mkdir -p $(dir $@)
$(LOG_CXX)$(CCACHE) $(CC) $(GTEST.CFLAGS) $(CFLAGS) $(CFLAGS.SO) -o $@ -c $<
tmp/$(SYSTEM)/gtest/static/gmock-all.o: src/googlemock/src/gmock-all.cc
@mkdir -p $(dir $@)
$(LOG_CXX)$(CCACHE) $(CC) $(GTEST.CFLAGS) $(CFLAGS) $(CFLAGS.SO) -o $@ -c $<
lib/$(SYSTEM)/$(GTEST.STATIC): $(GTEST.OBJS)
@mkdir -p $(dir $@)
$(LOG_AR)$(CCACHE) $(AR) cr $@ $(GTEST.OBJS)
ifneq ($(RANLIB),)
$(LOG_RANLIB)$(RANLIB) $@
endif
ifneq ($(STRIP),)
$(LOG_STRIP)$(STRIP) -x $@
endif
#
# regaltest
#
REGALTEST.SRCS += $(REGALTEST.CXX)
REGALTEST.SRCS.NAMES := $(notdir $(REGALTEST.SRCS))
REGALTEST.OBJS := $(addprefix tmp/$(SYSTEM)/regal_tests/static/,$(REGALTEST.SRCS.NAMES))
REGALTEST.OBJS := $(REGALTEST.OBJS:.cpp=.o)
REGALTEST.DEPS := $(REGALTEST.DEPS:.o=.d)
REGALTEST.CFLAGS := -Isrc/googletest/include -Isrc/googlemock/include -Isrc/regal -Isrc/boost
REGALTEST.LIBS := -Llib/$(SYSTEM) -lgtest lib/$(SYSTEM)/$(LIB.STATIC) $(LDFLAGS.X11) -lm
ifeq ($(filter nacl%,$(SYSTEM)),)
REGALTEST.LIBS += -ldl
else
REGALTEST.LIBS += -lnacl_io
endif
-include $(REGALTEST.DEPS)
tmp/$(SYSTEM)/regal_tests/static/%.o: tests/%.cpp
@mkdir -p $(dir $@)
$(LOG_CXX)$(CCACHE) $(CC) $(LIB.CFLAGS) $(REGALTEST.CFLAGS) $(CFLAGS) $(CFLAGS.SO) -o $@ -c $<
bin/$(SYSTEM)/regaltest$(BIN_EXTENSION): $(REGALTEST.OBJS) lib/$(SYSTEM)/$(GTEST.STATIC) lib/$(SYSTEM)/$(LIB.STATIC) lib/$(SYSTEM)/$(LIBPNG.STATIC) lib/$(SYSTEM)/$(ZLIB.STATIC)
@mkdir -p $(dir $@)
$(LOG_LD)$(CCACHE) $(LD) $(LDFLAGS.EXTRA) -o $@ $(REGALTEST.OBJS) $(REGALTEST.LIBS) $(LIB.LIBS) $(LIB.LDFLAGS)
ifneq ($(STRIP),)
$(LOG_STRIP)$(STRIP) -x $@
endif
ifneq ($(NACL_ARCH),arm)
test: bin/$(SYSTEM)/regaltest$(BIN_EXTENSION)
@echo Running tests: $^
ifeq ($(filter nacl%,$(SYSTEM)),)
$^
else
"$(NACL_SEL_LDR)" -a -B "$(NACL_IRT)" -- $^
endif
endif
######################################
clean:
$(RM) -r tmp/$(SYSTEM)
$(RM) -r lib/$(SYSTEM)
$(RM) -r bin/$(SYSTEM)
clobber:
$(RM) -r tmp
$(RM) -r lib
$(RM) -r bin
.PHONY: export test all
.PHONY: regal.lib regal.bin
.PHONY: zlib.lib libpng.lib glew.lib glu.lib glut.lib
.PHONY: clean clobber