CC?=gcc
LD?=ld
SHROOMSFLAGS=shrooms-vb-core/core/vb.c -I shrooms-vb-core/core
msys_version := $(if $(findstring Msys, $(shell uname -o)),$(word 1, $(subst ., ,$(shell uname -r))),0)

ifeq ($(msys_version), 0)
SDL2FLAGS=$(shell pkg-config sdl2 --cflags --libs)
BINLINKFLAGS=-z noexecstack
else
SDL2FLAGS=$(shell pkg-config sdl2 --cflags --libs) -mwindows -mconsole
BINLINKFLAGS=
endif

.PHONY: clean build
clean:
	@rm -rf shrooms-vb output

CFILES := $(foreach dir,./,$(notdir $(wildcard $(dir)/*.c)))
BINFILES := $(foreach dir,assets/,$(notdir $(wildcard $(dir)/*.bin)))

COBJS := $(CFILES:%.c=output/%.o)
SHROOMSOBJS := output/vb.o
BINOBJS := $(BINFILES:%.bin=output/%.o)

OFILES := $(COBJS) $(SHROOMSOBJS) $(BINOBJS)

output/%.o: %.c
	@mkdir -p output
	@$(CC) -c -o $@ $< -I . \
		-I shrooms-vb-core/core $(SDL2FLAGS) \
		-O3 -flto -fno-strict-aliasing \
		-Werror -std=c90 -Wall -Wextra -Wpedantic

output/vb.o: shrooms-vb-core/core/vb.c
	@mkdir -p output
	@$(CC) -c -o $@ $< -I . \
		-I shrooms-vb-core/core $(SDL2FLAGS) \
		-O3 -flto -fno-strict-aliasing \
		-Werror -std=c90 -Wall -Wextra -Wpedantic

output/%.o: assets/%.bin
	@mkdir -p output
	@$(LD) -r -b binary $(BINLINKFLAGS) -o $@ $<

shrooms-vb: $(OFILES)
	@$(CC) -o $@ $(OFILES) $(SDL2FLAGS) -flto

build: shrooms-vb