-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
298 lines (230 loc) · 8.41 KB
/
Makefile
File metadata and controls
298 lines (230 loc) · 8.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
SHELL = bash
PROJNM = cppproj
AND32GXX = arm-linux-gnueabihf-g++
AND64GXX = aarch64-linux-gnu-g++
SRCDIR = src
INCDIR = $(SRCDIR)/include
LIBDIR = $(SRCDIR)/lib
DBGDIR = debug
DBGDYNDIR = $(DBGDIR)/dynamic
DBGSTCDIR = $(DBGDIR)/static
RELDIR = release
RELDYNDIR = $(RELDIR)/dynamic
RELSTCDIR = $(RELDIR)/static
TSTDIR = test
TSTDYNDIR = $(TSTDIR)/dynamic
TSTSTCDIR = $(TSTDIR)/static
ANDDIR = android
ANDDYNDIR = $(ANDDIR)/dynamic
ANDDYNDIR32 = $(ANDDYNDIR)/32
ANDDYNDIR64 = $(ANDDYNDIR)/64
ANDSTCDIR = $(ANDDIR)/static
ANDSTCDIR32 = $(ANDSTCDIR)/32
ANDSTCDIR64 = $(ANDSTCDIR)/64
MAINNM = main
MAINEX = cpp
MAINFL = $(MAINNM).$(MAINEX)
SRCFLS = $(wildcard $(SRCDIR)/*.cpp)
OBJSRC = $(wildcard $(INCDIR)/*.cpp)
OBJOBJ = $(subst include,lib,$(patsubst %.cpp,%.o,$(OBJSRC)))
DBGDYN = $(DBGDYNDIR)/$(PROJNM)
DBGSTC = $(DBGSTCDIR)/$(PROJNM)
TGTDYN = $(RELDYNDIR)/$(PROJNM)
TGTSTC = $(RELSTCDIR)/$(PROJNM)
TSTDYN = $(TSTDYNDIR)/$(PROJNM)
TSTSTC = $(TSTSTCDIR)/$(PROJNM)
ANDDYN32 = $(ANDDYNDIR32)/$(PROJNM)
ANDDYN64 = $(ANDDYNDIR64)/$(PROJNM)
ANDSTC32 = $(ANDSTCDIR32)/$(PROJNM)
ANDSTC64 = $(ANDSTCDIR64)/$(PROJNM)
TSTEXE = $(TSTDYN) # or $(TSTSTC)
TSTARG = # --help # $(TSTEXE)
# GTKINC = $(shell pkg-config gtkmm-3.0 --cflags)
# GTKLIB = $(shell pkg-config gtkmm-3.0 --libs)
LDFLAG = -I$(INCDIR) -O3 -std=c++20
ANDFLG = $(LDFLAG) -march=armv8.5-a
LDLIBS = -L$(LIBDIR) -l$(PROJNM)
DBGFLG = -ggdb -Wall -Wextra -std=c++20
SNFLGS = -fsanitize=undefined \
-fno-sanitize-recover=all -fsanitize=float-divide-by-zero \
-fsanitize=float-cast-overflow -fno-sanitize=null \
-fno-sanitize=alignment -std=c++20
SNFLGD = $(SNFLGS) -fsanitize=address
#STFLAG = -static -static-libgcc -static-libstdc++
STFLAG = -static
PCHFIL = $(INCDIR)/$(PROJNM).h
all: releasedynamicall
pch:
@echo Precompile headers
$(CXX) $(PCHFIL)
releasedynamic: builddirectories
@echo Building dynamic executable
$(CXX) $(GTKINC) $(LDFLAG) $(SRCFLS) -o $(TGTDYN) $(LDLIBS) $(GTKLIB)
strip $(TGTDYN)
releasedynamicall: cleanreleasedynamic builddirectories pch buildlibslinux
@echo Building dynamic executable
$(CXX) $(GTKINC) $(LDFLAG) $(SRCFLS) -o $(TGTDYN) $(LDLIBS) $(GTKLIB)
strip $(TGTDYN)
releasestaticall: cleanreleasestatic builddirectories pch buildlibslinux
@echo Building static executable
$(CXX) $(GTKINC) $(STFLAG) $(LDFLAG) $(SRCFLS) -o $(TGTSTC) $(LDLIBS) $(GTKLIB)
strip $(TGTSTC)
releasestatic: builddirectories
@echo Building static executable
$(CXX) $(GTKINC) $(STFLAG) $(LDFLAG) $(SRCFLS) -o $(TGTSTC) $(LDLIBS) $(GTKLIB)
strip $(TGTSTC)
androidall: androidstaticall androiddynamicall
androidstaticall: android32staticall android64staticall
android32staticall: cleanandroid32static builddirectories pch buildallobjectsandroidarm32 buildarchivelinux
@echo Building static Android 32 bit executable
$(AND32GXX) -static $(ANDFLG) $(SRCFLS) -o $(ANDSTC32).arm32 $(LDLIBS)
android32static: cleanandroid32static builddirectories
@echo Building static Android 32 bit executable
$(AND32GXX) -static $(ANDFLG) $(SRCFLS) -o $(ANDSTC32) $(LDLIBS)
android64staticall: cleanandroid64static builddirectories pch buildallobjectsandroidaarch64 buildarchivelinux
@echo Building static Android 64 bit executable
$(AND64GXX) $(STFLAG) $(ANDFLG) $(SRCFLS) -o $(ANDSTC64).aarch64 $(LDLIBS)
android64static: cleanandroid64static builddirectories
@echo Building static Android 64 bit executable
$(AND64GXX) -static $(ANDFLG) $(SRCFLS) -o $(ANDSTC64) $(LDLIBS)
androiddynamicall: android32dynamicall android64dynamicall
android32dynamicall: cleanandroid32dynamic builddirectories pch
@echo Building Android 32 bit executable
$(AND32GXX) $(ANDFLG) $(SRCFLS) -o $(ANDDYN32) $(LDLIBS)
android32dynamic: cleanandroid32dynamic builddirectories
@echo Building Android 32 bit executable
$(AND32GXX) $(ANDFLG) $(SRCFLS) -o $(ANDDYN32) $(LDLIBS)
android64dynamicall: cleanandroid64dynamic builddirectories pch
@echo Building Android 64 bit executable
$(AND64GXX) $(ANDFLG) $(SRCFLS) -o $(ANDDYN64) $(LDLIBS)
android64dynamic: cleanandroid64dynamic builddirectories
@echo Building Android 64 bit executable
$(AND64GXX) $(ANDFLG) $(SRCFLS) -o $(ANDDYN64) $(LDLIBS)
debugdynamicall: cleandebugdynamic builddirectories pch buildallobjectslinux buildarchivelinux
@echo Building debug executable
$(CXX) $(GTKINC) -I$(INCDIR) -std=c++20 $(DBGFLG) $(SRCFLS) -o $(DBGDYN) $(LDLIBS) $(GTKLIB)
debugdynamic: builddirectories
@echo Building debug executable
$(CXX) $(GTKINC) -I$(INCDIR) $(DBGFLG) $(SRCFLS) -o $(DBGDYN) $(LDLIBS) $(GTKLIB)
debugstaticall: cleandebugstatic builddirectories pch buildlibslinux
@echo Building debug executable
$(CXX) $(STFLAG) $(GTKINC) -I$(INCDIR) -std=c++20 $(DBGFLG) $(SRCFLS) -o $(DBGSTC) $(LDLIBS) $(GTKLIB)
debugstatic: builddirectories
@echo Building debug executable
$(CXX) $(STFLAG) $(GTKINC) -I$(INCDIR) $(DBGFLG) $(SRCFLS) -o $(DBGSTC) $(GTKLIB) $(LDLIBS) $(GTKLIB)
debugbuilds: debugdynamic debugstatic
releasebuilds: releasedynamic releasestatic
allbuilds: debugbuilds releasebuilds
#.PHONY: all test clean
test:
@echo Running test of $(TSTEXE)
./$(TSTEXE) $(TSTARG)
buildlibslinux: buildallobjectslinux buildarchivelinux
buildlibsandroidarm32: buildallobjectsiandroidarm32 buildarchivelinux
buildlibsandroidaarch64: buildallobjectsandroidaarch64 buildarchivelinux
buildallobjectslinux: cleanobjects
@echo Building object files from $(INCDIR) to $(LIBDIR)
$(shell IFS=$(echo -en "\n\b") array=( $(OBJSRC) );\
for file in "$${array[@]}";do \
lib=$${file//include/lib}; \
lib=$${lib//.cpp/.o}; \
$(CXX) $(GTKINC) $(LDFLAG) -c $${file} -o $${lib} $(LDLIBS) $(GTKLIB); \
done \
)
buildallobjectsandroidarm32: cleanobjects
@echo Building object files from $(INCDIR) to $(LIBDIR)
$(shell IFS=$(echo -en "\n\b") array=( $(OBJSRC) );\
for file in "$${array[@]}";do \
lib=$${file//include/lib}; \
lib=$${lib//.cpp/.o}; \
$(AND32GXX) $(STFLAG) $(GTKINC) $(LDFLAG) -c $${file} -o $${lib} $(LDLIBS) $(GTKLIB); \
done \
)
buildallobjectsandroidaarch64: cleanobjects
@echo Building object files from $(INCDIR) to $(LIBDIR)
$(shell IFS=$(echo -en "\n\b") array=( $(OBJSRC) );\
for file in "$${array[@]}";do \
lib=$${file//include/lib}; \
lib=$${lib//.cpp/.o}; \
$(AND64GXX) $(STFLAG) $(GTKINC) $(LDFLAG) -c $${file} -o $${lib} $(LDLIBS) $(GTKLIB); \
done \
)
buildarchivelinux: cleanarchive
@echo Building object archive
ar rcs $(LIBDIR)/lib$(PROJNM).a $(OBJOBJ)
builddirectories:
@echo Building project directories
$(shell \
mkdir -p $(INCDIR) $(LIBDIR) \
$(DBGDIR) $(RELDIR) $(ANDDIR) \
$(DBGDYNDIR) $(DBGSTCDIR) \
$(RELDYNDIR) $(RELSTCDIR) \
$(ANDDIR) $(ANDDYNDIR) \
$(ANDDYNDIR32) $(ANDDYNDIR64) \
$(ANDSTCDIR) $(ANDSTCDIR32) \
$(ANDSTCDIR64) \
)
builddirectoriestest:
mkdir -p $(TSTDYNDIR) $(TSTSTCDIR) $(TSTDIR)
cleandirectories:
@echo Cleaning project directories
$(shell \
rm -rf $(DBGDYNDIR) $(DBGSTCDIR) \
$(RELDYNDIR) $(RELSTCDIR) \
$(TSTDYNDIR) $(TSTSTCDIR) \
$(ANDDIR) $(ANDDYNDIR) \
$(ANDDYNDIR32) $(ANDDYNDIR64) \
$(ANDSTCDIR) $(ANDSTCDIR32) \
$(ANDSTCDIR64) \
$(DBGDIR) $(TSTDIR) $(RELDIR) $(ANDDIR) \
)
clean: cleanpch cleandirectories cleanrelease cleandebug cleantest cleanobjects cleanarchive cleanandroid
cleanpch:
rm -f $(PCHFIL).gch
cleanrelease: cleanreleasedynamic cleanreleasestatic
cleanreleasedynamic:
@echo Cleaning dynamic release
rm -f $(TGTDYN)
cleanreleasestatic:
@echo Cleaning static release
rm -f $(TGTSTC)
cleanandroid: cleanandroid32static cleanandroid64static cleanandroid32dynamic cleanandroid64dynamic
cleanandroid32static:
@echo Cleaning static Android 32 bit release
rm -f $(ANDSTC32)
cleanandroid64static:
@echo Cleaning static Android 64 bit release
rm -f $(ANDSTC64)
cleanandroid32dynamic:
@echo Cleaning dynamic Android 32 bit release
rm -f $(ANDDYN32)
cleanandroid64dynamic:
@echo Cleaning dynamic Android 64 bit release
rm -f $(ANDDYN64)
cleandebug: cleandebugdynamic cleandebugstatic
cleandebugdynamic:
@echo Cleaning dynamic debug
rm -f $(DBGDYN)
cleandebugstatic:
@echo Cleaning static debug
rm -f $(DBGSTC)
cleantest: cleantestdynamic cleanteststatic
cleantestdynamic:
@echo Cleaning dynamic test
rm -f $(TSTDYN)
cleanteststatic:
@echo Cleaning static test
rm -f $(TSTSTC)
cleanobjects:
@echo Cleaning objects
rm -f $(LIBDIR)/*.o
cleanarchive:
@echo Cleaning archive
rm -f $(LIBDIR)/*.a
install: installdynamic
installdynamic:
@echo Installing $(PROJNM)
cp -f $(TGTDYN) /usr/bin/$(PROJNM)
installstatic:
@echo Installing $(PROJNM)
cp -f $(TGTSTC) /usr/bin/$(PROJNM)