-
Notifications
You must be signed in to change notification settings - Fork 2
/
Makefile
105 lines (71 loc) · 2.97 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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
######################################################################
# VARS #
######################################################################
TAB_SIZE = 4
UNAME_S := $(shell uname -s)
######################################################################
# NAME #
######################################################################
NAME = minivim
#NAME = mvm
BIN_DIR ?= /usr/local/bin
######################################################################
# COMPILER #
######################################################################
CC = gcc
# flags
CFLAGS += -D TAB_SIZE=$(TAB_SIZE)
CURSOR_HL ?= 1
CFLAGS += -D CURSOR_HL=$(CURSOR_HL)
######################################################################
# LIBS #
######################################################################
CFLAGS += -I ./inc
#LDFLAGS = -L ./inc
# ncurses will be probably implemented in the future, right now only supports VT100 escapes
#LDLIBS = -lncurses
######################################################################
# RM #
######################################################################
RM = rm
RMFLAGS = -rf
######################################################################
# PATHS #
######################################################################
SRC_PATH = src
OBJ_PATH = obj
######################################################################
# SRC #
######################################################################
SRC_FILES = main.c init.c input.c \
output.c append_buff.c find.c \
file_io.c editor_ops.c row_ops.c \
syntax_hl.c terminal.c
OBJ_FILES = $(SRC_FILES:%.c=%.o)
SRC = $(addprefix $(SRC_PATH)/, $(SRC_FILES))
OBJ = $(addprefix $(OBJ_PATH)/, $(OBJ_FILES))
######################################################################
# RULES #
######################################################################
.PHONY: all dev clean fclean re
all: $(NAME)
install: $(NAME)
install $(NAME) $(BIN_DIR)
$(NAME): $(OBJ)
$(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) $(LDLIBS)
ifeq ($(UNAME_S),Linux)
sanitize: CFLAGS += -pedantic -fsanitize=address -fsanitize=leak -fsanitize=undefined -fsanitize=bounds -fsanitize=null -g3
endif
ifeq ($(UNAME_S),Darwin)
sanitize: CFLAGS += -pedantic -fsanitize=address -g3
endif
sanitize: $(NAME)
$(OBJ_PATH)/%.o: $(SRC_PATH)/%.c | $(OBJ_PATH)
$(CC) $(CFLAGS) -c $< -o $@
$(OBJ_PATH):
mkdir -p $(OBJ_PATH) 2> /dev/null
clean:
$(RM) $(RMFLAGS) $(OBJ_PATH)
fclean: clean
$(RM) $(RMFLAGS) $(NAME)
re: fclean all