blob: 97005e3bec73f87344a427278cadfcc34ab08c6e (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
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
|