Mirai's Miscellaneous Misadventures

M40 / makefile

# copyright 2023 zamfofex
# license: AGPLv3 or later

engine = mfb

LD = $(CC)
WASM_OPT = wasm-opt

libs =

ifeq ($(engine),mfb)
libs += -lminifb -lX11 -lGL
endif

exe = mimimi
lib = lib$(exe)

src = \
	core/behaviors.c \
	core/sprites.c \
	core/controls.c \
	core/cameras.c \
	core/animations.c \
	core/displays.c \
	core/font.c \
	core/text.c \
	core/coroutines.c \
	core/collisions.c \
	core/allocators.c \
	core/video.c \
	core/version.c \
	core/paths.c \
	core/effects.c \
	models/all.c \
	engines/$(engine).c \
	test/chapter.c

ifeq ($(enable_ualyze),)
src += core/text-basic.c
else
src += core/text-ualyze.c
libs += -lualyze
endif

.PHONY: all clean check

all:

clean:
	$(RM) $(exe) *.wasm *.a *.txt */*.o */*.wasm */*.d

check:
	$(MAKE) engine=check
	valgrind --leak-check=full --error-exitcode=1 ./mimimi

# note: the Wasm target uses 'wcc' from <https://github.com/tyfkda/xcc>

ifeq ($(engine),wasm)

src += core/malloc.c

all: $(exe).wasm $(lib).txt

$(exe).wasm: $(src) main/wasm.c
	@echo cc $@
	@$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -MMD -Iinclude \
		--entry-point=main -e mimimi_wasm_behave \
		-o $@ $^
	@echo wo $@
	@$(WASM_OPT) $(WASM_OPT_FLAGS) -o $@ $@

$(lib).txt:
	echo $(src) > $@

else ifeq ($(engine),wasm-llvm)

all: $(exe)-llvm.wasm $(lib).a

$(exe)-llvm.wasm: $(src:.c=.wasm)
	@echo ld $@
	@$(LD) $(LDFLAGS) -nostdlib -Wl,--no-entry \
		-Wl,--export=mimimi_wasm_llvm_texture \
		-Wl,--export=mimimi_wasm_llvm_invalidate \
		-Wl,--export=mimimi_wasm_llvm_stamp \
		-Wl,--export=mimimi_wasm_llvm_allocator \
		-Wl,--export=mimimi_wasm_llvm_allocate \
		-Wl,--export=mimimi_test \
		-Wl,--allow-undefined \
		-Wl,--export-table,--growable-table \
		-o $@ $^ $(libs)

$(lib).a: $(src:.c=.wasm)
	@echo ar $@
	@$(AR) rDsc $@ $^

%.wasm: %.c
	@echo cc $<
	@$(CC) $(CFLAGS) $(CPPFLAGS) -MMD -MP -ffreestanding -Iinclude -c -o $@ $<

else

src += core/malloc.c

all: $(exe) $(lib).a

$(exe): $(src:.c=.o) main/$(engine).o
	@echo ld $@
	@$(LD) $(LDFLAGS) -o $@ $^ $(libs)

$(lib).a: $(src:.c=.o)
	@echo ar $@
	@$(AR) rDsc $@ $^

%.o: %.c
	@echo cc $<
	@$(CC) $(CFLAGS) $(CPPFLAGS) -MMD -MP -Iinclude -c -o $@ $<

endif

-include $(src:.c=.d)