comparison GNUmakefile @ 301:f04b4ee04db3

make: switch to GNU make
author David Demelier <markand@malikania.fr>
date Wed, 23 Jun 2021 22:41:34 +0200
parents
children f09c166fd4d4
comparison
equal deleted inserted replaced
300:3638b39ef2bf 301:f04b4ee04db3
1 #
2 # GNUmakefile -- GNU make for molko
3 #
4 # Copyright (c) 2020-2021 David Demelier <markand@malikania.fr>
5 #
6 # Permission to use, copy, modify, and/or distribute this software for any
7 # purpose with or without fee is hereby granted, provided that the above
8 # copyright notice and this permission notice appear in all copies.
9 #
10 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 #
18
19 CC= cc
20 CFLAGS= -O0 -g
21 AR= ar
22
23 # Don't use absolute paths except for PREFIX.
24 PREFIX= /usr/local
25 BINDIR= bin
26 LIBDIR= lib
27 DATADIR= share
28 LOCALEDIR= share/locale
29
30 # Compile time options.
31 NLS= 1
32
33 LIBMLK_SQLITE= extern/libsqlite/libmlk-sqlite.a
34 LIBMLK_SQLITE_SRCS= extern/libsqlite/sqlite3.c
35 LIBMLK_SQLITE_OBJS= ${LIBMLK_SQLITE_SRCS:.c=.o}
36 LIBMLK_SQLITE_DEPS= ${LIBMLK_SQLITE_SRCS:.c=.d}
37
38 LIBMLK_CORE= libmlk-core/libmlk-core.a
39 LIBMLK_CORE_SRCS= libmlk-core/core/action.c \
40 libmlk-core/core/alloc.c \
41 libmlk-core/core/animation.c \
42 libmlk-core/core/clock.c \
43 libmlk-core/core/core.c \
44 libmlk-core/core/drawable.c \
45 libmlk-core/core/error.c \
46 libmlk-core/core/event.c \
47 libmlk-core/core/font.c \
48 libmlk-core/core/game.c \
49 libmlk-core/core/image.c \
50 libmlk-core/core/maths.c \
51 libmlk-core/core/music.c \
52 libmlk-core/core/painter.c \
53 libmlk-core/core/panic.c \
54 libmlk-core/core/script.c \
55 libmlk-core/core/sound.c \
56 libmlk-core/core/sprite.c \
57 libmlk-core/core/state.c \
58 libmlk-core/core/sys.c \
59 libmlk-core/core/texture.c \
60 libmlk-core/core/trace.c \
61 libmlk-core/core/translate.c \
62 libmlk-core/core/util.c \
63 libmlk-core/core/window.c \
64 libmlk-core/core/zfile.c
65 LIBMLK_CORE_OBJS= ${LIBMLK_CORE_SRCS:.c=.o}
66 LIBMLK_CORE_DEPS= ${LIBMLK_CORE_SRCS:.c=.d}
67
68 LIBMLK_UI= libmlk-ui/libmlk-ui.a
69 LIBMLK_UI_SRCS= libmlk-ui/ui/align.c \
70 libmlk-ui/ui/button.c \
71 libmlk-ui/ui/checkbox.c \
72 libmlk-ui/ui/debug.c \
73 libmlk-ui/ui/frame.c \
74 libmlk-ui/ui/gridmenu.c \
75 libmlk-ui/ui/label.c \
76 libmlk-ui/ui/theme.c \
77 libmlk-ui/ui/ui.c
78 LIBMLK_UI_OBJS= ${LIBMLK_UI_SRCS:.c=.o}
79 LIBMLK_UI_DEPS= ${LIBMLK_UI_SRCS:.c=.d}
80 LIBMLK_UI_ASTS= libmlk-ui/assets/fonts/opensans-light.h \
81 libmlk-ui/assets/fonts/opensans-regular.h
82
83 LIBMLK_RPG= libmlk-rpg/libmlk-rpg.a
84 LIBMLK_RPG_SRCS= libmlk-rpg/rpg/battle-bar.c \
85 libmlk-rpg/rpg/battle-entity-state-attacking.c \
86 libmlk-rpg/rpg/battle-entity-state-blinking.c \
87 libmlk-rpg/rpg/battle-entity-state-moving.c \
88 libmlk-rpg/rpg/battle-entity-state-normal.c \
89 libmlk-rpg/rpg/battle-entity-state.c \
90 libmlk-rpg/rpg/battle-entity.c \
91 libmlk-rpg/rpg/battle-indicator.c \
92 libmlk-rpg/rpg/battle-message.c \
93 libmlk-rpg/rpg/battle-state-ai.c \
94 libmlk-rpg/rpg/battle-state-attacking.c \
95 libmlk-rpg/rpg/battle-state-check.c \
96 libmlk-rpg/rpg/battle-state-closing.c \
97 libmlk-rpg/rpg/battle-state-item.c \
98 libmlk-rpg/rpg/battle-state-lost.c \
99 libmlk-rpg/rpg/battle-state-menu.c \
100 libmlk-rpg/rpg/battle-state-opening.c \
101 libmlk-rpg/rpg/battle-state-selection.c \
102 libmlk-rpg/rpg/battle-state-sub.c \
103 libmlk-rpg/rpg/battle-state-victory.c \
104 libmlk-rpg/rpg/battle-state.c \
105 libmlk-rpg/rpg/battle.c \
106 libmlk-rpg/rpg/character.c \
107 libmlk-rpg/rpg/equipment.c \
108 libmlk-rpg/rpg/inventory.c \
109 libmlk-rpg/rpg/item.c \
110 libmlk-rpg/rpg/map-file.c \
111 libmlk-rpg/rpg/map.c \
112 libmlk-rpg/rpg/message.c \
113 libmlk-rpg/rpg/rpg.c \
114 libmlk-rpg/rpg/save.c \
115 libmlk-rpg/rpg/selection.c \
116 libmlk-rpg/rpg/spell.c \
117 libmlk-rpg/rpg/team.c \
118 libmlk-rpg/rpg/tileset-file.c \
119 libmlk-rpg/rpg/tileset.c \
120 libmlk-rpg/rpg/walksprite.c
121 LIBMLK_RPG_OBJS= ${LIBMLK_RPG_SRCS:.c=.o}
122 LIBMLK_RPG_DEPS= ${LIBMLK_RPG_SRCS:.c=.d}
123 LIBMLK_RPG_ASTS= libmlk-rpg/assets/sql/character-load.h \
124 libmlk-rpg/assets/sql/character-save.h \
125 libmlk-rpg/assets/sql/init.h \
126 libmlk-rpg/assets/sql/property-get.h \
127 libmlk-rpg/assets/sql/property-remove.h \
128 libmlk-rpg/assets/sql/property-set.h
129
130 LIBMLK_ADVENTURE= libmlk-adventure/libmlk-adventure.a
131 LIBMLK_ADVENTURE_SRCS= libmlk-adventure/adventure/action/chest.c \
132 libmlk-adventure/adventure/action/spawner.c \
133 libmlk-adventure/adventure/action/teleport.c \
134 libmlk-adventure/adventure/assets.c \
135 libmlk-adventure/adventure/character/black-cat.c \
136 libmlk-adventure/adventure/character/neth.c \
137 libmlk-adventure/adventure/dialog/save.c \
138 libmlk-adventure/adventure/item/potion.c \
139 libmlk-adventure/adventure/mapscene/mapscene.c \
140 libmlk-adventure/adventure/molko.c \
141 libmlk-adventure/adventure/spell/fire-minor.c \
142 libmlk-adventure/adventure/state/battle.c \
143 libmlk-adventure/adventure/state/continue.c \
144 libmlk-adventure/adventure/state/mainmenu.c \
145 libmlk-adventure/adventure/state/map.c \
146 libmlk-adventure/adventure/state/panic.c \
147 libmlk-adventure/adventure/state/splashscreen.c \
148 libmlk-adventure/adventure/trace_hud.c
149 LIBMLK_ADVENTURE_OBJS= ${LIBMLK_ADVENTURE_SRCS:.c=.o}
150 LIBMLK_ADVENTURE_DEPS= ${LIBMLK_ADVENTURE_SRCS:.c=.d}
151
152 # Not a real target, only headers.
153 LIBMLK_DATA_ASTS= libmlk-data/fonts/cubic.h \
154 libmlk-data/fonts/lato.h \
155 libmlk-data/fonts/pirata-one.h \
156 libmlk-data/fonts/teutonic.h \
157 libmlk-data/images/battle-background.h \
158 libmlk-data/images/black-cat.h \
159 libmlk-data/images/haunted-wood.h \
160 libmlk-data/music/vabsounds-romance.h \
161 libmlk-data/sounds/fire.h \
162 libmlk-data/sounds/potion.h \
163 libmlk-data/sprites/chest.h \
164 libmlk-data/sprites/explosion.h \
165 libmlk-data/sprites/faces.h \
166 libmlk-data/sprites/john-sword.h \
167 libmlk-data/sprites/john-walk.h \
168 libmlk-data/sprites/john.h \
169 libmlk-data/sprites/numbers.h \
170 libmlk-data/sprites/people.h \
171 libmlk-data/sprites/ui-cursor.h
172
173 MLK_BCC= tools/bcc/mlk-bcc
174 MLK_BCC_SRCS= tools/bcc/main.c
175 MLK_BCC_OBJS= ${MLK_BCC_SRCS:.c=.o}
176 MLK_BCC_DEPS= ${MLK_BCC_SRCS:.c=.d}
177
178 MLK_TILESET= tools/tileset/mlk-tileset
179 MLK_TILESET_SRCS= tools/tileset/main.c
180 MLK_TILESET_OBJS= ${MLK_TILESET_SRCS:.c=.o}
181 MLK_TILESET_DEPS= ${MLK_TILESET_SRCS:.c=.d}
182
183 MLK_MAP= tools/map/mlk-map
184 MLK_MAP_SRCS= tools/map/main.c
185 MLK_MAP_OBJS= ${MLK_MAP_SRCS:.c=.o}
186 MLK_MAP_DEPS= ${MLK_MAP_SRCS:.c=.d}
187
188 MLK_ADVENTURE= mlk-adventure/mlk-adventure
189 MLK_ADVENTURE_SRCS= mlk-adventure/main.c
190 MLK_ADVENTURE_OBJS= ${MLK_ADVENTURE_SRCS:.c=.o}
191 MLK_ADVENTURE_DEPS= ${MLK_ADVENTURE_SRCS:.c=.d}
192
193 TARGETS= ${LIBMLK_ADVENTURE} \
194 ${LIBMLK_CORE} \
195 ${LIBMLK_RPG} \
196 ${LIBMLK_SQLITE} \
197 ${LIBMLK_UI} \
198 ${MLK_ADVENTURE} \
199 ${MLK_BCC} \
200 ${MLK_MAP} \
201 ${MLK_TILESET}
202
203 SDL2_INCS:= $(shell pkg-config --cflags sdl2 SDL2_mixer SDL2_ttf SDL2_image)
204 SDL2_LIBS:= $(shell pkg-config --libs sdl2 SDL2_mixer SDL2_ttf SDL2_image)
205
206 JANSSON_INCS:= $(shell pkg-config --cflags jansson)
207 JANSSON_LIBS:= $(shell pkg-config --libs jansson)
208
209 ZSTD_INCS:= $(shell pkg-config --cflags libzstd)
210 ZSTD_LIBS:= $(shell pkg-config --libs libzstd)
211
212 INCS= -I. \
213 -Iextern/libsqlite \
214 -Ilibmlk-core \
215 -Ilibmlk-ui \
216 -Ilibmlk-rpg \
217 -Ilibmlk-adventure \
218 ${SDL2_INCS}
219 DEFS= -DMOLKO_BINDIR=\"${BINDIR}\" \
220 -DMOLKO_DATADIR=\"${DATADIR}\" \
221 -DMOLKO_LOCALEDIR=\"${LOCALEDIR}\" \
222 -DMOLKO_ABS_BINDIR=\"${PREFIX}/${BINDIR}\" \
223 -DMOLKO_ABS_DATADIR=\"${PREFIX}/${DATADIR}\" \
224 -DMOLKO_ABS_LOCALEDIR=\"${PREFIX}/${LOCALEDIR}\"
225
226 ifeq (${NLS},1)
227 LIBS+= -lintl
228 SED.nls= s/@define WITH_NLS@/\#define MOLKO_WITH_NLS/
229 else
230 SED.nls= /@define WITH_NLS@/d
231 endif
232
233 .SUFFIXES:
234 .SUFFIXES: .c .o .h .map .ogg .png .sql .tileset .ttf
235
236 all: ${TARGETS}
237
238 config.h: config.h.in
239 @echo "SED $<"
240 @sed -e "${SED.nls}" < $< > $@
241
242 .c.o:
243 @echo "CC $<"
244 @${CC} -MMD ${INCS} ${DEFS} ${CFLAGS} -c $< -o $@
245
246 # Binary files.
247 .ttf.h .png.h .ogg.h:
248 @echo "BCC $<"
249 @${MLK_BCC} -csu $< assets_$(notdir $<) > $@
250
251 # Text files.
252 .sql.h:
253 @echo "BCC $<"
254 @${MLK_BCC} -0csu $< assets_$(notdir $<) > $@
255
256 # Maps
257 .json.map:
258 @echo "MAP $<"
259 @${MLK_MAP} < $< > $@
260
261 .tileset.map:
262 @echo "TS $<"
263 @${MLK_TILESET} < $< > $@
264
265 -include ${LIBMLK_ADVENTURE_DEPS}
266 -include ${LIBMLK_CORE_DEPS}
267 -include ${LIBMLK_RPG_DEPS}
268 -include ${LIBMLK_SQLITE_DEPS}
269 -include ${LIBMLK_UI_DEPS}
270 -include ${MLK_ADVENTURE_DEPS}
271 -include ${MLK_BCC_DEPS}
272 -include ${MLK_MAP_DEPS}
273 -include ${MLK_TILESET_DEPS}
274
275 ${LIBMLK_SQLITE}: ${LIBMLK_SQLITE_OBJS}
276 @echo "AR $@"
277 @${AR} -rc $@ ${LIBMLK_SQLITE_OBJS}
278
279 ${LIBMLK_CORE_OBJS}: config.h
280
281 ${LIBMLK_CORE}: ${LIBMLK_CORE_OBJS}
282 @echo "AR $@"
283 @${AR} -rc $@ ${LIBMLK_CORE_OBJS}
284
285 ${LIBMLK_UI_ASTS}: ${MLK_BCC}
286 ${LIBMLK_UI_OBJS}: ${LIBMLK_UI_ASTS}
287
288 ${LIBMLK_UI}: ${LIBMLK_CORE} ${LIBMLK_UI_OBJS}
289 @echo "AR $@"
290 @${AR} -rc $@ ${LIBMLK_UI_OBJS}
291
292 ${LIBMLK_RPG_ASTS}: ${MLK_BCC}
293 ${LIBMLK_RPG_OBJS}: ${LIBMLK_RPG_ASTS}
294
295 ${LIBMLK_RPG}: ${LIBMLK_UI} ${LIBMLK_SQLITE} ${LIBMLK_RPG_OBJS}
296 @echo "AR $@"
297 @${AR} -rc $@ ${LIBMLK_RPG_OBJS}
298
299 ${LIBMLK_ADVENTURE_ASTS}: ${MLK_BCC}
300 ${LIBMLK_ADVENTURE_OBJS}: ${LIBMLK_ADVENTURE_ASTS}
301
302 ${LIBMLK_ADVENTURE}: ${LIBMLK_RPG} ${LIBMLK_ADVENTURE_OBJS}
303 @echo "AR $@"
304 @${AR} -rc $@ ${LIBMLK_ADVENTURE_OBJS}
305
306 ${MLK_BCC}: ${MLK_BCC_OBJS}
307 @echo "CCLD $@"
308 @${CC} ${CFLAGS} -o $@ ${MLK_BCC_OBJS} ${SDL2_LIBS} ${LDFLAGS}
309
310 ${MLK_TILESET}: ${MLK_TILESET_OBJS}
311 @echo "CCLD $@"
312 @${CC} ${CFLAGS} -o $@ ${MLK_TILESET_OBJS} ${JANSSON_LIBS} ${LDFLAGS}
313
314 ${MLK_MAP}: ${MLK_MAP_OBJS}
315 @echo "CCLD $@"
316 @${CC} ${CFLAGS} -o $@ ${MLK_MAP_OBJS} ${JANSSON_LIBS} ${LDFLAGS}
317
318 ${MLK_ADVENTURE_OBJS}: ${LIBMLK_ADVENTURE}
319
320 ${MLK_ADVENTURE}: ${MLK_ADVENTURE_OBJS}
321 @echo "CCLD $@"
322 @${CC} ${CFLAGS} -o $@ ${MLK_ADVENTURE_OBJS} ${LIBMLK_ADVENTURE} \
323 ${LIBMLK_RPG} ${LIBMLK_UI} ${LIBMLK_CORE} ${LIBMLK_SQLITE} \
324 ${SDL2_LIBS} ${ZSTD_LIBS} ${LIBS} ${LDFLAGS}
325
326 clean:
327 @echo "cleaning"
328 @rm -f config.h tags
329 @rm -f ${LIBMLK_ADVENTURE} ${LIBMLK_ADVENTURE_OBJS} ${LIBMLK_ADVENTURE_DEPS}
330 @rm -f ${LIBMLK_CORE} ${LIBMLK_CORE_OBJS} ${LIBMLK_CORE_DEPS}
331 @rm -f ${LIBMLK_RPG} ${LIBMLK_RPG_OBJS} ${LIBMLK_RPG_DEPS} ${LIBMLK_RPG_ASTS}
332 @rm -f ${LIBMLK_UI} ${LIBMLK_UI_OBJS} ${LIBMLK_UI_DEPS} ${LIBMLK_UI_ASTS}
333 @rm -f ${LIBMLK_SQLITE} ${LIBMLK_SQLITE_OBJS} ${LIBMLK_SQLITE_DEPS} ${LIBMLK_SQLITE_ASTS}
334 @rm -f ${LIBMLK_DATA_ASTS}
335 @rm -f ${MLK_ADVENTURE} ${MLK_ADVENTURE_OBJS} ${MLK_ADVENTURE_DEPS}
336 @rm -f ${MLK_BCC} ${MLK_BCC_OBJS} ${MLK_BCC_DEPS}
337 @rm -f ${MLK_MAP} ${MLK_MAP_OBJS} ${MLK_MAP_DEPS}
338 @rm -f ${MLK_TILESET} ${MLK_TILESET_OBJS} ${MLK_TILESET_DEPS}
339
340 .PHONY: all clean