# benchmark/Makefile — Build and run tinygltf v3 benchmarks # # Targets: # make — build gen_synthetic + bench_v3 # make generate — generate synthetic test scenes # make run — run benchmarks on all generated scenes # make report — run benchmarks and produce CSV report # make clean — remove binaries and generated scenes CXX ?= g++ CXXFLAGS ?= -O2 -std=c++17 -Wall -Wextra -Wno-unused-function CXXFLAGS += -fno-rtti -fno-exceptions INCLUDES = -I.. BINDIR = . GEN = $(BINDIR)/gen_synthetic BENCH_V3 = $(BINDIR)/bench_v3 # Iteration counts ITERATIONS ?= 10 WARMUP ?= 2 PREFIX ?= synthetic .PHONY: all generate run report clean all: $(GEN) $(BENCH_V3) $(GEN): gen_synthetic.cpp $(CXX) $(CXXFLAGS) -o $@ $< $(BENCH_V3): bench_v3.cpp ../tiny_gltf_v3.h ../tiny_gltf_v3.c ../tinygltf_json_c.h $(CXX) $(CXXFLAGS) $(INCLUDES) -o $@ $< # Generate synthetic scenes of varying sizes generate: $(GEN) @echo "=== Generating synthetic scenes ===" ./$(GEN) --prefix $(PREFIX) @echo "" @echo "Generated files (binary + GLB):" @ls -lh $(PREFIX)_*.gltf $(PREFIX)_*.glb $(PREFIX)_*.bin 2>/dev/null || true # Run benchmarks on all generated scenes run: $(BENCH_V3) generate @echo "" @echo "=================================================================" @echo " tinygltf v3 Benchmark" @echo "=================================================================" @echo "" @for f in $(PREFIX)_*.glb $(PREFIX)_*.gltf; do \ if [ -f "$$f" ]; then \ ./$(BENCH_V3) "$$f" --iterations $(ITERATIONS) --warmup $(WARMUP); \ echo ""; \ fi; \ done # Run benchmarks and produce CSV report report: $(BENCH_V3) generate @echo "file,size_bytes,iterations,parse_min_ms,parse_max_ms,parse_avg_ms,parse_median_ms,throughput_mbs,arena_peak_bytes,meshes,nodes,accessors,materials,animations" > benchmark_report.csv @for f in $(PREFIX)_*.glb $(PREFIX)_*.gltf; do \ if [ -f "$$f" ]; then \ ./$(BENCH_V3) "$$f" --iterations $(ITERATIONS) --warmup $(WARMUP) --csv | tail -1 >> benchmark_report.csv; \ fi; \ done @echo "=== Report written to benchmark_report.csv ===" @cat benchmark_report.csv | column -t -s, clean: rm -f $(GEN) $(BENCH_V3) rm -f $(PREFIX)_*.gltf $(PREFIX)_*.glb $(PREFIX)_*.bin rm -f benchmark_report.csv