126 lines
4.8 KiB
Makefile
126 lines
4.8 KiB
Makefile
# AnyBot — build and install from source. make help lists everything.
|
||
#
|
||
# git clone https://code.30cm.net/daniel.w/AnyBot.git && cd AnyBot
|
||
# make deps everything the build needs (system packages, Rust) — once
|
||
# make install build and install: ~/Applications/AnyBot.app on a Mac, ~/.local/bin on Linux
|
||
# make run open it without installing
|
||
#
|
||
# The one-step version of all of this is ./install.sh (README.md).
|
||
|
||
# Rust installed by rustup lives in ~/.cargo/bin, which a fresh shell may not have on PATH yet.
|
||
export PATH := $(HOME)/.cargo/bin:$(PATH)
|
||
CARGO ?= cargo
|
||
UNAME := $(shell uname -s)
|
||
VERSION ?= $(shell git describe --tags --always 2>/dev/null | sed 's/^v//' || echo dev)
|
||
TARGET := $(or $(CARGO_TARGET_DIR),target)
|
||
APPDIR ?= $(HOME)/Applications
|
||
BIN := $(TARGET)/release/anybot
|
||
RELAY := $(if $(CARGO_TARGET_DIR),$(CARGO_TARGET_DIR),relay/target)/release/anybot-relay
|
||
|
||
.PHONY: all build app relay run serve setup relay-run test deps doctor install uninstall hands server dist clean help check-rust
|
||
|
||
all: build
|
||
|
||
help:
|
||
@echo "AnyBot $(VERSION)"
|
||
@echo ""
|
||
@echo " make 建置 AnyBot 和帳號伺服器(正式版)"
|
||
@echo " make run 直接打開 AnyBot(不安裝)"
|
||
@echo " make install 安裝:Mac → $(APPDIR)/AnyBot.app;Linux → ~/.local/bin/anybot 和選單"
|
||
@echo " make uninstall 移除安裝的程式(你的 Bot 和聊天不會刪)"
|
||
@echo " make deps 裝好建置需要的東西:系統套件和 Rust(Linux 會問 sudo 密碼)"
|
||
@echo " make doctor 檢查這台缺什麼"
|
||
@echo " make test 跑測試"
|
||
@echo ""
|
||
@echo " make serve 不開視窗執行(伺服器、一直開著的電腦)"
|
||
@echo " make setup 把這台接到你的 AnyBot(終端機裡的引導畫面)"
|
||
@echo " make hands Linux:裝好虛擬螢幕等,再接成大腦的手腳"
|
||
@echo " make relay-run 在這台跑帳號伺服器(埠 8080,資料在 ./relay-data)"
|
||
@echo " make server 在伺服器上架好帳號伺服器 + 大腦 + HTTPS(Docker)"
|
||
@echo ""
|
||
@echo " make dist 打包發行檔到 dist/(Mac:.app 的 zip;Linux:三個 tar.gz)"
|
||
@echo " make clean 清掉建置結果"
|
||
|
||
build: app relay
|
||
|
||
check-rust:
|
||
@command -v $(CARGO) >/dev/null 2>&1 || { echo; echo " ✗ 找不到 Rust(cargo)。先執行:make deps"; echo; exit 1; }
|
||
@v=$$(rustc --version | sed -n 's/^rustc 1\.\([0-9]*\).*/\1/p'); [ "$${v:-0}" -ge 95 ] || { echo; echo " ✗ Rust 太舊($$(rustc --version)),要 1.95 以上。執行:rustup update stable(或 make deps)"; echo; exit 1; }
|
||
|
||
app: check-rust
|
||
$(CARGO) build --release --bin anybot
|
||
|
||
relay: check-rust
|
||
cd relay && $(CARGO) build --release
|
||
|
||
run: app
|
||
$(BIN)
|
||
|
||
serve: app
|
||
$(BIN) --serve
|
||
|
||
setup: app
|
||
$(BIN) setup
|
||
|
||
relay-run: relay
|
||
$(RELAY) --port 8080 --data relay-data
|
||
|
||
test: check-rust
|
||
$(CARGO) test --bin anybot
|
||
cd relay && $(CARGO) test
|
||
|
||
deps:
|
||
sh ./install.sh deps
|
||
|
||
doctor:
|
||
@echo "AnyBot $(VERSION) · $(UNAME) $$(uname -m)"
|
||
@command -v git >/dev/null && echo " ✓ git" || echo " ✗ git:make deps"
|
||
@command -v cc >/dev/null && echo " ✓ C 編譯器" || echo " ✗ C 編譯器:make deps"
|
||
@command -v $(CARGO) >/dev/null && echo " ✓ $$(rustc --version)" || echo " ✗ Rust:make deps"
|
||
ifeq ($(UNAME),Linux)
|
||
@pkg-config --exists alsa 2>/dev/null && echo " ✓ ALSA(libasound2-dev)" || echo " ✗ ALSA 開發套件:make deps"
|
||
@command -v docker >/dev/null && echo " ✓ $$(docker --version)" || echo " · 沒有 Docker(只有伺服器和 Bot 自己的電腦需要;make server 會自動裝)"
|
||
endif
|
||
ifeq ($(UNAME),Darwin)
|
||
@xcode-select -p >/dev/null 2>&1 && echo " ✓ Xcode Command Line Tools" || echo " ✗ Xcode Command Line Tools:make deps"
|
||
endif
|
||
@test -x $(BIN) && echo " ✓ 已建置 $(BIN)" || echo " · 還沒建置:make"
|
||
|
||
install: app
|
||
ifeq ($(UNAME),Darwin)
|
||
KEEP_APP=1 sh deploy/mac/bundle.sh $(VERSION)
|
||
mkdir -p "$(APPDIR)"
|
||
rm -rf "$(APPDIR)/AnyBot.app"
|
||
mv dist/AnyBot.app "$(APPDIR)/AnyBot.app"
|
||
@echo "已安裝 $(APPDIR)/AnyBot.app(第一次打開:按右鍵 › 打開)"
|
||
else
|
||
sh deploy/linux/install.sh
|
||
endif
|
||
|
||
uninstall:
|
||
ifeq ($(UNAME),Darwin)
|
||
rm -rf "$(APPDIR)/AnyBot.app"
|
||
else
|
||
rm -f "$(HOME)/.local/bin/anybot" "$(HOME)/.local/share/applications/anybot.desktop"
|
||
rm -f "$(HOME)/.local/share/icons/hicolor/scalable/apps/anybot.svg" "$(HOME)/.local/share/icons/hicolor/256x256/apps/anybot.png" "$(HOME)/.local/share/icons/hicolor/128x128/apps/anybot.png"
|
||
endif
|
||
@echo "已移除程式。你的 Bot、聊天和設定還在(要全部刪掉請看 docs/install.md)。"
|
||
|
||
hands: app
|
||
sh deploy/linux/hands.sh --deps
|
||
|
||
server:
|
||
sh ./install.sh server
|
||
|
||
dist: build
|
||
ifeq ($(UNAME),Darwin)
|
||
sh deploy/mac/bundle.sh $(VERSION)
|
||
else
|
||
sh deploy/ci/package-linux.sh $(VERSION)
|
||
endif
|
||
|
||
clean:
|
||
$(CARGO) clean
|
||
cd relay && $(CARGO) clean
|
||
rm -rf dist
|