CFLAGS = -I lib/libdvec/include -I lib/libhmap/include CFLAGS += -I lib/libmaxint/include -I lib/liballoc/include CFLAGS += -I lib/liblist/include CFLAGS += -Wunused-variable -Wunused-function -Wformat CFLAGS += -Wconversion -Wsign-compare CFLAGS += -I common -g -Werror -std=c99 ifeq "$(DEBUG)" "1" CFLAGS += -DLIBDVEC_ASSERT_ARGS -DLIBDVEC_ASSERT_ALLOC LIBDVEC_ENV = DEBUG=1 ASSERT_ALLOC=1 ASSERT_ARGS=1 CFLAGS += -DLIBHMAP_ASSERT_ARGS -DLIBHMAP_ASSERT_ALLOC LIBHMAP_ENV = DEBUG=1 ASSERT_ALLOC=1 ASSERT_ARGS=1 LIBMAXINT_ENV = DEBUG=1 LIBALLOC_ENV = DEBUG=1 CFLAGS += -DLIBLIST_ASSERT_ARGS LIBLIST_ENV = DEBUG=1 LIBPQ_ENV = DEBUG=1 endif DAYS = $(shell seq 1 25 | xargs printf "%02i\n") all:: build run include */info.mk lib/libdvec/build/libdvec.a: make -C lib/libdvec build/libdvec.a $(LIBDVEC_ENV) lib/libhmap/build/libhmap.a: make -C lib/libhmap build/libhmap.a $(LIBHMAP_ENV) lib/libmaxint/build/libmaxint.a: make -C lib/libmaxint build/libmaxint.a $(LIBMAXINT_ENV) lib/liballoc/build/liballoc.a: make -C lib/liballoc build/liballoc.a $(LIBALLOC_ENV) lib/liblist/build/liblist.a: make -C lib/liblist build/liblist.a $(LIBLIST_ENV) lib/libpq/build/libpq.a: make -C lib/libpq build/libpq.a $(LIBPQ_ENV) define make-day build:: $1/main $1/main: $($(1)_SRC) $($(1)_HDR) $(CC) -o $1/main $($(1)_SRC) $(CFLAGS) $($(1)_CFLAGS) \ $(LDFLAGS) $($(1)_LDFLAGS) $(LDLIBS) $($(1)_LDLIBS) .PHONY: $1/run run:: $1/run $1/run: $1/main @echo "== day $1 ==" @echo -en "\npart 1: " && cd $1 && time ./main 1 @echo -en "\npart 2: " && cd $1 && time ./main 2 @echo "" .PHONY: $1/debug debug:: $1/debug $1/debug: $1/main @echo "== day $1 part 1 ==" @cd $1 && valgrind --error-exitcode=1 --leak-check=full \ --show-leak-kinds=all ./main 1 @echo "== day $1 part 2 ==" @cd $1 && valgrind --error-exitcode=1 --leak-check=full \ --show-leak-kinds=all ./main 2 endef $(foreach day,$(DAYS),$(eval $(call make-day,$(day)))) clean: rm -f */main cleanall: clean make -C lib/libdvec clean make -C lib/libhmap clean make -C lib/libmaxint clean make -C lib/liballoc clean .PHONY: all build run debug clean cleanall