blob: df9e703e9a255b624ac87ec15eb3184c84eff54f (
plain) (
blame)
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
|
#!/bin/bash
# builds the vs code extension, with the language server inside it: the tinyvm
# javascript vm (built from src/js/tinyvm.ts) and the server's image
# (build/js/lsp.json, from build/lsp/genome.h and its map), and the wasm server
# (src/tools/mklspwasm.sh) when clang can build it. needs node and tsc; the
# server build (src/tools/mklsp.sh) runs first if build/lsp is missing.
#
# everything generated lands in build/. the packaged files are staged into
# editors/vscode/server/ only for as long as vsce is packing, then removed, so a
# fresh clone has no extension until it is built.
# src/tools/mkvsix.sh [outfile.vsix]
set -e
case "${1:-}" in
--help|-h) printf '%s\n' 'usage: src/tools/mkvsix.sh [OUTFILE.vsix]' 'builds and packages the vscode extension; defaults to build/zc-language-support.vsix.' 'requires node, tsc and vsce; includes the wasm server when clang supports wasm32.' 'environment: VSCE selects the extension packager.'; exit 0 ;;
-*) echo "mkvsix: unknown option $1; use --help for usage" >&2; exit 2 ;;
esac
cd "$(dirname "$0")/../.."
OUT=${1:-$PWD/build/zc-language-support.vsix}
case "$OUT" in /*) ;; *) OUT="$PWD/$OUT" ;; esac
mkdir -p "$(dirname "$OUT")"
JS=build/js
STAGE=build/editors/vscode/server
PACKDIR=editors/vscode/server
bash src/tools/mklsp.sh build/lsp >/dev/null
# typescript errors stop packaging, so broken generated code is never shipped.
command -v tsc >/dev/null || { echo "mkvsix: tsc is not installed" >&2; exit 1; }
tsc src/js/tinyvm.ts --target es2020 --lib es2020,dom --module commonjs --outDir "$JS"
node src/js/extract_lsp.js
mkdir -p "$STAGE"
cp "$JS/tinyvm.js" "$JS/layout.js" "$JS/lsp.json" "$STAGE/"
# the wasm server runs when there is one; without clang the vm server is packed alone
if command -v clang >/dev/null && clang --print-targets | grep -q wasm32; then
LSP_BUILD_DIR=build/lsp LSP_REUSE_BUILD=1 bash src/tools/mklspwasm.sh "$STAGE/lsp.wasm"
else
rm -f "$STAGE/lsp.wasm"
echo "no clang with wasm32: packing the javascript vm server only" >&2
fi
# vsce packs the extension directory, so the server has to sit inside it while
# it runs. stage it, package, and leave the tree as it was.
cleanup() { rm -rf "$PACKDIR"; }
trap cleanup EXIT INT TERM
rm -rf "$PACKDIR"
mkdir -p "$PACKDIR"
cp "$STAGE"/* "$PACKDIR"/
cd editors/vscode
if [ -n "${VSCE:-}" ]; then
"$VSCE" package --allow-missing-repository --skip-license -o "$OUT" >/dev/null
elif command -v vsce >/dev/null; then
vsce package --allow-missing-repository --skip-license -o "$OUT" >/dev/null
else
npx -y @vscode/vsce package --allow-missing-repository --skip-license -o "$OUT" >/dev/null
fi
echo "$OUT"
|