aboutsummaryrefslogtreecommitdiffstats
path: root/Makefile
blob: bd51aa27cbcb40ec2ce4b7e16c6dc28fe389c6c5 (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
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
NAME = $(shell cargo metadata --no-deps --format-version 1 --manifest-path teleterm/Cargo.toml | jq -r '.name')
VERSION = $(shell cargo metadata --no-deps --format-version 1 --manifest-path teleterm/Cargo.toml | jq -r '.version')

INTERACTIVE_SUBCOMMANDS = stream watch record play
NONINTERACTIVE_SUBCOMMANDS = server web
SUBCOMMANDS = $(INTERACTIVE_SUBCOMMANDS) $(NONINTERACTIVE_SUBCOMMANDS)

DEB_PACKAGE = $(NAME)_$(VERSION)_amd64.deb
ARCH_PACKAGE = $(NAME)-$(VERSION)-1-x86_64.pkg.tar.xz

all:
	@cargo build
.PHONY: all

release:
	@cargo build --release
.PHONY: release

test:
	@RUST_BACKTRACE=1 cargo test
.PHONY: test

check:
	@cargo check --all-targets
.PHONY: check

doc:
	@cargo doc --workspace
.PHONY: doc

$(SUBCOMMANDS):
	@RUST_BACKTRACE=1 cargo run $@
.PHONY: $(SUBCOMMANDS)

$(NONINTERACTIVE_SUBCOMMANDS:%=d%):
	@RUST_LOG=tt=debug RUST_BACKTRACE=1 cargo run $$(echo $@ | sed 's/^d//')
.PHONY: $(NONINTERACTIVE_SUBCOMMANDS:%=d%)

$(INTERACTIVE_SUBCOMMANDS:%=d%):
	@echo "logging to $$(echo $@ | sed 's/^d//').log"
	@RUST_LOG=tt=debug RUST_BACKTRACE=1 cargo run $$(echo $@ | sed 's/^d//') 2>>$$(echo $@ | sed 's/^d//').log
.PHONY: $(INTERACTIVE_SUBCOMMANDS:%=d%)

$(SUBCOMMANDS:%=r%):
	@cargo run --release $$(echo $@ | sed 's/^r//')
.PHONY: $(SUBCOMMANDS:%=r%)

clean:
	@rm -rf *.log pkg
.PHONY: clean

cleanall: clean
	@cargo clean
.PHONY: cleanall

package: pkg/$(DEB_PACKAGE) pkg/$(ARCH_PACKAGE)
.PHONY: package

pkg:
	@mkdir pkg

pkg/$(DEB_PACKAGE): | pkg
	@cargo deb && mv target/debian/$(DEB_PACKAGE) pkg

pkg/$(DEB_PACKAGE).minisig: pkg/$(DEB_PACKAGE)
	@minisign -Sm pkg/$(DEB_PACKAGE)

pkg/$(ARCH_PACKAGE): package/arch/PKGBUILD | pkg
	@cd package/arch && makepkg -c && mv $(ARCH_PACKAGE) ../../pkg

pkg/$(ARCH_PACKAGE).minisig: pkg/$(ARCH_PACKAGE)
	@minisign -Sm pkg/$(ARCH_PACKAGE)

release-dir-deb:
	@ssh tozt.net mkdir -p releases/teleterm/deb
.PHONY: release-dir-deb

publish: publish-crates-io publish-git-tags publish-deb publish-arch
.PHONY: publish

publish-crates-io: test
	@cargo publish
.PHONY: publish-crates-io

publish-git-tags: test
	@git tag $(VERSION)
	@git push --tags
.PHONY: publish-git-tags

publish-deb: test pkg/$(DEB_PACKAGE) pkg/$(DEB_PACKAGE).minisig release-dir-deb
	@scp pkg/$(DEB_PACKAGE) pkg/$(DEB_PACKAGE).minisig tozt.net:releases/teleterm/deb
.PHONY: publish-deb

release-dir-arch:
	@ssh tozt.net mkdir -p releases/teleterm/arch
.PHONY: release-dir-arch

publish-arch: test pkg/$(ARCH_PACKAGE) pkg/$(ARCH_PACKAGE).minisig release-dir-arch
	@scp pkg/$(ARCH_PACKAGE) pkg/$(ARCH_PACKAGE).minisig tozt.net:releases/teleterm/arch
.PHONY: publish-arch

install-arch: pkg/$(ARCH_PACKAGE)
	@sudo pacman -U pkg/$(ARCH_PACKAGE)
.PHONY: install-arch

wasm: teleterm/static/teleterm_web.js teleterm/static/teleterm_web_bg.wasm
.PHONY: wasm

web rweb dweb: wasm

teleterm/static/teleterm_web_bg.wasm: target/wasm/teleterm_web_bg_opt.wasm
	@cp -f $< $@

teleterm/static/teleterm_web.js: target/wasm/teleterm_web_min.js
	@cp -f $< $@

target/wasm/%_opt.wasm: target/wasm/%.wasm
	@wasm-opt -Oz $< -o $@

target/wasm/%_min.js: target/wasm/%.js
	@terser $< > $@

target/wasm/teleterm_web.js target/wasm/teleterm_web_bg.wasm: teleterm-web/Cargo.toml teleterm-web/src/*.rs teleterm-web/src/views/*.rs
	@wasm-pack build --no-typescript --target web --out-dir ../target/wasm teleterm-web