301
|
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 |