CPPFLAGS += -g -O2 -I../include -Wall -Wpedantic -Werror=strict-aliasing
CFLAGS += $(CPPFLAGS) -std=c99
CXXFLAGS += $(CPPFLAGS) -std=c++11

HEADERS = ../include/vec/vec.h \
	../include/vec/cpu.h \
	../include/vec/mem.h \
	../include/vec/defs.h \
	../include/vec/impl/ppc/altivec.h \
	../include/vec/impl/x86/avx2.h \
	../include/vec/impl/x86/avx512f.h \
	../include/vec/impl/x86/avx512bw.h \
	../include/vec/impl/x86/mmx.h \
	../include/vec/impl/x86/sse2.h \
	../include/vec/impl/x86/sse3.h \
	../include/vec/impl/x86/sse41.h \
	../include/vec/impl/x86/sse42.h \
	../include/vec/impl/generic.h \
	../include/vec/impl/gcc.h \
	test_align.h \
	test_arith.h \
	test_compare.h \
	test_shift.h \
	test_benchmark.h \
	test_benchmark_vec.c \
	test_benchmark_simple.c
BINS = test-generic test-host test-cxx
OBJS = test.o test-cxx.o test_benchmark_simple.o test_benchmark_vec.o

.PHONY: all clean test

all: $(BINS)

test.o: test.c test_benchmark_simple.o test_benchmark_vec.o $(HEADERS)
	$(CC) $(CFLAGS) -c -o $@ $<

test-cxx.o: test.cc
	$(CXX) $(CXXFLAGS) -c -o $@ $<

test-generic: test.o test_benchmark_simple.o test_benchmark_vec.o
	$(CC) $(LDFLAGS) -o $@ $^

test-host: test.o test_benchmark_simple.o test_benchmark_vec.o
	$(CC) $(LDFLAGS) -o $@ $^

test-cxx: test-cxx.o $(HEADERS)
	$(CXX) $(LDFLAGS) -o $@ $<

clean:
	$(RM) $(BINS) $(OBJS)

test: clean $(BINS)
	./test-generic
	./test-host
	./test-cxx
