-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
153 lines (140 loc) · 9.23 KB
/
Copy pathMakefile
File metadata and controls
153 lines (140 loc) · 9.23 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
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# ═══════════════════════════════════════════════════════════════
# ██████╗ ██╗ █████╗ ███╗ ██╗███╗ ██╗███████╗██████╗
# ██╔══██╗██║ ██╔══██╗████╗ ██║████╗ ██║██╔════╝██╔══██╗
# ██████╔╝██║ ███████║██╔██╗ ██║██╔██╗ ██║█████╗ ██████╔╝
# ██╔═══╝ ██║ ██╔══██║██║╚██╗██║██║╚██╗██║██╔══╝ ██╔══██╗
# ██║ ███████╗██║ ██║██║ ╚████║██║ ╚████║███████╗██║ ██║
# ╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═══╝╚══════╝╚═╝ ╚═╝
# 1 2 3 ── GREETINGS FROM THE RUST DEMOSCENE ──
#
# SOLVERFORGE // THIS IS NOT A SCHEDULER // THIS IS A WEAPON.
# CODED IN RUST. AMIGA 1992 FOREVER
# (NO JAVASCRIPT WAS HARMED).
# ═══════════════════════════════════════════════════════════════
.PHONY: help build run render render-gif clean check clippy loc
# ── Configuration ─────────────────────────────────────────────────────
DEMO := planner123-demo
CARGO_FLAGS := --release
# Render settings
RENDER_W := 1280
RENDER_H := 720
RENDER_FPS := 60
RENDER_SECS := 84
RENDER_OUT := demo.mp4
RENDER_GIF := demo.gif
# ffmpeg encoding settings
FFMPEG_VCODEC := libx264
FFMPEG_CRF := 18
FFMPEG_PRESET := slow
# ── Default target ────────────────────────────────────────────────────
help: ## Show this help
@echo ""
@echo " ██████╗ ██╗ █████╗ ███╗ ██╗███╗ ██╗███████╗██████╗"
@echo " ██╔══██╗██║ ██╔══██╗████╗ ██║████╗ ██║██╔════╝██╔══██╗"
@echo " ██████╔╝██║ ███████║██╔██╗ ██║██╔██╗ ██║█████╗ ██████╔╝"
@echo " ██╔═══╝ ██║ ██╔══██║██║╚██╗██║██║╚██╗██║██╔══╝ ██╔══██╗"
@echo " ██║ ███████╗██║ ██║██║ ╚████║██║ ╚████║███████╗██║ ██║"
@echo " ╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═══╝╚══════╝╚═╝ ╚═╝"
@echo " 1 2 3 ── GREETINGS FROM THE RUST DEMOSCENE ──"
@echo ""
@echo " SOLVERFORGE // THIS IS NOT A SCHEDULER // THIS IS A WEAPON."
@echo ""
@echo " ┌─────────────────────────────────────────────────────┐"
@echo " │ TARGETS │"
@echo " ├─────────────────────────────────────────────────────┤"
@echo " │ make build Build release binary │"
@echo " │ make run Build and run the demo │"
@echo " │ make render Render to MP4 via ffmpeg │"
@echo " │ make render-gif Render to GIF (shareable) │"
@echo " │ make clean Remove build artifacts + output │"
@echo " │ make check Run cargo check │"
@echo " │ make clippy Run clippy lints │"
@echo " │ make loc Count lines of code │"
@echo " └─────────────────────────────────────────────────────┘"
@echo ""
@echo " CONTROLS: ESC = quit SPACE = advance scene"
@echo ""
# ── Build ─────────────────────────────────────────────────────────────
build: ## Build release binary
@echo "═══ COMPILING $(DEMO) (release) ═══"
cargo build $(CARGO_FLAGS)
@echo "═══ DONE ═══"
# ── Run ───────────────────────────────────────────────────────────────
run: ## Build and run the demo in a window
@echo "═══ LAUNCHING $(DEMO) ═══"
@echo " ESC = quit // SPACE = advance scene"
@echo ""
cargo run $(CARGO_FLAGS)
# ── Render to MP4 ────────────────────────────────────────────────────
render: ## Render headless to MP4 via ffmpeg (with audio)
@echo "═══ RENDERING $(RENDER_SECS)s @ $(RENDER_W)x$(RENDER_H) $(RENDER_FPS)fps ═══"
@echo " Output: $(RENDER_OUT)"
@echo ""
@command -v ffmpeg >/dev/null 2>&1 || { echo "ERROR: ffmpeg not found. Install it first."; exit 1; }
cargo run $(CARGO_FLAGS) -- --render $(RENDER_SECS) | \
ffmpeg -y \
-f rawvideo \
-pixel_format bgr24 \
-video_size $(RENDER_W)x$(RENDER_H) \
-framerate $(RENDER_FPS) \
-i - \
-i demo_audio.wav \
-c:v $(FFMPEG_VCODEC) \
-profile:v baseline -level 3.0 \
-r $(RENDER_FPS) \
-c:a aac -b:a 192k \
-crf $(FFMPEG_CRF) \
-preset $(FFMPEG_PRESET) \
-pix_fmt yuv420p \
-movflags +faststart \
-shortest \
$(RENDER_OUT)
@rm -f demo_audio.wav
@echo ""
@echo "═══ RENDERED: $(RENDER_OUT) ═══"
@ls -lh $(RENDER_OUT)
# ── Render to GIF ────────────────────────────────────────────────────
render-gif: ## Render headless to GIF (lower fps, palette-quantized)
@echo "═══ RENDERING GIF @ $(RENDER_W)x$(RENDER_H) ═══"
@echo " Output: $(RENDER_GIF)"
@echo ""
@command -v ffmpeg >/dev/null 2>&1 || { echo "ERROR: ffmpeg not found. Install it first."; exit 1; }
cargo run $(CARGO_FLAGS) -- --render $(RENDER_SECS) | \
ffmpeg -y \
-f rawvideo \
-pixel_format bgr24 \
-video_size $(RENDER_W)x$(RENDER_H) \
-framerate $(RENDER_FPS) \
-i - \
-vf "fps=15,scale=640:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=128[p];[s1][p]paletteuse=dither=bayer" \
$(RENDER_GIF)
@echo ""
@echo "═══ RENDERED: $(RENDER_GIF) ═══"
@ls -lh $(RENDER_GIF)
# ── Clean ─────────────────────────────────────────────────────────────
clean: ## Remove build artifacts and rendered output
@echo "═══ CLEANING ═══"
cargo clean
@rm -f $(RENDER_OUT) $(RENDER_GIF) demo_audio.wav
@echo "═══ CLEAN ═══"
# ── Check ─────────────────────────────────────────────────────────────
check: ## Run cargo check (fast compile check)
cargo check $(CARGO_FLAGS)
# ── Clippy ────────────────────────────────────────────────────────────
clippy: ## Run clippy lints
cargo clippy $(CARGO_FLAGS) -- -W clippy::all
# ── Lines of code ─────────────────────────────────────────────────────
loc: ## Count lines of Rust source
@echo ""
@echo " ┌──────────────────────────────────────┐"
@echo " │ LINES OF RUST (src/) │"
@echo " ├──────────────────────────────────────┤"
@find src -name '*.rs' | sort | while read f; do \
lines=$$(wc -l < "$$f"); \
printf " │ %6d %-28s│\n" "$$lines" "$$(basename $$f)"; \
done
@echo " ├──────────────────────────────────────┤"
@total=$$(find src -name '*.rs' -exec cat {} + | wc -l); \
printf " │ %6d %-28s│\n" "$$total" "TOTAL"
@echo " └──────────────────────────────────────┘"
@echo ""