Mercurial > molko
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 |