RUSTFLAGS ?=
OUTDIR ?= ./build

BINDIR = $(OUTDIR)/bin
LIBDIR = $(OUTDIR)/lib
TMPDIR = $(OUTDIR)/tmp

RUST_SRC = $(shell find src/. -type f -name '*.rs') \
	src/sdl2/generated/keycode.rs                   \
	src/sdl2/generated/scancode.rs

.PHONY: all
all: $(TMPDIR)/libsdl2.dummy

UNAME=$(shell uname)

ifeq ($(UNAME),Darwin)
  # If the user wasn't explicit, see if SDL2 library exists
  ifeq ("$(strip $(SDL_MODE))","")
    SDL_CHECK=$(shell pkg-config --exists sdl2)
    ifeq ($(SDL_CHECK),0)
      SDL_MODE = dylib
    else
      SDL_MODE = framework
    endif
  endif

  ifeq ($(SDL_MODE),framework)
    RUSTFLAGS+=--cfg mac_framework
  else
    RUSTFLAGS+=--cfg mac_dylib
  endif
endif

$(BINDIR) $(LIBDIR) $(TMPDIR):
	mkdir -p '$@'

$(TMPDIR)/codegen: $(wildcard src/codegen/*.rs) $(TMPDIR)
	rustc -o '$(TMPDIR)/codegen' src/codegen/main.rs $(RUSTFLAGS)

src/sdl2/generated/%.rs: $(TMPDIR)/codegen
	'$(TMPDIR)/codegen' $(patsubst src/sdl2/generated/%,%,$@) src/sdl2/generated/

$(TMPDIR)/libsdl2.dummy: src/sdl2/lib.rs $(RUST_SRC) $(LIBDIR) $(TMPDIR)
	rustc --out-dir '$(LIBDIR)' src/sdl2/lib.rs $(RUSTFLAGS)
	touch $@

compile_demo: src/demo/main.rs src/demo/video.rs $(TMPDIR)/libsdl2.dummy $(BINDIR)
	rustc -o '$(BINDIR)/demo' -L '$(LIBDIR)' src/demo/main.rs

demo: compile_demo
	'$(BINDIR)/demo'

.PHONY: clean
clean:
	rm -rf src/sdl2/generated
	rm -rf '$(OUTDIR)'
