view Makefile.common @ 310:8541509ff8a0 default tip

Fix verbose build echos.
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 29 Feb 2024 21:49:20 +0200
parents 18bef142108d
children
line wrap: on
line source

###
### Generic
###
QT_MODULES = Core Gui Widgets Sql PrintSupport Network

QT_FLAGS += -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DUNICODE \
	-DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB \
	-DQT_SQL_LIB -DQT_PRINTSUPPORT_LIB -DQT_NETWORK_LIB


###
### Compiler flags
###
XCFLAGS += -g -pipe -W -Wall -Wextra

ifneq ($(ASAN),)
XCFLAGS += -fsanitize=address
XLDFLAGS += -lasan
else
XCFLAGS += -O2
endif

CFLAGS += -std=c11 $(XCFLAGS)
CXXFLAGS += -std=c++17 $(XCFLAGS)
LDFLAGS += $(XLDFLAGS)


###
### Tools, paths and directories
###
ifneq ($(BINTOOL_PREFIX),)
CC = $(BINTOOL_PREFIX)gcc
CXX = $(BINTOOL_PREFIX)g++
AR = $(BINTOOL_PREFIX)ar
endif
RANLIB = $(BINTOOL_PREFIX)ranlib
WINDRES = $(BINTOOL_PREFIX)windres


INSTALL ?= install
MKDIR ?= mkdir
MKDIR_P ?= $(MKDIR) -p

# Qt tools
QT_RCC = $(QT_TOOL_PREFIX)rcc
QT_MOC = $(QT_TOOL_PREFIX)moc
QT_UIC = $(QT_TOOL_PREFIX)uic


###
### Main targets and objects
###
APP_IMG=img/
APP_BIN=$(BINPATH)Syntilista$(BINEXT)

APP_HDRS=\
	src/main.h \
	src/util.h \
	src/ui_viewtransactions.h \
	src/ui_mainwindow.h \
	src/ui_editperson.h \
	src/ui_aboutwindow.h

APP_OBJS=\
	main.o \
	util.o \
	editperson.o \
	viewtransactions.o \
	aboutwindow.o \
	sqlmodels.o \
	printing.o \
	resources.o \
	moc_main.o \
	runguard.o

LOGO_SVG ?= kampuscafe4.svg
LOGO_SRC_PNG ?= CafeKampus_logo_FINAL_RGB.png

ICON_PNGS = icon-64.png icon-48.png icon-32.png icon-16.png
LOGO_PNG = logo.png
LOGO_SIZE = 256

APP_RESOURCES += $(addprefix $(APP_IMG),$(LOGO_PNG) $(ICON_PNGS)) \
	COPYING.html

DISTCLEAN_TARGETS += $(addprefix $(APP_IMG),$(LOGO_PNG) $(ICON_PNGS))


# And target lists
TARGETS = $(APP_BIN)
NOBUILD_TARGETS +=
NOINST_TARGETS += 
CLEAN_TARGETS += icon.ico src/moc_*.cpp src/ui_*.h
DISTCLEAN_TARGETS += 


# Version
APP_VERSION := $(shell cat VERSION)
comma:= ,
APP_VERSION_COM := $(subst .,$(comma),$(APP_VERSION))
CXXFLAGS += -DAPP_VERSION=\"$(APP_VERSION)\"


###
### 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)


moc_predefs.h:
	@echo "" > $(OBJPATH)dummy.cpp
	@$(call DO_CMD,CXX,$@,$(CXX) $(CXXFLAGS) -dM -E -o $@ $(OBJPATH)dummy.cpp)

moc_%.cpp: %.h $(QT_MOC_RULES)
	@$(call DO_CMD,$(QT_VERSION_PREFIX):MOC,$@ $<,$(QT_MOC) $(QT_FLAGS) $(QT_MOC_FLAGS) $(QT_INCLUDES) $< -o $@)

ui_%.h: %.ui
	@$(call DO_CMD,$(QT_VERSION_PREFIX):UIC,$@ $<,$(QT_UIC) $(QT_UIC_FLAGS) $< -o $@)


$(OBJPATH)%.o: src/%.cpp src/%.h
	$(call COMPILE_CXX_OBJ, $(QT_FLAGS) $(QT_INCLUDES))

$(OBJPATH)%.o: src/%.cpp
	$(call COMPILE_CXX_OBJ, $(QT_FLAGS) $(QT_INCLUDES))


###
### Windows specific rules
###
%.rc: %.rc.in icon.ico VERSION
	@sed -e "s/@APP_VERSION@/$(APP_VERSION)/g;s/@APP_VERSION_COM@/$(APP_VERSION_COM)/g;s#@APP_EXE@#$(notdir $(APP_BIN))#g" < $< > $@

$(OBJPATH)%.o: src/%.rc
	@$(call DO_CMD,WINDRES,$<,$(WINDRES) $< -O coff -o $@)


###
### Application rules
###
ifneq ($(LOGO_SRC_SVG),)
$(APP_IMG)icon-%.png: $(APP_IMG)$(LOGO_SRC_SVG)
	inkscape --export-area-page --export-type=png -w $(patsubst $(APP_IMG)icon-%.png,%,$@) -h $(patsubst $(APP_IMG)icon-%.png,%,$@) --export-filename="$@" "$<"

$(APP_IMG)$(LOGO_PNG): $(APP_IMG)$(LOGO_SRC_SVG)
	inkscape --export-area-page --export-type=png -w $(LOGO_SIZE) -h $(LOGO_SIZE) --export-filename="$@" "$<"
else
$(APP_IMG)icon-%.png: $(APP_IMG)$(LOGO_SRC_PNG)
	convert "$<" -scale "$(patsubst $(APP_IMG)icon-%.png,%,$@)x$(patsubst $(APP_IMG)icon-%.png,%,$@)" "$@"

$(APP_IMG)$(LOGO_PNG): $(APP_IMG)$(LOGO_SRC_PNG)
	convert "$<" -scale "$(LOGO_SIZE)x$(LOGO_SIZE)" "$@"
endif

icon.ico: $(addprefix $(APP_IMG),$(ICON_PNGS))
	@$(call DO_CMD,CONVERT,$+ -> $@,convert $+ $@)

src/%.cpp: src/%.qrc $(APP_RESOURCES)
	@$(call DO_CMD,$(QT_VERSION_PREFIX):RCC,$@ $<,$(QT_RCC) -name "Syntilista" $< -o $@)

$(OBJPATH)main.o: src/main.cpp $(APP_HDRS) VERSION
	$(call COMPILE_CXX_OBJ, $(QT_FLAGS) $(QT_INCLUDES))

$(APP_BIN): $(addprefix $(OBJPATH),$(APP_OBJS)) $(APP_DEP_LIBS) | $(APP_DEPS)
	$(call LINK_CXX_BIN, $(APP_LIBS))


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

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

.PHONY: clean distclean all