-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
82 lines (69 loc) · 3.5 KB
/
Makefile
File metadata and controls
82 lines (69 loc) · 3.5 KB
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
.PHONY: all help install_base install_deps build_docs build test run build_wasm build_docker run_docker
all: help
help:
@echo "Available commands:"
@echo " make install_base - Install Node.js"
@echo " make install_deps - Install dependencies (npm install)"
@echo " make build_docs - Build API docs and put them in 'docs' directory (or dir given in DOCS_DIR)"
@echo " make build - Build the CLI binary (or to dir given in BIN_DIR)"
@echo " make test - Run tests locally"
@echo " make run - Run the CLI. E.g., make run ARGS='--version'"
@echo " make build_wasm - Build the WASM output"
@echo " make build_docker - Build Docker images"
@echo " make run_docker - Run Docker images"
@echo " make build_with_ts_go - Build cdd-ts utilizing the local ts-morph wasm fork"
@echo " make build_with_ts_go_assemblyscript - Build cdd-ts utilizing the new AOT Go+AS architecture"
install_base:
@echo "Please install Node.js >= 18.0.0 manually if not installed."
npm --version || echo "npm not found. Please install Node.js."
install_deps:
npm install
DOCS_DIR ?= docs
build_docs:
npm run docs
BIN_DIR ?= dist
build:
npm run build
@if [ "$(BIN_DIR)" != "dist" ]; then \
mkdir -p $(BIN_DIR); \
cp -r dist/* $(BIN_DIR)/; \
fi
test:
npm run test
run: build
node $(BIN_DIR)/cli.js $(ARGS)
build_wasm:
@echo "Building WASM (browser bundle)..."
npx esbuild dist/index.js --bundle --minify --platform=browser --target=es2020 --alias:node:path=path-browserify --alias:node:url=./wasm-stubs/node-url.js --alias:node:fs=./wasm-stubs/node-fs.js --alias:node:fs/promises=./wasm-stubs/node-fs-promises.js --alias:node:os=./wasm-stubs/node-os.js --outfile=bin/cdd-ts.js
@echo "Compiling to WebAssembly..."
npx -y javy-cli compile bin/cdd-ts.js -o bin/cdd-ts-javy.wasm
build_docker:
docker build -f debian.Dockerfile -t cdd-ts:debian .
docker build -f alpine.Dockerfile -t cdd-ts:alpine .
run_docker:
docker run -d -p 8080:8080 --name cdd-ts-test cdd-ts:alpine
sleep 2
curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"version","id":1}' http://localhost:8080
docker stop cdd-ts-test && docker rm cdd-ts-test
build_with_ts_go:
@echo "Installing local ts-morph with Wasm backend..."
npm install file:../ts-morph/packages/ts-morph file:../ts-morph/packages/common --force
@echo "Building cdd-ts using local ts-morph fork..."
npm run build
@echo "Building WASM (browser bundle)..."
npx esbuild dist/index.js --bundle --minify --platform=browser --target=es2020 --alias:node:path=path-browserify --alias:node:url=./wasm-stubs/node-url.js --alias:node:fs=./wasm-stubs/node-fs.js --alias:node:fs/promises=./wasm-stubs/node-fs-promises.js --alias:node:os=./wasm-stubs/node-os.js --outfile=bin/cdd-ts.js
@echo "Compiling to WebAssembly via javy..."
npx -y javy-cli compile bin/cdd-ts.js -o bin/cdd-ts-go-javy.wasm
@echo "build_with_ts_go completed successfully!"
build_with_ts_go_assemblyscript:
@echo "Building Go engine (WASM)..."
mkdir -p bin
cd ../ts-morph/packages/compiler-go-source && GOOS=wasip1 GOARCH=wasm go build -o ../../../cdd-ts/bin/typescript-go.wasm ./cmd/wasm-wasi
@echo "Building AssemblyScript bridge (WASM)..."
cd ../ts-morph/packages/ts-morph-as && npm install --legacy-peer-deps && npm run asbuild:release
cp ../ts-morph/packages/ts-morph-as/build/release.wasm bin/cdd-ts.wasm
@echo "================================"
@echo "Success! Compare filesizes:"
@ls -lh bin/typescript-go.wasm
@ls -lh bin/cdd-ts.wasm
@echo "================================"