-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
55 lines (45 loc) · 1.33 KB
/
Copy pathMakefile
File metadata and controls
55 lines (45 loc) · 1.33 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
TARGET_NAME := peg-solitaire
WASMTARGET := wasm32-unknown-unknown
BUILDTYPE ?= release
TARGET := target/$(WASMTARGET)/$(BUILDTYPE)/$(TARGET_NAME).wasm
PROJ_DIR := $(dir $(lastword $(MAKEFILE_LIST)))
DIST := $(PROJ_DIR)www
.PHONY: all
all: wasm
# build wasm binary
$(TARGET):
ifeq ($(BUILDTYPE),release)
cargo build --target $(WASMTARGET) --release
else
cargo build --target $(WASMTARGET)
endif
# generate javascript glue-code
BINDGEN_FILES = $(addprefix $(DIST)/$(TARGET_NAME),.d.ts .js _bg.wasm _bg.wasm.d.ts)
$(BINDGEN_FILES): $(TARGET) | $(DIST)
rm -rf $(DIST)
wasm-bindgen --out-dir $(DIST) --target web $(TARGET)
$(DIST):
@mkdir -p $@
# optimize wasm binary
WASMOPT = $(DIST)/$(TARGET_NAME)_bg_opt.wasm
%_opt.wasm: %.wasm
wasm-opt -all $< -Os -o $*_opt.wasm
# compress using brotli
WASMBR = $(DIST)/$(TARGET_NAME)_bg_opt.wasm.br
%.wasm.br: %.wasm
brotli -9 -o $@ $<
# copy files to destination
.PHONY: wasm
wasm: $(BINDGEN_FILES) $(WASMBR)
mv $(DIST)/peg-solitaire_bg_opt.wasm $(DIST)/peg-solitaire_bg.wasm || true
mv $(DIST)/peg-solitaire_bg_opt.wasm.br $(DIST)/peg-solitaire_bg.wasm.br || true
cp index.html $(DIST)
cp favicon.ico $(DIST)
cp -r assets/ $(DIST)/assets/
.PHONY: clean
clean:
rm -rf $(DIST)
install-deps:
rustup target add $(WASMTARGET)
cargo install wasm-bindgen-cli || true
cargo install wasm-server-runner || true