1CXXFLAGS = -Wall -Werror -pedantic -O3
2LIBMATRIX = libmatrix.a
3LIBSRCS = mat.cc program.cc log.cc util.cc shader-source.cc
4LIBOBJS = $(LIBSRCS:.cc=.o)
5TESTDIR = test
6LIBMATRIX_TESTS = $(TESTDIR)/libmatrix_test
7TESTSRCS = $(TESTDIR)/options.cc \
8           $(TESTDIR)/const_vec_test.cc \
9           $(TESTDIR)/inverse_test.cc \
10           $(TESTDIR)/transpose_test.cc \
11           $(TESTDIR)/shader_source_test.cc \
12           $(TESTDIR)/util_split_test.cc \
13           $(TESTDIR)/libmatrix_test.cc
14TESTOBJS = $(TESTSRCS:.cc=.o)
15
16# Make sure to build both the library targets and the tests, and generate
17# a make failure if the tests don't pass.
18default: $(LIBMATRIX) $(LIBMATRIX_TESTS) run_tests
19
20# Main library targets here.
21mat.o : mat.cc mat.h vec.h
22program.o: program.cc program.h mat.h vec.h
23log.o: log.cc log.h
24util.o: util.cc util.h
25shader-source.o: shader-source.cc shader-source.h mat.h vec.h util.h
26libmatrix.a : mat.o stack.h program.o log.o util.o shader-source.o
27	$(AR) -r $@  $(LIBOBJS)
28
29# Tests and execution targets here.
30$(TESTDIR)/options.o: $(TESTDIR)/options.cc $(TESTDIR)/libmatrix_test.h
31$(TESTDIR)/libmatrix_test.o: $(TESTDIR)/libmatrix_test.cc $(TESTDIR)/libmatrix_test.h $(TESTDIR)/inverse_test.h $(TESTDIR)/transpose_test.h
32$(TESTDIR)/const_vec_test.o: $(TESTDIR)/const_vec_test.cc $(TESTDIR)/const_vec_test.h $(TESTDIR)/libmatrix_test.h vec.h
33$(TESTDIR)/inverse_test.o: $(TESTDIR)/inverse_test.cc $(TESTDIR)/inverse_test.h $(TESTDIR)/libmatrix_test.h mat.h
34$(TESTDIR)/transpose_test.o: $(TESTDIR)/transpose_test.cc $(TESTDIR)/transpose_test.h $(TESTDIR)/libmatrix_test.h mat.h
35$(TESTDIR)/shader_source_test.o: $(TESTDIR)/shader_source_test.cc $(TESTDIR)/shader_source_test.h $(TESTDIR)/libmatrix_test.h shader-source.h
36$(TESTDIR)/util_split_test.o: $(TESTDIR)/util_split_test.cc $(TESTDIR)/util_split_test.h $(TESTDIR)/libmatrix_test.h util.h
37$(TESTDIR)/libmatrix_test: $(TESTOBJS) libmatrix.a
38	$(CXX) -o $@ $^
39run_tests: $(LIBMATRIX_TESTS)
40	$(LIBMATRIX_TESTS)
41clean :
42	$(RM) $(LIBOBJS) $(TESTOBJS) $(LIBMATRIX) $(LIBMATRIX_TESTS)
43