CC=
LD=
MKDIR=mkdir -p
RM=rm
PCFLAGS=
PLFLAGS=
LIBNAME=
OUTDIR=bin
SRCDIR=src
LFLAGS=
CFLAGS=
RMEXTRA=
GDCCBUILD=OFF
EXAMPLEO=
EXAMPLEC=

ifeq ($(GDCCBUILD),ON)
	CC+=gdcc-cc
	LD+=gdcc-ld
	LIBNAME+=$(OUTDIR)/LoveToken.bin
	PCFLAGS+=--bc-target=ZDoom -i$(SRCDIR)
	LFLAGS+=--bc-target=ZDoom
	EXAMPLEC+=examples/gdcc.c
	# These are completely arbitrary.
	EXAMPLEO+=$(OUTDIR)/libc.ir $(OUTDIR)/libGDCC.ir $(OUTDIR)/libGDCC-c.ir $(OUTDIR)/libGDCC-ZDACS-asm.ir
else
	EXAMPLEC+=examples/main.c
	PCFLAGS+=--std=c99 -g -ggdb -O2 -Wall -c -I$(SRCDIR)
	
	ifeq ($(OS),Windows_NT)
		CC+=mingw32-gcc
		LD+=mingw32-gcc
		PLFLAGS+=-shared -g -ggdb
		PLFLAGS2+=-Wl,--out-implib,$(OUTDIR)/libLoveToken.a -liconv
		LIBNAME+=$(OUTDIR)/LoveToken.dll
		RMEXTRA+=$(OUTDIR)/libLoveToken.a
	else
		ifeq ($(shell uname -s), Linux)
			CC+=gcc
			LD+=gcc
			PCFLAGS+=-fPIC
			PLFLAGS2+=-liconv
			LIBNAME+=$(OUTDIR)/LoveToken.so
		endif
	endif
endif

all: $(OUTDIR)
	$(CC) $(CFLAGS) $(PCFLAGS) -o $(OUTDIR)/lt.o $(SRCDIR)/lt.c
	$(LD) $(LFLAGS) $(PLFLAGS) -o $(LIBNAME) $(OUTDIR)/lt.o $(PLFLAGS2)

$(OUTDIR):
	$(MKDIR) $(OUTDIR)

clean:
	$(RM) $(LIBNAME) $(OUTDIR)/lt.o $(RMEXTRA)

example: all
	$(CC) $(CFLAGS) $(PCFLAGS) -o $(OUTDIR)/example.o $(EXAMPLEC)
	$(LD) $(LFLAGS) -o $(OUTDIR)/example $(OUTDIR)/example.o $(EXAMPLEO) $(OUTDIR)/lt.o $(PLFLAGS2)