-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
99 lines (82 loc) · 3.05 KB
/
Copy pathMakefile
File metadata and controls
99 lines (82 loc) · 3.05 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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
APP_NAME = chess_pro2
PI_USER = root
PI_IP = 192.168.88.17
PI_PATH = /home/vladimir/chess_pro2
LOCAL_BIN = ./bin/$(APP_NAME)
LOCAL_HTML = ./web/chess_board.html
REMOTE_HTML = $(PI_PATH)/web/chess_board.html
ARM_LIBS = $(shell pwd)/arm-libs
ARM_INCLUDE = $(ARM_LIBS)/include
ARM_LIB = $(ARM_LIBS)/lib
.PHONY: deploy build-local upload restart arm-libs clean help
deploy: clean build-local upload restart
build-local: arm-libs-check
go mod tidy
@echo "--- Cross-compilation (Fedora -> ARM64) ---"
@mkdir -p bin
CGO_ENABLED=1 \
GOOS=linux \
GOARCH=arm64 \
CC="zig cc -target aarch64-linux-gnu" \
CGO_CFLAGS="-I$(ARM_INCLUDE)" \
CGO_LDFLAGS="-L$(ARM_LIB) -lws2811 -lm" \
go build -v -o $(LOCAL_BIN) ./cmd/chess-pro/main.go
@echo "[OK] Built: $(LOCAL_BIN)"
@file $(LOCAL_BIN)
upload:
ssh $(PI_USER)@$(PI_IP) "sudo systemctl stop chess-pro2 2>/dev/null || true"
@echo "--- Uploading to $(PI_IP):$(PI_PATH) ---"
ssh $(PI_USER)@$(PI_IP) "mkdir -p $(PI_PATH)/bin $(PI_PATH)/web"
rsync -avz $(LOCAL_BIN) $(PI_USER)@$(PI_IP):$(PI_PATH)/bin/$(APP_NAME)
rsync -avz $(LOCAL_HTML) $(PI_USER)@$(PI_IP):$(REMOTE_HTML)
@echo "[OK] Uploaded"
upload-html:
@echo "--- Uploading HTML ---"
scp $(LOCAL_HTML) $(PI_USER)@$(PI_IP):$(REMOTE_HTML)
@echo "[OK] HTML updated"
restart:
@echo "--- Restarting service on Pi ---"
ssh $(PI_USER)@$(PI_IP) "\
sudo systemctl daemon-reload && \
sudo systemctl restart chess-pro2 && \
sleep 1 && \
sudo systemctl status chess-pro2 --no-pager -l"
install-service:
@echo "--- Installing systemd service ---"
scp chess-pro2.service $(PI_USER)@$(PI_IP):/tmp/chess-pro2.service
ssh $(PI_USER)@$(PI_IP) "\
sudo cp /tmp/chess-pro2.service /etc/systemd/system/ && \
sudo systemctl daemon-reload && \
sudo systemctl enable chess-pro2 && \
echo '[OK] Service installed and enabled'"
arm-libs:
PI_USER=$(PI_USER) PI_IP=$(PI_IP) bash scripts/get-arm-libs.sh
arm-libs-check:
@if [ ! -f "$(ARM_INCLUDE)/ws2811.h" ]; then \
echo "[ERR] $(ARM_INCLUDE)/ws2811.h not found"; \
echo "Run: make arm-libs"; \
exit 1; \
fi
logs:
ssh $(PI_USER)@$(PI_IP) "sudo journalctl -u chess-pro2 -f"
logs-tail:
ssh $(PI_USER)@$(PI_IP) "sudo journalctl -u chess-pro2 -n 50 --no-pager"
status:
ssh $(PI_USER)@$(PI_IP) "sudo systemctl status chess-pro2 --no-pager -l"
stop:
ssh $(PI_USER)@$(PI_IP) "sudo systemctl stop chess-pro2"
clean:
rm -rf bin/
help:
@echo " make upload-html — upload HTML only (without stopping the service)"
@echo "Targets:"
@echo " make arm-libs — download ws2811 headers from Pi (one-time setup)"
@echo " make deploy — build + upload + restart"
@echo " make build-local — build only"
@echo " make upload — upload only"
@echo " make restart — restart the service only"
@echo " make install-service — install systemd service on Pi (one-time setup)"
@echo " make logs — follow logs"
@echo " make status — service status"
@echo " make stop — stop the service"
@echo " make clean — remove bin/"