all: aoc aocdbg aocclang aoctcc

clean:
	rm aocdbg aoc aocclang aoctcc

aocdbg: *.c *.h
	gcc -std=c99 -pedantic -pedantic-errors \
	-Werror -Wall -Wextra \
	-Wc99-c11-compat \
	-Wc11-c2x-compat \
	-Wbad-function-cast \
	-Wcast-align \
	-Wcast-qual \
	-Wfloat-equal \
	-Wformat=2 \
	-Wformat-signedness \
	-Winline \
	-Wlogical-op \
	-Wnested-externs \
	-Wno-missing-braces \
	-Wno-missing-field-initializers \
	-Wold-style-definition \
	-Wpointer-arith \
	-Wredundant-decls \
	-Wsign-conversion \
	-Wshadow \
	-Wstrict-aliasing=2 \
	-Wstrict-overflow=5 \
	-Wstrict-prototypes \
	-Wswitch-default \
	-Wswitch-enum \
	-Wundef \
	-Wunreachable-code \
	-Wvla \
	-fno-omit-frame-pointer -ffloat-store -fno-common -fstrict-aliasing \
	-Og -ggdb3 \
	*.c \
	-o aocdbg

aoc: *.c *.h
	gcc -std=c99 -pedantic -pedantic-errors \
	-flto -fno-omit-frame-pointer -ffloat-store -fno-common -fstrict-aliasing \
	-O3 -DNDEBUG \
	*.c \
	-o aoc

aocclang: *.c *.h
	clang -std=c99 -pedantic \
	-Weverything \
	-Wno-declaration-after-statement \
	-Wno-implicit-int-conversion \
	-Wno-shorten-64-to-32 \
	*.c \
	-o aocclang

aoctcc: *.c *.h
	tcc -std=c99 -pedantic \
	-Wall \
	*.c \
	-o aoctcc
