CC = gcc CFLAGS = -Wall -Wextra -Werror -pedantic -std=c99 -O2 -D_FORTIFY_SOURCE=2 -D_POSIX_C_SOURCE=200809L -fstack-protector-strong -Wformat-security -Wnull-dereference -I include LDFLAGS = -lm CFLAGS_DEBUG = -Wall -Wextra -Werror -pedantic -std=c99 -g -O0 -D_POSIX_C_SOURCE=200809L -fstack-protector-strong -Wformat-security -Wnull-dereference -I include LDFLAGS_DEBUG = $(LDFLAGS) EXAMPLES = ann_xor buffer bin direct escape genetic_ann genetic_char \ genetic_pushdown_btc pool pushdown stack ufo TESTS = test_stack test_pool test_buffer test_bin test_pushdown \ test_escape test_direct test_ann test_genetic test_flat \ test_uri test_ufo test_interpolate test_frontmatter test_dotagents \ test_clio EXAMPLE_BINS = $(addprefix bin/, $(EXAMPLES)) TEST_BINS = $(addprefix tests/, $(TESTS)) .PHONY: all clean examples tests run run-tests debug debug-tests valgrind-tests all: examples tests examples: $(EXAMPLE_BINS) tests: $(TEST_BINS) $(EXAMPLE_BINS): bin/%: example/%.c $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) $(TEST_BINS): tests/%: tests/%.c $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) debug: $(MAKE) examples CFLAGS="$(CFLAGS_DEBUG)" LDFLAGS="$(LDFLAGS_DEBUG)" debug-tests: $(MAKE) tests CFLAGS="$(CFLAGS_DEBUG)" LDFLAGS="$(LDFLAGS_DEBUG)" valgrind-tests: debug-tests @fail=0; \ for t in $(TEST_BINS); do \ echo ">>> $$t"; valgrind --error-exitcode=1 ./$$t; \ if [ $$? -ne 0 ]; then fail=1; fi; \ echo; \ done; \ if [ $$fail -ne 0 ]; then echo "SOME TESTS FAILED"; exit 1; \ else echo "ALL TESTS PASSED"; fi clean: rm -f $(EXAMPLE_BINS) $(TEST_BINS) run: examples @for ex in $(EXAMPLE_BINS); do \ echo ">>> $$ex"; ./$$ex; echo; done run-tests: tests @fail=0; \ for t in $(TEST_BINS); do \ echo ">>> $$t"; ./$$t; \ if [ $$? -ne 0 ]; then fail=1; fi; \ echo; \ done; \ if [ $$fail -ne 0 ]; then echo "SOME TESTS FAILED"; exit 1; \ else echo "ALL TESTS PASSED"; fi