comparison Makefile.common @ 309:18bef142108d

Rename Makefile.gen to Makefile.common
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 03 Aug 2023 12:49:58 +0300
parents Makefile.gen@52f0da883469
children 8541509ff8a0
comparison
equal deleted inserted replaced
308:abebda3ec9cd 309:18bef142108d
1 ###
2 ### Generic
3 ###
4 QT_MODULES = Core Gui Widgets Sql PrintSupport Network
5
6 QT_FLAGS += -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DUNICODE \
7 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB \
8 -DQT_SQL_LIB -DQT_PRINTSUPPORT_LIB -DQT_NETWORK_LIB
9
10
11 ###
12 ### Compiler flags
13 ###
14 XCFLAGS += -g -pipe -W -Wall -Wextra
15
16 ifneq ($(ASAN),)
17 XCFLAGS += -fsanitize=address
18 XLDFLAGS += -lasan
19 else
20 XCFLAGS += -O2
21 endif
22
23 CFLAGS += -std=c11 $(XCFLAGS)
24 CXXFLAGS += -std=c++17 $(XCFLAGS)
25 LDFLAGS += $(XLDFLAGS)
26
27
28 ###
29 ### Tools, paths and directories
30 ###
31 ifneq ($(BINTOOL_PREFIX),)
32 CC = $(BINTOOL_PREFIX)gcc
33 CXX = $(BINTOOL_PREFIX)g++
34 AR = $(BINTOOL_PREFIX)ar
35 endif
36 RANLIB = $(BINTOOL_PREFIX)ranlib
37 WINDRES = $(BINTOOL_PREFIX)windres
38
39
40 INSTALL ?= install
41 MKDIR ?= mkdir
42 MKDIR_P ?= $(MKDIR) -p
43
44 # Qt tools
45 QT_RCC = $(QT_TOOL_PREFIX)rcc
46 QT_MOC = $(QT_TOOL_PREFIX)moc
47 QT_UIC = $(QT_TOOL_PREFIX)uic
48
49
50 ###
51 ### Main targets and objects
52 ###
53 APP_IMG=img/
54 APP_BIN=$(BINPATH)Syntilista$(BINEXT)
55
56 APP_HDRS=\
57 src/main.h \
58 src/util.h \
59 src/ui_viewtransactions.h \
60 src/ui_mainwindow.h \
61 src/ui_editperson.h \
62 src/ui_aboutwindow.h
63
64 APP_OBJS=\
65 main.o \
66 util.o \
67 editperson.o \
68 viewtransactions.o \
69 aboutwindow.o \
70 sqlmodels.o \
71 printing.o \
72 resources.o \
73 moc_main.o \
74 runguard.o
75
76 LOGO_SVG ?= kampuscafe4.svg
77 LOGO_SRC_PNG ?= CafeKampus_logo_FINAL_RGB.png
78
79 ICON_PNGS = icon-64.png icon-48.png icon-32.png icon-16.png
80 LOGO_PNG = logo.png
81 LOGO_SIZE = 256
82
83 APP_RESOURCES += $(addprefix $(APP_IMG),$(LOGO_PNG) $(ICON_PNGS)) \
84 COPYING.html
85
86 DISTCLEAN_TARGETS += $(addprefix $(APP_IMG),$(LOGO_PNG) $(ICON_PNGS))
87
88
89 # And target lists
90 TARGETS = $(APP_BIN)
91 NOBUILD_TARGETS +=
92 NOINST_TARGETS +=
93 CLEAN_TARGETS += icon.ico src/moc_*.cpp src/ui_*.h
94 DISTCLEAN_TARGETS +=
95
96
97 # Version
98 APP_VERSION := $(shell cat VERSION)
99 comma:= ,
100 APP_VERSION_COM := $(subst .,$(comma),$(APP_VERSION))
101 CXXFLAGS += -DAPP_VERSION=\"$(APP_VERSION)\"
102
103
104 ###
105 ### Functions and compilation/link commands
106 ###
107 ifneq ($(V),1)
108 DO_CMD=/bin/echo -E " $(1) $(2)" && $(3)
109 else
110 DO_CMD=/bin/echo -E $(3) && $(3)
111 endif
112 DO_MKDIR=if test ! -z "$(1)" -a ! -d "$(1)"; then /bin/echo -E " MKDIR $(1)"; mkdir -p "$(1)"; fi
113
114
115 COMPILE_C_OBJ = \
116 @$(call DO_MKDIR,$(OBJPATH)) ; \
117 $(call DO_CMD,CC,$<,$(CC) $(CFLAGS) $(DM_CFLAGS) -c -o $@ $< $(1))
118
119 LINK_C_BIN = \
120 @$(call DO_MKDIR,$(BINPATH)) ; \
121 $(call DO_CMD,LINK,$@,$(CC) -o $@ $(filter %.o %.a,$+) $(LDFLAGS) $(1))
122
123 COMPILE_CXX_OBJ = \
124 @$(call DO_MKDIR,$(OBJPATH)) ; \
125 $(call DO_CMD,CXX,$<,$(CXX) $(CXXFLAGS) $(DM_CFLAGS) -c -o $@ $< $(1))
126
127 LINK_CXX_BIN = \
128 @$(call DO_MKDIR,$(BINPATH)) ; \
129 $(call DO_CMD,LINK,$@,$(CXX) -o $@ $(filter %.o %.a,$+) $(LDFLAGS) $(1))
130
131 LINK_STATIC_LIB = \
132 @$(call DO_MKDIR,$(OBJPATH)) ; \
133 $(call DO_CMD,AR,$@ $(filter %.o,$+),$(AR) cru $@ $(filter %.o,$+)) ; \
134 $(call DO_CMD,RANLIB,$@,$(RANLIB) $@)
135
136
137 ###
138 ### Generic target rules
139 ###
140 all: $(NOBUILD_TARGETS) $(NOINST_TARGETS) $(TARGETS)
141
142
143 moc_predefs.h:
144 @echo "" > $(OBJPATH)dummy.cpp
145 @$(call DO_CMD,CXX,$@,$(CXX) $(CXXFLAGS) -dM -E -o $@ $(OBJPATH)dummy.cpp)
146
147 moc_%.cpp: %.h $(QT_MOC_RULES)
148 @$(call DO_CMD,$(QT_VERSION_PREFIX):MOC,$@ $<,$(QT_MOC) $(QT_FLAGS) $(QT_MOC_FLAGS) $(QT_INCLUDES) $< -o $@)
149
150 ui_%.h: %.ui
151 @$(call DO_CMD,$(QT_VERSION_PREFIX):UIC,$@ $<,$(QT_UIC) $(QT_UIC_FLAGS) $< -o $@)
152
153
154 $(OBJPATH)%.o: src/%.cpp src/%.h
155 $(call COMPILE_CXX_OBJ, $(QT_FLAGS) $(QT_INCLUDES))
156
157 $(OBJPATH)%.o: src/%.cpp
158 $(call COMPILE_CXX_OBJ, $(QT_FLAGS) $(QT_INCLUDES))
159
160
161 ###
162 ### Windows specific rules
163 ###
164 %.rc: %.rc.in icon.ico VERSION
165 @sed -e "s/@APP_VERSION@/$(APP_VERSION)/g;s/@APP_VERSION_COM@/$(APP_VERSION_COM)/g;s#@APP_EXE@#$(notdir $(APP_BIN))#g" < $< > $@
166
167 $(OBJPATH)%.o: src/%.rc
168 @$(call DO_CMD,WINDRES,$<,$(WINDRES) $< -O coff -o $@)
169
170
171 ###
172 ### Application rules
173 ###
174 ifneq ($(LOGO_SRC_SVG),)
175 $(APP_IMG)icon-%.png: $(APP_IMG)$(LOGO_SRC_SVG)
176 inkscape --export-area-page --export-type=png -w $(patsubst $(APP_IMG)icon-%.png,%,$@) -h $(patsubst $(APP_IMG)icon-%.png,%,$@) --export-filename="$@" "$<"
177
178 $(APP_IMG)$(LOGO_PNG): $(APP_IMG)$(LOGO_SRC_SVG)
179 inkscape --export-area-page --export-type=png -w $(LOGO_SIZE) -h $(LOGO_SIZE) --export-filename="$@" "$<"
180 else
181 $(APP_IMG)icon-%.png: $(APP_IMG)$(LOGO_SRC_PNG)
182 convert "$<" -scale "$(patsubst $(APP_IMG)icon-%.png,%,$@)x$(patsubst $(APP_IMG)icon-%.png,%,$@)" "$@"
183
184 $(APP_IMG)$(LOGO_PNG): $(APP_IMG)$(LOGO_SRC_PNG)
185 convert "$<" -scale "$(LOGO_SIZE)x$(LOGO_SIZE)" "$@"
186 endif
187
188 icon.ico: $(addprefix $(APP_IMG),$(ICON_PNGS))
189 @$(call DO_CMD,CONVERT,$+ -> $@,convert $+ $@)
190
191 src/%.cpp: src/%.qrc $(APP_RESOURCES)
192 @$(call DO_CMD,$(QT_VERSION_PREFIX):RCC,$@ $<,$(QT_RCC) -name "Syntilista" $< -o $@)
193
194 $(OBJPATH)main.o: src/main.cpp $(APP_HDRS) VERSION
195 $(call COMPILE_CXX_OBJ, $(QT_FLAGS) $(QT_INCLUDES))
196
197 $(APP_BIN): $(addprefix $(OBJPATH),$(APP_OBJS)) $(APP_DEP_LIBS) | $(APP_DEPS)
198 $(call LINK_CXX_BIN, $(APP_LIBS))
199
200
201 ###
202 ### Special targets
203 ###
204 clean:
205 -$(RM) $(TARGETS) $(NOINST_TARGETS) $(CLEAN_TARGETS) $(OBJPATH)*.o
206
207 distclean: clean
208 -$(RM) $(DISTCLEAN_TARGETS) *~ core *.core
209
210 .PHONY: clean distclean all