CFLAGS=-std=c99 -Wextra -pedantic -g -O2

CFLAGS=-std=c99 -Wextra -pedantic -g -O0

TARGETS=approximate-pi linked-list mandelbrot threads circular-buffer structs ncurses-pong bit-fuckery bit-fuckery2 checkcheck multibrot bloom wo-lernen lua-foo binsearch test-inline-assembly uiowa-threads-example mtrace-test av-variance
EXTRAS=mandelbrot.bmp multibrot.png test-inline-assembly.s tags mtrace-test.trace mtrace-test.txt

.PHONY: all
all: $(TARGETS) $(EXTRAS)

.PHONY: clean
clean:
	rm -f $(TARGETS) $(EXTRAS) *.o *~ cppcheck.txt

.PHONY: cppcheck
cppcheck: cppcheck.txt

cppcheck.txt: *.c *.h
	cppcheck . 2> $@
	cat $@

tags: *.c
	ctags -R .

mandelbrot: mandelbrot.c
	$(CC) $(CFLAGS) $(shell sdl-config --cflags) -o $@ $< $(shell sdl-config --libs) -lm

mandelbrot.bmp: mandelbrot
	./mandelbrot

threads: threads.c
	$(CC) $(CFLAGS) -o $@ $< -pthread

ncurses-pong: ncurses-pong.c
	$(CC) $(CFLAGS) -o $@ $< -lncurses

checkcheck: checkcheck.c
	$(CC) $(CFLAGS) -o $@ $< -lcheck

multibrot: multibrot.c
	$(CC) $(CFLAGS) -o $@ $< -lm -lpng -pthread

multibrot.png: multibrot
	./multibrot -j2

lua-foo: lua-foo.c
	$(CC) $(CFLAGS) -o $@ $< -llua -lm

test-inline-assembly: test-inline-assembly.c
	$(CC) -Wall -o $@ $<

test-inline-assembly.s: test-inline-assembly.c
	$(CC) -Wall -S -o $@ $<

mtrace-test.trace: mtrace-test
	MALLOC_TRACE=$@ ./mtrace-test

mtrace-test.txt: mtrace-test.trace
	-mtrace mtrace-test mtrace-test.trace > mtrace-test.txt

uiowa-threads-example: uiowa-threads.o uiowa-threads-example.c
	$(CC) $(CFLAGS) -o $@ $^

av-variance: av-variance.c
	$(CC) $(CFLAGS) -o $@ $< -lm