comparison GNUmakefile @ 414:6947c1fefe5c

misc: extreme cleanup - Remove of Javascript binding for many reasons. - Put examples and tests in GNU make. - Create a library with shared example code.
author David Demelier <markand@malikania.fr>
date Sun, 09 Oct 2022 13:51:03 +0200
parents 222045c513ec
children 2862526f1fc9
comparison
equal deleted inserted replaced
413:222045c513ec 414:6947c1fefe5c
1 -include config.mk 1 -include config.mk
2 2
3 # Toolchain options. 3 # Toolchain options.
4 CC ?= clang 4 CC ?= clang
5 CFLAGS ?= -g -O0 5 CFLAGS ?= -g -O0
6 BCC ?= bcc 6 BCC ?= src/tools/bcc/mlk-bcc
7 BCC_OPTS ?= -cs 7 BCC_OPTS ?= -cs
8 MD ?= -MD 8 MD ?= -MD
9 9
10 # User options. 10 # User options.
11 WITH_ZIP := yes 11 WITH_ZIP := yes
23 SDL2_TTF_INCS ?= $(shell pkg-config --cflags SDL2_ttf) 23 SDL2_TTF_INCS ?= $(shell pkg-config --cflags SDL2_ttf)
24 SDL2_TTF_LIBS ?= $(shell pkg-config --libs SDL2_ttf) 24 SDL2_TTF_LIBS ?= $(shell pkg-config --libs SDL2_ttf)
25 25
26 SNDFILE_INCS ?= $(shell pkg-config --cflags sndfile) 26 SNDFILE_INCS ?= $(shell pkg-config --cflags sndfile)
27 SNDFILE_LIBS ?= $(shell pkg-config --libs sndfile) 27 SNDFILE_LIBS ?= $(shell pkg-config --libs sndfile)
28
29 JANSSON_INCS ?= $(shell pkg-config --cflags jansson)
30 JANSSON_LIBS ?= $(shell pkg-config --libs jansson)
28 31
29 ifeq ($(WITH_ZSTD),yes) 32 ifeq ($(WITH_ZSTD),yes)
30 ZSTD_INCS ?= $(shell pkg-config --cflags libzstd) 33 ZSTD_INCS ?= $(shell pkg-config --cflags libzstd)
31 ZSTD_LIBS ?= $(shell pkg-config --libs libzstd) 34 ZSTD_LIBS ?= $(shell pkg-config --libs libzstd)
32 endif 35 endif
65 68
66 ifeq ($(WITH_ZIP),yes) 69 ifeq ($(WITH_ZIP),yes)
67 INCS += $(ZIP_INCS) 70 INCS += $(ZIP_INCS)
68 endif 71 endif
69 72
70 OPTS := -Wall -Wextra -Wno-format-truncation -pipe 73 OPTS := -Wall -Wextra -pipe
71 74
72 ifeq ($(OS),Darwin) 75 ifeq ($(OS),Darwin)
73 OPTS += -Wno-deprecated-declarations 76 OPTS += -Wno-deprecated-declarations
74 endif 77 endif
75 78
77 OPTS += -g -O0 80 OPTS += -g -O0
78 else 81 else
79 OPTS += -DNDEBUG -O3 82 OPTS += -DNDEBUG -O3
80 endif 83 endif
81 84
85 # Meta variable that contains all libraries, used for executables and tests.
86 LIBMLK = $(LIBMLK_RPG) \
87 $(LIBMLK_UI) \
88 $(LIBMLK_CORE) \
89 $(LIBMLK_PORT) \
90 $(LIBMLK_SQLITE) \
91 $(MATH_LIBS) \
92 $(SDL2_LIBS) \
93 $(SDL2_IMAGE_LIBS) \
94 $(SDL2_TTF_LIBS) \
95 $(OPENAL_LIBS) \
96 $(SNDFILE_LIBS)
97
98 ifeq ($(WITH_ZSTD),yes)
99 LIBMLK += $(ZSTD_LIBS)
100 endif
101
102 ifeq ($(WITH_ZIP),yes)
103 LIBMLK += $(LIBZIP_LIBS)
104 endif
105
82 .DEFAULT_GOAL := all 106 .DEFAULT_GOAL := all
83 107
84 .SUFFIXES: 108 .SUFFIXES:
85 .SUFFIXES: .c .h .o .sql .ttf 109 .SUFFIXES: .c .h .o .ogg .png .sql .ttf .wav
86 110
87 .c.o: 111 .c.o:
88 $(CC) $(OPTS) $(INCS) $(DEFS) $(CFLAGS) $(MD) -c $< -o $@ 112 $(CC) $(OPTS) $(INCS) $(DEFS) $(CFLAGS) $(MD) -c $< -o $@
89 113
90 .c: 114 .c:
91 $(CC) $(OPTS) $(INCS) $(DEFS) $(CFLAGS) $< -o $@ $(LIBS) $(LDFLAGS) 115 $(CC) $(OPTS) $(INCS) $(DEFS) $(CFLAGS) $< -o $@ $(OBJS) $(LIBS) $(LDFLAGS)
92 116
93 .ttf.h .sql.h: 117 .ogg.h .png.h .ttf.h .sql.h .wav.h:
94 $(BCC) $(BCC_OPTS) $< assets_$(basename $(<F)) > $@ 118 $(BCC) $(BCC_OPTS) $< assets_$(basename $(<F)) > $@
95 119
96 %.a: 120 %.a:
97 $(AR) -rc $@ $(OBJS) 121 $(AR) -rc $@ $(OBJS)
98 122
130 154
131 all: $(LIBMLK_PORT) 155 all: $(LIBMLK_PORT)
132 156
133 # }}} 157 # }}}
134 158
159 # {{{ mlk-bcc
160
161 MLK_BCC := src/tools/bcc/mlk-bcc
162
163 $(MLK_BCC): INCS :=
164
165 all: $(MLK_BCC)
166
167 # }}}
168
169 # {{{ mlk-tileset
170
171 MLK_TILESET := src/tools/tileset/mlk-tileset
172
173 $(MLK_TILESET): INCS := $(JANSSON_INCS)
174 $(MLK_TILESET): LIBS := $(JANSSON_LIBS)
175
176 all: $(MLK_TILESET)
177
178 # }}}
179
180 # {{{ mlk-map
181
182 MLK_MAP := src/tools/map/mlk-map
183
184 $(MLK_MAP): INCS := -Isrc/libmlk-port $(JANSSON_INCS)
185 $(MLK_MAP): LIBS := $(LIBMLK_PORT) $(JANSSON_LIBS)
186 $(MLK_MAP): $(LIBMLK_PORT)
187
188 all: $(MLK_MAP)
189
190 # }}}
191
135 # {{{ libmlk-sqlite 192 # {{{ libmlk-sqlite
136 193
137 LIBMLK_SQLITE := libmlk-sqlite.a 194 LIBMLK_SQLITE := libmlk-sqlite.a
138 LIBMLK_SQLITE_SRCS := extern/libsqlite/sqlite3.c 195 LIBMLK_SQLITE_SRCS := extern/libsqlite/sqlite3.c
139 LIBMLK_SQLITE_OBJS := $(LIBMLK_SQLITE_SRCS:.c=.o) 196 LIBMLK_SQLITE_OBJS := $(LIBMLK_SQLITE_SRCS:.c=.o)
140 LIBMLK_SQLITE_DEPS := $(LIBMLK_SQLITE_SRCS:.c=.d) 197 LIBMLK_SQLITE_DEPS := $(LIBMLK_SQLITE_SRCS:.c=.d)
141 198
142 -include $(LIBMLK_SQLITE_DEPS) 199 -include $(LIBMLK_SQLITE_DEPS)
143 200
144 $(LIBMLK_SQLITE): INCS := 201 $(LIBMLK_SQLITE): private INCS :=
145 $(LIBMLK_SQLITE): OBJS := $(LIBMLK_SQLITE_OBJS) 202 $(LIBMLK_SQLITE): private OBJS := $(LIBMLK_SQLITE_OBJS)
146 $(LIBMLK_SQLITE): $(LIBMLK_SQLITE_OBJS) 203 $(LIBMLK_SQLITE): $(LIBMLK_SQLITE_OBJS)
147 204
148 all: $(LIBMLK_SQLITE) 205 all: $(LIBMLK_SQLITE)
149 206
150 # }}} 207 # }}}
187 LIBMLK_CORE_DEPS := $(LIBMLK_CORE_SRCS:.c=.d) 244 LIBMLK_CORE_DEPS := $(LIBMLK_CORE_SRCS:.c=.d)
188 245
189 -include $(LIBMLK_CORE_DEPS) 246 -include $(LIBMLK_CORE_DEPS)
190 247
191 $(LIBMLK_CORE_OBJS): config.h 248 $(LIBMLK_CORE_OBJS): config.h
192 $(LIBMLK_CORE): OBJS := $(LIBMLK_CORE_OBJS) 249 $(LIBMLK_CORE): private OBJS := $(LIBMLK_CORE_OBJS)
193 $(LIBMLK_CORE): $(LIBMLK_CORE_OBJS) 250 $(LIBMLK_CORE): $(LIBMLK_CORE_OBJS)
194 251
195 all: $(LIBMLK_CORE) 252 all: $(LIBMLK_CORE)
196 253
197 # }}} 254 # }}}
215 LIBMLK_UI_DATA_SRCS := src/libmlk-ui/assets/fonts/opensans-light.ttf \ 272 LIBMLK_UI_DATA_SRCS := src/libmlk-ui/assets/fonts/opensans-light.ttf \
216 src/libmlk-ui/assets/fonts/opensans-medium.ttf \ 273 src/libmlk-ui/assets/fonts/opensans-medium.ttf \
217 src/libmlk-ui/assets/fonts/opensans-regular.ttf 274 src/libmlk-ui/assets/fonts/opensans-regular.ttf
218 LIBMLK_UI_DATA_OBJS := $(addsuffix .h,$(basename $(LIBMLK_UI_DATA_SRCS))) 275 LIBMLK_UI_DATA_OBJS := $(addsuffix .h,$(basename $(LIBMLK_UI_DATA_SRCS)))
219 276
277 $(LIBMLK_UI_DATA_OBJS): $(MLK_BCC)
278
220 $(LIBMLK_UI_OBJS): $(LIBMLK_UI_DATA_OBJS) 279 $(LIBMLK_UI_OBJS): $(LIBMLK_UI_DATA_OBJS)
280
221 $(LIBMLK_UI): $(LIBMLK_UI_OBJS) 281 $(LIBMLK_UI): $(LIBMLK_UI_OBJS)
222 $(LIBMLK_UI): OBJS := $(LIBMLK_UI_OBJS) 282 $(LIBMLK_UI): private OBJS := $(LIBMLK_UI_OBJS)
223 283
224 all: $(LIBMLK_UI) 284 all: $(LIBMLK_UI)
225 285
226 # }}} 286 # }}}
227 287
266 src/libmlk-rpg/rpg/spell.c \ 326 src/libmlk-rpg/rpg/spell.c \
267 src/libmlk-rpg/rpg/team.c \ 327 src/libmlk-rpg/rpg/team.c \
268 src/libmlk-rpg/rpg/tileset-file.c \ 328 src/libmlk-rpg/rpg/tileset-file.c \
269 src/libmlk-rpg/rpg/tileset.c \ 329 src/libmlk-rpg/rpg/tileset.c \
270 src/libmlk-rpg/rpg/walksprite.c 330 src/libmlk-rpg/rpg/walksprite.c
271
272 LIBMLK_RPG_OBJS := $(LIBMLK_RPG_SRCS:.c=.o) 331 LIBMLK_RPG_OBJS := $(LIBMLK_RPG_SRCS:.c=.o)
273 LIBMLK_RPG_DEPS := $(LIBMLK_RPG_SRCS:.c=.d) 332 LIBMLK_RPG_DEPS := $(LIBMLK_RPG_SRCS:.c=.d)
333
274 LIBMLK_RPG_DATA_SRCS := src/libmlk-rpg/assets/sql/character-load.sql \ 334 LIBMLK_RPG_DATA_SRCS := src/libmlk-rpg/assets/sql/character-load.sql \
275 src/libmlk-rpg/assets/sql/character-save.sql \ 335 src/libmlk-rpg/assets/sql/character-save.sql \
276 src/libmlk-rpg/assets/sql/init.sql \ 336 src/libmlk-rpg/assets/sql/init.sql \
277 src/libmlk-rpg/assets/sql/property-load.sql \ 337 src/libmlk-rpg/assets/sql/property-load.sql \
278 src/libmlk-rpg/assets/sql/property-remove.sql \ 338 src/libmlk-rpg/assets/sql/property-remove.sql \
282 src/libmlk-rpg/assets/sql/quest-step-load.sql \ 342 src/libmlk-rpg/assets/sql/quest-step-load.sql \
283 src/libmlk-rpg/assets/sql/quest-step-save.sql 343 src/libmlk-rpg/assets/sql/quest-step-save.sql
284 LIBMLK_RPG_DATA_OBJS := $(addsuffix .h,$(basename $(LIBMLK_RPG_DATA_SRCS))) 344 LIBMLK_RPG_DATA_OBJS := $(addsuffix .h,$(basename $(LIBMLK_RPG_DATA_SRCS)))
285 345
286 $(LIBMLK_RPG_DATA_OBJS): BCC_OPTS := -cs0 346 $(LIBMLK_RPG_DATA_OBJS): BCC_OPTS := -cs0
347 $(LIBMLK_RPG_DATA_OBJS): $(MLK_BCC)
348
287 $(LIBMLK_RPG_OBJS): $(LIBMLK_RPG_DATA_OBJS) 349 $(LIBMLK_RPG_OBJS): $(LIBMLK_RPG_DATA_OBJS)
350
288 $(LIBMLK_RPG): $(LIBMLK_RPG_OBJS) 351 $(LIBMLK_RPG): $(LIBMLK_RPG_OBJS)
289 $(LIBMLK_RPG): OBJS := $(LIBMLK_RPG_OBJS) 352 $(LIBMLK_RPG): private OBJS := $(LIBMLK_RPG_OBJS)
290 353
291 all: $(LIBMLK_RPG) 354 all: $(LIBMLK_RPG)
292 355
293 # }}} 356 # }}}
294 357
295 # Meta variable that contains all libraries, used for executables and tests. 358 # {{{ libmlk-example
296 LIBMLK := $(LIBMLK_RPG) \ 359
297 $(LIBMLK_UI) \ 360 LIBMLK_EXAMPLE := libmlk-example.a
298 $(LIBMLK_CORE) \ 361 LIBMLK_EXAMPLE_SRCS := examples/example/character-john.c \
299 $(LIBMLK_PORT) \ 362 examples/example/registry.c \
300 $(LIBMLK_SQLITE) \ 363 examples/example/spell-fire.c \
301 $(MATH_LIBS) \ 364 examples/example/trace_hud.c
302 $(SDL2_LIBS) \ 365
303 $(SDL2_IMAGE_LIBS) \ 366 LIBMLK_EXAMPLE_DATA_SRCS := examples/assets/images/battle-background.png \
304 $(SDL2_TTF_LIBS) \ 367 examples/assets/images/black-cat.png \
305 $(OPENAL_LIBS) \ 368 examples/assets/images/haunted-wood.png \
306 $(SNDFILE_LIBS) 369 examples/assets/images/sword.png \
307 370 examples/assets/music/vabsounds-romance.ogg \
308 ifeq ($(WITH_ZSTD),yes) 371 examples/assets/sounds/fire.wav \
309 LIBMLK += $(ZSTD_LIBS) 372 examples/assets/sprites/chest.png \
310 endif 373 examples/assets/sprites/explosion.png \
311 374 examples/assets/sprites/john-sword.png \
312 ifeq ($(WITH_ZIP),yes) 375 examples/assets/sprites/john-walk.png \
313 LIBMLK += $(LIBZIP_LIBS) 376 examples/assets/sprites/numbers.png \
314 endif 377 examples/assets/sprites/people.png \
378 examples/assets/sprites/ui-cursor.png
379 LIBMLK_EXAMPLE_DATA_OBJS := $(addsuffix .h,$(basename $(LIBMLK_EXAMPLE_DATA_SRCS)))
380
381 LIBMLK_EXAMPLE_OBJS := $(LIBMLK_EXAMPLE_SRCS:.c=.o)
382 LIBMLK_EXAMPLE_DEPS := $(LIBMLK_EXAMPLE_SRCS:.c=.d)
383
384 -include $(LIBMLK_EXAMPLE_DEPS)
385
386 $(LIBMLK_EXAMPLE_DATA_OBJS): $(MLK_BCC)
387
388 $(LIBMLK_EXAMPLE_OBJS): private INCS += -Iexamples
389 $(LIBMLK_EXAMPLE_OBJS): $(LIBMLK_EXAMPLE_DATA_OBJS)
390
391 $(LIBMLK_EXAMPLE): private OBJS := $(LIBMLK_EXAMPLE_OBJS)
392 $(LIBMLK_EXAMPLE): $(LIBMLK_EXAMPLE_OBJS)
393
394 # }}}
395
396 # {{{ examples
397
398 EXAMPLES := examples/example-action/example-action.c \
399 examples/example-animation/example-animation.c \
400 examples/example-audio/example-audio.c \
401 examples/example-cursor/example-cursor.c \
402 examples/example-debug/example-debug.c \
403 examples/example-drawable/example-drawable.c \
404 examples/example-font/example-font.c \
405 examples/example-gridmenu/example-gridmenu.c \
406 examples/example-label/example-label.c \
407 examples/example-message/example-message.c \
408 examples/example-notify/example-notify.c \
409 examples/example-sprite/example-sprite.c \
410 examples/example-ui/example-ui.c
411 EXAMPLES_EXE := $(EXAMPLES:.c=)
412 EXAMPLES_OBJS := $(EXAMPLES_EXE)
413
414 $(EXAMPLES_EXE): private LIBS += $(LIBMLK) $(LIBMLK_EXAMPLE)
415 $(EXAMPLES_EXE): private INCS += -Iexamples
416 $(EXAMPLES_EXE): $(LIBMLK_RPG) $(LIBMLK_UI) $(LIBMLK_CORE) $(LIBMLK_PORT) $(LIBMLK_SQLITE) $(LIBMLK_EXAMPLE)
417
418 examples: $(EXAMPLES_EXE)
419
420 # }}}
421
422 # {{{ tests
315 423
316 TESTS := tests/test-action-script.c \ 424 TESTS := tests/test-action-script.c \
317 tests/test-action.c \ 425 tests/test-action.c \
318 tests/test-alloc.c \ 426 tests/test-alloc.c \
319 tests/test-character.c \ 427 tests/test-character.c \
339 $(TESTS_EXE): $(LIBMLK_RPG) $(LIBMLK_UI) $(LIBMLK_CORE) $(LIBMLK_PORT) $(LIBMLK_SQLITE) 447 $(TESTS_EXE): $(LIBMLK_RPG) $(LIBMLK_UI) $(LIBMLK_CORE) $(LIBMLK_PORT) $(LIBMLK_SQLITE)
340 448
341 tests: $(TESTS_EXE) 449 tests: $(TESTS_EXE)
342 for t in $(TESTS_EXE); do ./$$t; done 450 for t in $(TESTS_EXE); do ./$$t; done
343 451
452 # }}}
453
344 clean: 454 clean:
345 rm -f config.h 455 rm -f config.h
456 rm -f $(MLK_BCC) $(MLK_MAP) $(MLK_TILESET)
346 rm -f $(LIBMLK_SQLITE) $(LIBMLK_SQLITE_DEPS) $(LIBMLK_SQLITE_OBJS) 457 rm -f $(LIBMLK_SQLITE) $(LIBMLK_SQLITE_DEPS) $(LIBMLK_SQLITE_OBJS)
347 rm -f $(LIBMLK_PORT) $(LIBMLK_PORT_DEPS) $(LIBMLK_PORT_OBJS) 458 rm -f $(LIBMLK_PORT) $(LIBMLK_PORT_DEPS) $(LIBMLK_PORT_OBJS)
348 rm -f $(LIBMLK_CORE) $(LIBMLK_CORE_DEPS) $(LIBMLK_CORE_OBJS) 459 rm -f $(LIBMLK_CORE) $(LIBMLK_CORE_DEPS) $(LIBMLK_CORE_OBJS)
349 rm -f $(LIBMLK_UI) $(LIBMLK_UI_DEPS) $(LIBMLK_UI_OBJS) $(LIBMLK_UI_DATA_OBJS) 460 rm -f $(LIBMLK_UI) $(LIBMLK_UI_DEPS) $(LIBMLK_UI_OBJS) $(LIBMLK_UI_DATA_OBJS)
350 rm -f $(LIBMLK_RPG) $(LIBMLK_RPG_DEPS) $(LIBMLK_RPG_OBJS) $(LIBMLK_RPG_DATA_OBJS) 461 rm -f $(LIBMLK_RPG) $(LIBMLK_RPG_DEPS) $(LIBMLK_RPG_OBJS) $(LIBMLK_RPG_DATA_OBJS)
351 rm -f $(TESTS_EXE) 462 rm -f $(LIBMLK_EXAMPLE) $(LIBMLK_EXAMPLE_DEPS) $(LIBMLK_EXAMPLE_OBJS) $(LIBMLK_EXAMPLE_DATA_OBJS)
352 463 rm -f $(TESTS_EXE) $(EXAMPLES_EXE)
353 .PHONY: all clean tests 464
465 .PHONY: all clean examples tests