-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile
138 lines (103 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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# meta
TARGET := fs-make
VERSION := 1.0.0
# dirs
# in termux, PREFIX points to /data/data/com.termux/files/usr/
# else it is empty
PREFIX := $(shell echo ${PREFIX})
# by default installs to /usr/local/bin
BIN := /usr/local/bin
ifneq ($(PREFIX),)
# in linux-android, ${PREFIX}/usr/local/bin
# doesn't exist; so instead install it to
# ${PREFIX}/usr/bin/
BIN := $(PREFIX)/../usr/bin
endif
INCLUDES := ./includes
SRC := ./src
# files
YFILES := $(wildcard $(SRC)/*.y)
TABFILES := \
$(YFILES:.y=.tab.c) \
$(YFILES:.y=.tab.h)
TABFILES := $(patsubst $(SRC)/%, %, $(TABFILES))
YYFILES := lex.yy.c
CFILES := \
$(wildcard $(SRC)/*.c) \
$(YFILES:.y=.tab.c) \
$(YYFILES)
CPPFILES := $(wildcard $(SRC)/*.cpp)
OBJECTS := \
$(CFILES:.c=.o) \
$(CPPFILES:.cpp=.o)
OBJECTS := $(patsubst $(SRC)/%, %, $(OBJECTS))
DEPS := $(OBJECTS:.o=.d)
.PHONY : all clean install uninstall
# colours
PRE := \033[
NC := $(PRE)0m
GREEN := $(PRE)1;32m
YELLOW := $(PRE)1;33m
BLUE := $(PRE)1;36m
RED := $(PRE)1;31m
# tools
# generated by the configure script
-include tools
RM := rm
IN := install
# flags
DEFINES := -D TARGET=\"$(TARGET)\" -D VERSION=\"$(VERSION)\"
CFLAGS := $(DEFINES) -I $(INCLUDES) -Wall -Wextra -Wpedantic -g -MMD -MP -c
FLEXFLAGS :=
BISONFLAGS := -d
RMFLAGS := -f
INFLAGS :=
TREEFLAGS := -a
# recipes
all: $(TARGET)
@echo "$(GREEN)Build complete!$(NC)\n"
@echo "$(BLUE)Now, install $(YELLOW)$(TARGET)$(BLUE) with: $(YELLOW)make install$(NC)"
uninstall:
@echo "$(RED)... uninstalling $(YELLOW)$(TARGET)$(RED) ...$(NC)\n"
$(SUDO) $(RM) $(RMFLAGS) $(BIN)/$(TARGET)
@echo ""
@echo "$(RED)Uninstallation complete. :($(NC)\n"
@echo "$(BLUE)Now, install $(YELLOW)$(TARGET)$(BLUE) with: $(YELLOW)make install$(NC)"
install:
@echo "$(GREEN)... installing $(YELLOW)$(TARGET)$(GREEN) ...$(NC)\n"
$(SUDO) $(IN) $(INFLAGS) $(TARGET) $(BIN)/$(TARGET)
@echo ""
@echo "$(GREEN)Installation complete!$(NC)\n"
@echo "$(BLUE)Now, run $(YELLOW)$(TARGET)$(BLUE) with: $(YELLOW)$(TARGET)$(NC)"
$(TARGET): $(OBJECTS)
@echo "$(BLUE)... making $(YELLOW)$@ $(BLUE)...$(NC)\n"
$(CPP) -o $(TARGET) $^
@echo ""
%.o: $(SRC)/%.c
@echo "$(BLUE)... making $(YELLOW)$@ $(BLUE)...$(NC)\n"
$(CC) $(CFLAGS) $<
@echo ""
%.o: %.c
@echo "$(BLUE)... making $(YELLOW)$@ $(BLUE)...$(NC)\n"
$(CC) $(CFLAGS) $<
@echo ""
%.o: $(SRC)/%.cpp
@echo "$(BLUE)... making $(YELLOW)$@ $(BLUE)...$(NC)\n"
$(CPP) $(CFLAGS) $<
@echo ""
lex.yy.c: $(SRC)/lexer.l
@echo "$(BLUE)... making $(YELLOW)$@ $(BLUE)...$(NC)\n"
$(FLEX) $(FLEXFLAGS) $<
@echo ""
grammar.tab.c grammar.tab.h: $(SRC)/grammar.y
@echo "$(BLUE)... making $(YELLOW)grammar.tab.c $(BLUE)and $(YELLOW)grammar.tab.h $(BLUE)...$(NC)\n"
$(BISON) $(BISONFLAGS) $<
@echo ""
clean:
@echo "$(RED)... cleaning up ...$(NC)\n"
$(RM) $(RMFLAGS) $(OBJECTS) $(DEPS) $(YYFILES) $(TABFILES) $(TARGET)
@echo ""
@echo "$(RED)Cleaning complete!$(NC)\n"
@echo "$(BLUE)Now, build $(YELLOW)$(TARGET)$(BLUE) with: $(YELLOW)make$(NC)"
# from the generated dependency files
-include $(DEPS)