java-topology/whitepaper/gumyum/Makefile
russell@unturf.com 0a580b313d undefect. CWE-407 — 63 sites patched across 27 ecosystems
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.
2026-03-26 17:11:57 -04:00

139 lines
5.8 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 (00010005) ==="
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 216) ==="
$(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 ==="