-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
63 lines (47 loc) · 1.63 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
ROOT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
TARGET := shado_edit
BIN_DIR := bin
SRC_DIR := src
INC_DIR := inc
# Find all src files in SRC_DIRS
SRCS := $(wildcard $(SRC_DIR)/*.c)
OBJS := $(SRCS:$(SRC_DIR)/%.c=$(BIN_DIR)/%.o)
DEPS := $(OBJS:.o=.d)
INC_FLAGS := $(addprefix -I,$(INC_DIR))
CPPFLAGS := $(INC_FLAGS) -MMD -MP
CFLAGS := -ggdb3 -Wno-deprecated -Wall -Wextra -pedantic -std=c99 -pie -pedantic -static-libasan # -fsanitize=address
LDFLAGS :=
LDLIBS := -lm
MAJOR_VERSION := 02
MINOR_VERSION := 01
PATCH_VERSION := 01
AUTOGEN_FILE := $(INC_DIR)/version.h
$(INC_DIR)/version.h: debug release
debug : $(VERSION_FILE)
release : $(VERSION_FILE)
.SECONDEXPANSION:
$(INC_DIR)/version.h : $$(MAKEFILE_LIST)
@echo "Generating $@ ..."
@echo "/* Auto-generated by Makefile */" > $@
@echo "" >> $@
@echo "#define MAJOR_VERSION \"$(MAJOR_VERSION)\"" >> $@
@echo "#define MINOR_VERSION \"$(MINOR_VERSION)\"" >> $@
@echo "#define PATCH_VERSION \"$(PATCH_VERSION)\"" >> $@
all: $(BIN_DIR)/$(TARGET)
# Final build
$(BIN_DIR)/$(TARGET): $(OBJS)
sed -i "s/#define BUILD_NUMBER .*/#define BUILD_NUMBER \"$(AUTOGEN_NEXT)\"/" $(AUTOGEN_FILE)
sed -i "s/#define BUILD_DATE.*/#define BUILD_DATE \"$$(date +'%Y-%m-%d')\"/" $(AUTOGEN_FILE)
$(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
# C Sources
$(BIN_DIR)/%.o: $(SRC_DIR)/%.c
mkdir -p $(dir $@)
$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
clean:
@$(RM) -rv $(BIN_DIR)
valgrind: shado
valgrind -s --log-file=./.valgrind.log --leak-check=full --show-leak-kinds=all --track-origins=yes ./shado src/shado.c
gdb: shado
gdb ./shado
.PHONY: all clean valgrind gdb debug release
-include $(DEPS)