Authors: russell@unturf.com · brackishbert@gmail.com · foxhop.net · TimeHexOn.com Patches, unit tests, benchmarks, whitepaper, and outreach briefs. Public domain — no copyright claimed. Use freely.
139 lines
5.8 KiB
Makefile
139 lines
5.8 KiB
Makefile
# whitepaper/gumyum/Makefile
|
||
# Targets: benchmarks, dot→SVG, donut charts, PDF
|
||
#
|
||
# Usage:
|
||
# make bench-javac — javac before/after (all 5 defects)
|
||
# make bench-mc-server — minecraft DependencySorter + BenchMax
|
||
# make bench-max — extreme-scale BenchMax (all 3 ecosystems)
|
||
# make bench-all — all benchmarks
|
||
# make dots — render all .dot → SVG
|
||
# make donuts — generate donut chart SVGs
|
||
# make visuals — dots + donuts
|
||
# make pdf — render gumyum PDF
|
||
# make all — visuals + pdf
|
||
# make clean — remove generated SVGs and PDF
|
||
|
||
JAVA := /tmp/jdk25/bin/java
|
||
JAVAC := /tmp/jdk25/bin/javac
|
||
GUAVA := /tmp/guava.jar
|
||
TESTS := ../../tests
|
||
BENCH_OUT := bench-results
|
||
PANDOC := pandoc
|
||
DOT := dot
|
||
PYTHON := python3
|
||
|
||
DOTS_SRC := $(wildcard dots/*.dot)
|
||
DOTS_SVG := $(patsubst dots/%.dot,svg/%.svg,$(DOTS_SRC))
|
||
|
||
DONUT_SVGs := svg/donut-javac.svg svg/donut-mc-server.svg svg/donut-mc-client.svg
|
||
|
||
MD := gumyum-minecraft-enterprize-java-edition.md
|
||
PDF := gumyum-minecraft-enterprize-java-edition.pdf
|
||
CSS := gumyum-style.css
|
||
|
||
.PHONY: all bench-javac bench-mc-server bench-max bench-all \
|
||
dots donuts visuals pdf clean
|
||
|
||
# ── Default ───────────────────────────────────────────────────────────────────
|
||
all: visuals pdf
|
||
|
||
# ── Benchmarks ───────────────────────────────────────────────────────────────
|
||
|
||
$(BENCH_OUT):
|
||
mkdir -p $(BENCH_OUT)
|
||
|
||
# javac: all five defects — AllDefectsBenchmark + BeforeAfterBenchmark
|
||
bench-javac: $(BENCH_OUT)
|
||
@echo "=== Compiling javac benchmarks ==="
|
||
cd $(TESTS) && \
|
||
$(JAVA) -m jdk.compiler/com.sun.tools.javac.Main \
|
||
--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED \
|
||
support/AbstractTestNode.java support/TarjanAlgorithm.java \
|
||
support/FindNodeAlgorithm.java support/ClosureAlgorithm.java \
|
||
support/TopoSorterAlgorithm.java support/DependencyListAlgorithm.java \
|
||
support/BoundSetAlgorithm.java support/GraphFactory.java \
|
||
bench/AllDefectsBenchmark.java bench/BeforeAfterBenchmark.java
|
||
@echo "=== AllDefectsBenchmark (0001–0005) ==="
|
||
cd $(TESTS) && \
|
||
$(JAVA) --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED \
|
||
-cp . bench.AllDefectsBenchmark 2>&1 | tee $(CURDIR)/$(BENCH_OUT)/javac-all-defects.txt
|
||
@echo "=== BeforeAfterBenchmark (Tarjan V=10..800) ==="
|
||
cd $(TESTS) && \
|
||
$(JAVA) --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED \
|
||
-cp . bench.BeforeAfterBenchmark 2>&1 | tee $(CURDIR)/$(BENCH_OUT)/javac-tarjan-before-after.txt
|
||
@echo "Results: $(BENCH_OUT)/javac-*.txt"
|
||
|
||
# minecraft server: DependencySorter depth scaling
|
||
bench-mc-server: $(BENCH_OUT)
|
||
@echo "=== Compiling minecraft benchmarks ==="
|
||
$(JAVAC) --release 21 -cp $(GUAVA) \
|
||
$(TESTS)/bench/DependencySorterBenchmark.java \
|
||
-d $(TESTS)/bench/
|
||
@echo "=== DependencySorterBenchmark (depth 2–16) ==="
|
||
$(JAVA) -cp $(TESTS)/bench:$(GUAVA) bench.DependencySorterBenchmark 2>&1 \
|
||
| tee $(BENCH_OUT)/mc-server-dependency-sorter.txt
|
||
@echo "Results: $(BENCH_OUT)/mc-server-dependency-sorter.txt"
|
||
|
||
# BenchMax: extreme scale — javac V→3200, MC diamond D→18, Create BFS V→5000
|
||
bench-max: $(BENCH_OUT)
|
||
@echo "=== Compiling BenchMax ==="
|
||
$(JAVAC) --release 21 -cp $(GUAVA) \
|
||
$(TESTS)/bench/BenchMax.java \
|
||
-d $(TESTS)/bench/
|
||
@echo "=== BenchMax (extreme scale) ==="
|
||
$(JAVA) -cp $(TESTS)/bench:$(GUAVA) bench.BenchMax 2>&1 \
|
||
| tee $(BENCH_OUT)/benchmax.txt
|
||
@echo "Results: $(BENCH_OUT)/benchmax.txt"
|
||
|
||
# All benchmarks
|
||
bench-all: bench-javac bench-mc-server bench-max
|
||
@echo "=== All benchmarks complete. Results in $(BENCH_OUT)/ ==="
|
||
@ls -lh $(BENCH_OUT)/
|
||
|
||
# ── Dot → SVG ─────────────────────────────────────────────────────────────────
|
||
|
||
svg/%.svg: dots/%.dot
|
||
@mkdir -p svg
|
||
$(DOT) -Tsvg $< -o $@
|
||
@echo " rendered $< → $@"
|
||
|
||
dots: $(DOTS_SVG)
|
||
@echo "=== All dot files rendered ==="
|
||
|
||
# ── Donut charts ──────────────────────────────────────────────────────────────
|
||
|
||
$(DONUT_SVGs): gen-donuts.py
|
||
@mkdir -p svg
|
||
$(PYTHON) gen-donuts.py
|
||
|
||
donuts: $(DONUT_SVGs)
|
||
@echo "=== Donut charts generated ==="
|
||
|
||
# ── Visuals ───────────────────────────────────────────────────────────────────
|
||
|
||
visuals: dots donuts
|
||
@echo "=== All visuals ready in svg/ ==="
|
||
@ls -1 svg/
|
||
|
||
# ── PDF ───────────────────────────────────────────────────────────────────────
|
||
|
||
$(PDF): $(MD) $(CSS) $(DOTS_SVG) $(DONUT_SVGs)
|
||
$(PANDOC) $(MD) \
|
||
--pdf-engine=wkhtmltopdf \
|
||
--css=$(CSS) \
|
||
--resource-path=. \
|
||
-V margin-top=0mm \
|
||
-V margin-bottom=12mm \
|
||
-V margin-left=0mm \
|
||
-V margin-right=0mm \
|
||
-o $(PDF)
|
||
@echo "=== PDF rendered: $(PDF) ($$(du -h $(PDF) | cut -f1)) ==="
|
||
|
||
pdf: $(PDF)
|
||
|
||
# ── Clean ─────────────────────────────────────────────────────────────────────
|
||
|
||
clean:
|
||
rm -f svg/*.svg $(PDF)
|
||
rm -rf $(BENCH_OUT)
|
||
@echo "=== Cleaned ==="
|