Mirai's Miscellaneous Misadventures

M30 / makefile

# copyright 2022 zamfofex
# license: AGPLv3 or later

engine ?= mfb

libs =

ifeq ($(engine),sdl2)
libs += -lSDL2
endif

ifeq ($(engine),mfb)
libs += -lminifb -lX11 -lGL
CFLAGS += -Wno-discarded-qualifiers
endif

src = \
	core/behaviors.c \
	core/sprites.c \
	core/controls.c \
	core/cameras.c \
	core/animations.c \
	core/displays.c \
	core/fonts.c core/font.c \
	core/text.c \
	core/coroutines.c \
	core/collisions.c \
	core/allocators.c \
	core/video.c \
	core/version.c \
	models/all.c \
	test/chapter.c

exe = mimimi
lib = lib$(exe)

ifneq ($(engine),lib)
src += engines/$(engine).c
endif

ifeq ($(engine),x86)

$(exe).$(engine).img: $(src:.c=.$(engine).o) $(engine)/boot.$(engine).o $(engine)/main.$(engine).o $(engine)/vbe.$(engine).o
	@echo ld $@
	@$(CC) -m16 $(LDFLAGS) -nostdlib -static -T$(engine)/link.ld -o $@ $^ $(libs)

%.$(engine).o: %.c x86/link.ld
	@echo cc $<
	@$(CC) -m16 $(CFLAGS) $(CPPFLAGS) -MMD -MF$(<:.c=.d) -MP -Iinclude -ffreestanding -c -o $@ $<

%.$(engine).o: %.s x86/link.ld
	@echo cc $<
	@$(CC) -m16 $(ASFLAGS) -c -o $@ $<

else ifeq ($(engine),wasm)

$(exe).wasm: $(src:.c=.wasm)
	@echo ld $@
	@$(CC) $(LDFLAGS) -nostdlib -Wl,--no-entry \
		-Wl,--export=mimimi_wasm_texture \
		-Wl,--export=mimimi_wasm_invalidate \
		-Wl,--export=mimimi_wasm_stamp \
		-Wl,--export=mimimi_wasm_allocator \
		-Wl,--export=mimimi_wasm_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) -ffreestanding -MMD -MP -Iinclude -c -o $@ $<

else ifeq ($(engine),psx)

src += psx/malloc.c

libs += -lpsxgpu -lpsxgte -lpsxspu -lpsxcd -lpsxpress -lpsxsio -lpsxetc -lpsxapi -llzp -lc

$(exe).exe: $(src:.c=.o) main/$(engine).o
	@echo ld $@
	@$(CC) $(LDFLAGS) -nostdlib -static -o $(exe) $^ $(libs)
	@elf2x -q $(exe) $@

%.o: %.c
	@echo cc $<
	@$(CC) $(CFLAGS) $(CPPFLAGS) -march=r3000 -msoft-float -mabi=32 -mdivide-breaks -ffreestanding -mno-abicalls -MMD -MP -Iinclude -c -o $@ $<

else

src += core/malloc.c

$(exe): $(src:.c=.o) main/$(engine).o
	@echo ld $@
	@$(CC) $(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

.PHONY: clean check

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

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

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