changeset 77:cc1c35357e39

Build system cleanups.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 14 Jan 2020 03:03:01 +0200
parents 9ee0edff3940
children 159cc5f14092
files Makefile Makefile.cross-mingw Makefile.gen dmrender.h
diffstat 4 files changed, 89 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Sun Jan 05 13:03:35 2020 +0200
+++ b/Makefile	Tue Jan 14 03:03:01 2020 +0200
@@ -1,5 +1,12 @@
+###
+### Generic UNIX targets
+###
+
 #CXXFLAGS ?= -DGL_GLEXT_PROTOTYPES
-BINEXT ?= 
+#LDFLAGS ?=
+
+BINPATH ?= ./
+BINEXT ?=
 OBJPATH ?= ./obj/unix/
 
 SDL_CFLAGS ?= $(shell pkg-config --cflags sdl2)
--- a/Makefile.cross-mingw	Sun Jan 05 13:03:35 2020 +0200
+++ b/Makefile.cross-mingw	Tue Jan 14 03:03:01 2020 +0200
@@ -1,4 +1,22 @@
+###
+### For Win32/Win64 version cross-compilation via MinGW
+### compiler suite under Linux/Unix
+###
+#
+# This Makefile assumes that you have MinGW installed under /usr
+# the way Debian MinGW packages do. It also assumes that you have
+# built/installed libogg, Tremor, libpng16, SDL2 ad SDL2_ttf under
+# __ /usr/local __ (not /usr!) in similar fashion.
+#
+# For differing configurations you will have to either edit this
+# file or alternatively provide make parameters, e.g.
+#
+# make -f Makefile.cross-mingw MINGW=64 BINTOOL_PREFIX=foo-bar-zoo
+#
+
 CXXFLAGS ?= 
+
+BINPATH ?= ./
 BINEXT ?= .exe
 
 
--- a/Makefile.gen	Sun Jan 05 13:03:35 2020 +0200
+++ b/Makefile.gen	Tue Jan 14 03:03:01 2020 +0200
@@ -1,25 +1,22 @@
+###
+### Compiler flags
+###
 CXXFLAGS += -O3 -W -Wall -std=c++11
 LDFLAGS += 
 CXXFLAGS += $(SDL_CFLAGS) $(GL_CFLAGS)
 
+
+###
+### Tools, paths and directories
+###
 MKDIR ?= mkdir
 MKDIR_P ?= $(MKDIR) -p
 BINPATH ?= ./
 
-ifneq ($(V),1)
-COMPILE_C_OBJ = @if test ! -d $(OBJPATH); then $(MKDIR_P) $(OBJPATH); fi && echo " CC $<" && $(CC) $(CFLAGS) -c -o $@ $<
-COMPILE_CXX_OBJ = @if test ! -d $(OBJPATH); then $(MKDIR_P) $(OBJPATH); fi && echo " CXX $<" && $(CXX) $(CXXFLAGS) -c -o $@ $<
-LINK_C_BIN = @if test ! -d $(BINPATH); then $(MKDIR_P) $(BINPATH); fi && echo " LINK $@" && $(CC) -o $@ $(filter %.o %.a,$+)
-LINK_CXX_BIN = @if test ! -d $(BINPATH); then $(MKDIR_P) $(BINPATH); fi && echo " LINK $@" && $(CXX) -o $@ $(filter %.o %.a,$+)
-LINK_STATIC_LIB = @echo " AR $@" && $(AR) cru $@ $(filter %.o,$+) && $(RANLIB) $@
-else
-COMPILE_C_OBJ = @if test ! -d $(OBJPATH); then $(MKDIR_P) $(OBJPATH); fi && echo "$(CC) $(CFLAGS) -c -o $@ $<" && $(CC) $(CFLAGS) -c -o $@ $<
-COMPILE_CXX_OBJ = @if test ! -d $(OBJPATH); then $(MKDIR_P) $(OBJPATH); fi && echo "$(CXX) $(CXXFLAGS) -c -o $@ $<" && $(CXX) $(CXXFLAGS) -c -o $@ $<
-LINK_C_BIN = @if test ! -d $(BINPATH); then $(MKDIR_P) $(BINPATH); fi && echo "$(CC) -o $@ $(filter %.o %.a,$+)" && $(CC) -o $@ $(filter %.o %.a,$+)
-LINK_CXX_BIN = @if test ! -d $(BINPATH); then $(MKDIR_P) $(BINPATH); fi && echo "$(CXX) -o $@ $(filter %.o %.a,$+)" && $(CXX) -o $@ $(filter %.o %.a,$+)
-LINK_STATIC_LIB = @echo "$(AR) cru $@ $(filter %.o,$+)" && $(AR) cru $@ $(filter %.o,$+) && echo "$(RANLIB) $@" && $(RANLIB) $@
-endif
 
+###
+### Main targets and objects
+###
 BINARIES = gldragon ply2bin
 
 TARGETS += \
@@ -32,7 +29,40 @@
 
 
 ###
-### Target rules
+### Functions and compilation/link commands
+###
+ifneq ($(V),1)
+DO_CMD=/bin/echo -E " $(1) $(2)" && $(3)
+else
+DO_CMD=/bin/echo -E $(3) && $(3)
+endif
+DO_MKDIR=if test ! -d "$(1)"; then mkdir -p "$(1)"; fi
+
+
+COMPILE_C_OBJ = \
+	@$(call DO_MKDIR,$(OBJPATH)) ; \
+	$(call DO_CMD,CC,$<,$(CC) $(CFLAGS) $(DM_CFLAGS) -c -o $@ $< $(1))
+
+LINK_C_BIN = \
+	@$(call DO_MKDIR,$(BINPATH)) ; \
+	$(call DO_CMD,LINK,$@,$(CC) -o $@ $(filter %.o %.a,$+) $(LDFLAGS) $(1))
+
+COMPILE_CXX_OBJ = \
+	@$(call DO_MKDIR,$(OBJPATH)) ; \
+	$(call DO_CMD,CXX,$<,$(CXX) $(CXXFLAGS) $(DM_CFLAGS) -c -o $@ $< $(1))
+
+LINK_CXX_BIN = \
+	@$(call DO_MKDIR,$(BINPATH)) ; \
+	$(call DO_CMD,LINK,$@,$(CXX) -o $@ $(filter %.o %.a,$+) $(LDFLAGS) $(1))
+
+LINK_STATIC_LIB = \
+	@$(call DO_MKDIR,$(OBJPATH)) ; \
+	$(call DO_CMD,AR,$@ $(filter %.o,$+),$(AR) cru $@ $(filter %.o,$+)) ; \
+	$(call DO_CMD,RANLIB,$@,$(RANLIB) $@)
+
+
+###
+### Generic target rules
 ###
 all: $(NOBUILD_TARGETS) $(NOINST_TARGETS) $(TARGETS)
 
--- a/dmrender.h	Sun Jan 05 13:03:35 2020 +0200
+++ b/dmrender.h	Tue Jan 14 03:03:01 2020 +0200
@@ -100,6 +100,25 @@
         return true;
     }
 
+    virtual bool deleteModelShaders(DMModel &model)
+    {
+        (void) model;
+        return false;
+    }
+
+    virtual bool deleteSceneShaders(DMSimpleScene &scene)
+    {
+        if (useShaders)
+        {
+            for (DMModel &model : scene.models)
+            {
+                if (!deleteModelShaders(model))
+                    return false;
+            }
+        }
+        return true;
+    }
+
     virtual bool setupLight(const int n, DMLight &light)
     {
         (void) n;