-
Notifications
You must be signed in to change notification settings - Fork 45
/
Copy pathMakefile
143 lines (116 loc) · 4.11 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
.SUFFIXES: .cjs .peggy .css .html .smcat .svg .png .jpg
PEGGY=node_modules/peggy/bin/peggy.js
ESBUILD=node_modules/.bin/esbuild
GRAMMKIT=node_modules/.bin/grammkit
GENERATED_BASE_SOURCES=src/parse/smcat/smcat-parser.mjs \
src/parse/smcat-ast.schema.mts \
src/version.mts
EXTRA_GENERATED_CLI_SOURCES=src/cli/attributes-parser.mjs
GENERATED_CLI_SOURCES=$(GENERATED_BASE_SOURCES) $(EXTRA_GENERATED_CLI_SOURCES)
GENERATED_GRAMMAR_DOC=docs/grammar.html
EXTRA_GENERATED_PROD_SOURCES=docs/index.html \
docs/smcat-online-interpreter.min.js \
docs/inpage.html \
docs/state-machine-cat-inpage.min.js
GENERATED_PROD_SOURCES=$(GENERATED_BASE_SOURCES) $(EXTRA_GENERATED_PROD_SOURCES) $(GENERATED_GRAMMAR_DOC)
GENERATED_SOURCES=$(GENERATED_BASE_SOURCES) $(EXTRA_GENERATED_CLI_SOURCES) $(EXTRA_GENERATED_PROD_SOURCES)
# production rules
%smcat-parser.mjs: %peg/smcat-parser.peggy
$(PEGGY) --extra-options-file config/peggy-config-smcat-parser.json -o $@ $<
%attributes-parser.mjs: %peg/attributes-parser.peggy
$(PEGGY) --extra-options-file config/peggy-config-attributes-parser.json -o $@ $<
src/version.mts: package.json
npx tsx tools/get-version.mts > $@
src/parse/smcat-ast.schema.mts: tools/smcat-ast.schema.json
npx tsx tools/js-json.mts < $< > $@
docs/index.html: docs/index.hbs docs/smcat-online-interpreter.min.js docs/config/prod.json tools/template-to-html.mts
npx tsx tools/template-to-html.mts docs/config/prod.json < $< > $@
docs/inpage.html: docs/inpage.hbs docs/state-machine-cat-inpage.min.js docs/config/inpage-prod.json tools/template-to-html.mts
npx tsx tools/template-to-html.mts docs/config/inpage-prod.json < $< > $@
docs/state-machine-cat-inpage.min.js: docs/state-machine-cat-inpage.js
$(ESBUILD) $< \
--platform=browser \
--bundle \
--format=esm \
--minify \
--sourcemap \
--legal-comments=external \
--outfile=$@
docs/smcat-online-interpreter.min.js: $(ONLINE_INTERPRETER_SOURCES)
$(ESBUILD) docs/smcat-online-interpreter.js \
--platform=browser \
--bundle \
--format=esm \
--minify \
--sourcemap \
--legal-comments=external \
--outfile=$@
docs/grammar.html: src/parse/smcat/peg/smcat-parser.peggy
$(GRAMMKIT) --output-format html --output $@ $<
docs: $(GENERATED_SOURCES)
dist:
mkdir -p $@
public:
mkdir -p $@
public/samples:
mkdir -p $@
public/%: docs/%
cp $< $@
%.gz: %
gzip --best --stdout $< > $@
# executable targets
clean:
rm -rf $(GENERATED_SOURCES)
rm -rf coverage
rm -rf public
rm -rf dist
rm -f docs/grammar.html
cli-build: $(GENERATED_CLI_SOURCES)
distro: $(GENERATED_CLI_SOURCES) $(GENERATED_PROD_SOURCES)
pages: distro \
public \
public/index.html \
public/index.html.gz \
public/inpage.html \
public/inpage.html.gz \
public/smcat-online-interpreter.min.js \
public/smcat-online-interpreter.min.js.gz \
public/state-machine-cat-inpage.min.js \
public/state-machine-cat-inpage.min.js.gz \
public/samples \
public/samples/on-off.smcat \
public/samples/on-off.smcat.gz \
public/samples/cat.smcat \
public/samples/cat.smcat.gz \
public/samples/desugarable.smcat \
public/samples/desugarable.smcat.gz \
public/samples/sprint-states.smcat \
public/samples/sprint-states.smcat.gz \
public/samples/sprint-states.scxml \
public/samples/sprint-states.scxml.gz \
public/samples/vscode-issues-triaging.smcat \
public/samples/vscode-issues-triaging.smcat.gz \
public/samples/tcp.smcat \
public/samples/tcp.smcat.gz \
public/samples/mediaplayer.smcat \
public/samples/mediaplayer.smcat.gz \
public/samples/phone.smcat \
public/samples/phone.smcat.gz \
public/samples/karl.smcat \
public/samples/karl.smcat.gz \
public/samples/parallel.smcat \
public/samples/parallel.smcat.gz \
public/samples/bitbitggeranonymized.smcat \
public/samples/bitbitggeranonymized.smcat.gz \
public/samples/empty.smcat \
public/samples/empty.smcat.gz \
public/samples/cheatsheet.smcat \
public/samples/cheatsheet.smcat.gz \
public/samples/cassetteplayer.smcat \
public/samples/cassetteplayer.smcat.gz \
public/samples/DHCP.smcat \
public/samples/DHCP.smcat.gz \
public/samples/PDSA.smcat \
public/samples/PDSA.smcat.gz \
public/samples/kitchensink.smcat \
public/samples/kitchensink.smcat.gz