-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathMakefile
170 lines (121 loc) · 5.35 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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
C99FLAGS=-std=c99 -Wall -Wextra -Wno-unused-variable -Wno-unused-function -Wno-unused-parameter \
-Wno-unused-value -Wno-unused-but-set-variable -Wno-missing-braces -Wno-overlength-strings \
-Wno-sometimes-uninitialized -Wno-infinite-recursion -Werror -pedantic -O0 -fmax-errors=9 \
-Wno-unused-command-line-argument
CC=gcc $(C99FLAGS)
CCSAN=$(CC) -fsanitize=undefined -fsanitize=address
SRCS=lib/std/* lib/arg-parser/* src/*
.PHONY: default show showsan build buildsan debug update check checksan clean \
install-vim install-code install-atom install profile play-snake test-verify test-update \
examples check-origin check-origin-fetch check-origin-build check-origin-diff check-origin-fast
default: show bin/snake.c bin/fractal.c
show: bin/mirth0.c bin/mirth1.c bin/mirth2.c bin/mirth3.c
diff --strip-trailing-cr bin/mirth0.c bin/mirth1.c | head -n 5
diff --strip-trailing-cr bin/mirth1.c bin/mirth2.c | head -n 10
diff --strip-trailing-cr bin/mirth2.c bin/mirth3.c | head -n 10
showsan: bin/mirth0.c bin/mirth1.c bin/mirth2.c bin/mirth3san.c
diff --strip-trailing-cr bin/mirth0.c bin/mirth1.c | head -n 5
diff --strip-trailing-cr bin/mirth1.c bin/mirth2.c | head -n 10
diff --strip-trailing-cr bin/mirth2.c bin/mirth3san.c | head -n 10
build: bin/mirth0 bin/mirth1 bin/mirth2 bin/mirth1.c bin/mirth2.c bin/mirth3.c
buildsan: bin/mirth0 bin/mirth1 bin/mirth2san bin/mirth1.c bin/mirth2.c bin/mirth3san.c
debug: bin/mirth3debug
update: bin/mirth0.c bin/mirth3.c
cp bin/mirth3.c bin/mirth0.c
check: bin/mirth0.c bin/mirth1.c bin/mirth2.c bin/mirth3.c
diff --strip-trailing-cr bin/mirth2.c bin/mirth3.c
diff --strip-trailing-cr bin/mirth1.c bin/mirth3.c
diff --strip-trailing-cr bin/mirth0.c bin/mirth3.c
checksan: bin/mirth0.c bin/mirth1.c bin/mirth2.c bin/mirth3san.c
diff --strip-trailing-cr bin/mirth0.c bin/mirth3san.c
diff --strip-trailing-cr bin/mirth1.c bin/mirth3san.c
diff --strip-trailing-cr bin/mirth2.c bin/mirth3san.c
check-origin: check-origin-fetch check-origin-build check-origin-diff
check-origin-fetch:
git show origin/main:bin/mirth0.c > bin/origin-mirth0.c
check-origin-build:
$(CC) bin/origin-mirth0.c -o bin/origin-mirth0
bin/origin-mirth0 src/main.mth -o bin/origin-mirth1.c
$(CC) bin/origin-mirth1.c -o bin/origin-mirth1
bin/origin-mirth1 src/main.mth -o bin/origin-mirth2.c
$(CC) bin/origin-mirth2.c -o bin/origin-mirth2
bin/origin-mirth2 src/main.mth -o bin/origin-mirth3.c
check-origin-diff: bin/mirth3.c
diff bin/mirth3.c bin/origin-mirth3.c
check-origin-fast:
touch bin/origin-mirth0.c
git show origin/main:bin/mirth0.c > bin/origin-mirth0-fast.c
diff -q bin/origin-mirth0.c bin/origin-mirth0-fast.c || ( cp bin/origin-mirth0-fast.c bin/origin-mirth0.c && $(CC) bin/origin-mirth0.c -o bin/origin-mirth0)
bin/origin-mirth0 src/main.mth -c
clean:
cp bin/mirth0.c mirth0.c
rm -rf bin/*.c bin/*.exe bin/eval bin/test
mv mirth0.c bin/
install-vim:
mkdir -p ~/.vim/bundle
rm -rf ~/.vim/bundle/mirth-vim
cp -r tools/mirth-vim ~/.vim/bundle/
install-code:
code --install-extension tools/mirth-code/mirth-*.vsix
update-code:
cd tools/mirth-code && vsce package
install-atom:
apm link tools/mirth-atom
install: bin/mirth0
tools/install.sh bin/mirth0
profile: bin/mirth_prof
time bin/mirth_prof
play-snake: bin/snake
bin/snake
play-fractal: bin/fractal
bin/fractal
examples: bin/mirth2
bash tools/build-examples.sh
test-verify:
bash tools/mirth-test.sh -v
test-update:
bash tools/mirth-test.sh -u
#########
bin/%: bin/%.c
$(CC) -o $@ $^
bin/mirth0san: bin/mirth0.c
$(CCSAN) -o bin/mirth0san bin/mirth0.c
bin/mirth1san: bin/mirth1.c
$(CCSAN) -o bin/mirth1san bin/mirth1.c
bin/mirth2san: bin/mirth2.c
$(CCSAN) -o bin/mirth2san bin/mirth2.c
bin/mirth1debug: bin/mirth1debug.c
$(CC) -g -o bin/mirth1debug bin/mirth1debug.c
bin/mirth2debug: bin/mirth2debug.c
$(CC) -g -o bin/mirth2debug bin/mirth2debug.c
bin/mirth3debug: bin/mirth3debug.c
$(CC) -g -o bin/mirth3debug bin/mirth3debug.c
bin/mirth1.c: bin/mirth0 $(SRCS)
bin/mirth0 src/main.mth -o bin/mirth1.c
bin/mirth2.c: bin/mirth1 $(SRCS)
rm -f bin/mirth2.c && bin/mirth1 src/main.mth -o bin/mirth2.c
bin/mirth3.c: bin/mirth2 $(SRCS)
rm -f bin/mirth3.c && bin/mirth2 src/main.mth -o bin/mirth3.c
bin/mirth1debug.c: bin/mirth0 $(SRCS)
bin/mirth0 --debug src/main.mth -o bin/mirth1debug.c
bin/mirth2debug.c: bin/mirth1debug $(SRCS)
bin/mirth1debug --debug src/main.mth -o bin/mirth2debug.c
bin/mirth3debug.c: bin/mirth2debug $(SRCS)
bin/mirth2debug --debug src/main.mth -o bin/mirth3debug.c
bin/mirth3san.c: bin/mirth2san $(SRCS)
bin/mirth2san src/main.mth -o bin/mirth3san.c
bin/mirth_prof.c: bin/mirth3.c
bin/mirth_prof: bin/mirth_prof.c
$(CC) -g -fprofile-instr-generate -o bin/mirth_prof bin/mirth_prof.c
bin/snake.c: bin/mirth2 lib/std/* examples/snake.mth examples/sdl2.mth
bin/mirth2 --debug examples/snake.mth -o bin/snake.c
bin/snake: bin/snake.c
$(CC) -o bin/snake bin/snake.c `pkg-config --cflags --libs sdl2`
bin/snake-infer-types: bin/snake-infer-types.c
$(CC) -o bin/snake-infer-types bin/snake-infer-types.c `pkg-config --cflags --libs sdl2`
bin/fractal.c: bin/mirth2 lib/std/* examples/fractal.mth examples/sdl2.mth
bin/mirth2 --debug examples/fractal.mth -o bin/fractal.c
bin/fractal: bin/fractal.c examples/fractal-extern.c
$(CC) -o bin/fractal bin/fractal.c examples/fractal-extern.c `pkg-config --cflags --libs sdl2` -lm
bin/hello: bin/hello.c
$(CC) -o bin/hello bin/hello.c