view Makefile.gen @ 100:8059aad101d1

Improve build system.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 25 Feb 2022 15:29:13 +0200
parents 22774e3f2a89
children
line wrap: on
line source

###
### Compiler flags
###
ifneq ($(ASAN),)
CXXFLAGS += -fsanitize=address
LDFLAGS += -lasan
else
ifneq ($(TSAN),)
CXXFLAGS += -fsanitize=thread
LDFLAGS += -ltsan
else
CXXFLAGS += -O3
LDFLAGS += 
endif
endif

CXXFLAGS += -g -W -Wall -std=c++11
CXXFLAGS += $(SDL_CFLAGS) $(GL_CFLAGS)


###
### Tools, paths and directories
###
MKDIR ?= mkdir
MKDIR_P ?= $(MKDIR) -p
BINPATH ?= ./


###
### Main targets and objects
###
BINARIES = gldragon ply2bin

TARGETS += \
	$(addprefix $(BINPATH),$(addsuffix $(BINEXT),$(BINARIES)))

NOBUILD_TARGETS +=
NOINST_TARGETS += 
CLEAN_TARGETS +=
DISTCLEAN_TARGETS += 


###
### 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 ! -z "$(1)" -a ! -d "$(1)"; then /bin/echo -E " MKDIR $(1)"; 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)


$(OBJPATH)dmglrender.o: dmglrender.cpp dmglrender.h dmglexts.h
	$(call COMPILE_CXX_OBJ,)

$(OBJPATH)%.o: %.cpp %.h
	$(call COMPILE_CXX_OBJ,)

$(OBJPATH)%.o: %.cpp
	$(call COMPILE_CXX_OBJ,)


$(BINPATH)gldragon$(BINEXT): $(addprefix $(OBJPATH), gldragon.o dmglrender.o dmscene.o dmply.o dmutil.o)
	$(call LINK_CXX_BIN, $(LDFLAGS) $(SDL_LDFLAGS) $(GL_LDFLAGS))

$(BINPATH)ply2bin$(BINEXT): $(addprefix $(OBJPATH), ply2bin.o dmscene.o dmply.o dmutil.o)
	$(call LINK_CXX_BIN, $(LDFLAGS) $(TOOL_LDFLAGS))


###
### Special targets
###
clean:
	-$(RM) $(TARGETS) $(NOINST_TARGETS) $(CLEAN_TARGETS) $(OBJPATH)*.o

distclean: clean
	-$(RM) $(DISTCLEAN_TARGETS) *~ core *.core

.PHONY: clean distclean all