-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile
75 lines (55 loc) · 2.27 KB
/
Makefile
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
CFLAGS += $(shell pkg-config --cflags json-c)
CFLAGS += -Wall -Wextra -Wpedantic
LDFLAGS += $(shell pkg-config --libs json-c)
SRC_DIR := src
BUILD_DIR:= build
LIB_DIR := lib
TESTS_DIR := tests
# Generate challenge executables
CHALLENGES := challenge-1 challenge-2
CHALLENGE_EXECS := $(patsubst %, $(BUILD_DIR)/%.out, $(CHALLENGES))
# Generate source files for each challenge
CHALLENGE_1_SRC := $(SRC_DIR)/challenge-1/challenge-1.c
CHALLENGE_2_SRC := $(SRC_DIR)/challenge-2/challenge-2.c
# Generate object files for each challenge
CHALLENGE_1_OBJS := $(patsubst $(SRC_DIR)/challenge-1/%.c, $(BUILD_DIR)/%.o, $(CHALLENGE_1_SRC))
CHALLENGE_2_OBJS := $(patsubst $(SRC_DIR)/challenge-2/%.c, $(BUILD_DIR)/%.o, $(CHALLENGE_2_SRC))
all: $(CHALLENGE_EXECS)
$(BUILD_DIR)/challenge-1.out: $(CHALLENGE_1_OBJS) $(BUILD_DIR)/util.o
$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@
$(BUILD_DIR)/challenge-2.out: $(CHALLENGE_2_OBJS) $(BUILD_DIR)/util.o $(BUILD_DIR)/collections.o
$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@
$(BUILD_DIR)/challenge-1.o: $(CHALLENGE_1_SRC) $(LIB_DIR)/util.h
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD_DIR)/challenge-2.o: $(CHALLENGE_2_SRC) $(LIB_DIR)/util.h $(LIB_DIR)/collections.h
$(CC) $(CFLAGS) -c $< -o $@
# Generate object files for library modules
$(BUILD_DIR)/util.o: $(LIB_DIR)/util.c $(LIB_DIR)/util.h
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD_DIR)/collections.o: $(LIB_DIR)/collections.c $(LIB_DIR)/collections.h
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD_DIR)/vec_deque.o: $(LIB_DIR)/vec_deque.c $(LIB_DIR)/vec_deque.h
$(CC) $(CFLAGS) -c $< -o $@
# Tests section
UNITY_SRC := ../unity/src/unity.c
$(BUILD_DIR)/unity.o: $(UNITY_SRC)
$(CC) $(CFLAGS) -c $< -o $@
VEC_DEQUE_TEST_SRC := $(TESTS_DIR)/$(LIB_DIR)/vec_deque_tests.c
VEC_DEQUE_TEST_OBJS := $(BUILD_DIR)/vec_deque_tests.o $(BUILD_DIR)/vec_deque.o $(BUILD_DIR)/unity.o
$(BUILD_DIR)/vec_deque_tests.out: $(VEC_DEQUE_TEST_OBJS)
$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@
$(BUILD_DIR)/vec_deque_tests.o: $(VEC_DEQUE_TEST_SRC) $(LIB_DIR)/vec_deque.h
$(CC) $(CFLAGS) -c $< -o $@
.PHONY: tests
tests: $(BUILD_DIR)/vec_deque_tests.out
valgrind --leak-check=full ./$(BUILD_DIR)/vec_deque_tests.out
.PHONY: build
build:
docker build -t ggc .
mkdir -p build/
.PHONY: run
run:
docker run --rm -it -p 8080:8080 -v $(PWD):/app ggc
.PHONY: clean
clean:
rm -rf build/*