849306d65e
Build system - Add a single hand-written Makefile (GNU make + gcc, pure C). Builds raylib from vendored source and links rspektrum with no premake/lua. Targets: all/run/test/bench/clean; release default, DEBUG=1 for debug; ARCH overridable (defaults to -march=x86-64-v3). - Remove premake entirely: rspektrum.make, raylib.make, build/premake5* binaries, build/premake5.lua, build/ecc/*. The generated top-level Makefile was gitignored, so hand-edits to it were silently lost. - Vendor raylib src/ into the repo (was gitignored -> fresh clones could not build). Commit only src/ (~16MB); examples/projects stay local. Verified: a build from the git-tracked tree alone succeeds offline. - Release flags bumped to -O3 -ffast-math with a portable arch baseline (x86-64-v3 = AVX2+FMA on x64, SSE2 on x86). Confirmed FMA/AVX codegen in fft.o. FFT optimization (src/fft.c) - Precompute twiddle factors and the bit-reversal permutation once per size, cached as a small plan table (FFTW's idea, lightweight). Removes the per-butterfly cexpf() and per-element bit-twiddling that dominated. - 3.6x faster on the mlnl_samples.wav STFT workload (2048-pt, -O2 same flags both sides): 81us -> 22us per FFT. With the new -O3/-ffast-math/ AVX2 release flags stacked: ~15us (5.5x vs the old -O2 baseline). - Verified vs a double-precision reference DFT: 1e-6 relative error, round-trip 2.4e-7. Drop-in: same FFT() signature. Tests/bench (bench/) - fft_verify.c: FFT vs reference DFT + round-trip check (make test). - fft_bench.c: times the real STFT workload (make bench). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
33 lines
897 B
Makefile
33 lines
897 B
Makefile
# DSP tests + benchmarks for the standalone FFT (src/fft.c has no app/raylib deps).
|
|
#
|
|
# The repo's top-level Makefile is Premake-generated and gitignored, so the DSP
|
|
# test target lives here where it's version-controlled.
|
|
#
|
|
# make -C bench test # correctness: FFT vs double-precision reference DFT
|
|
# make -C bench bench # timing over the real mlnl_samples.wav STFT workload
|
|
#
|
|
# Same release flags the app uses, so this exercises the real codegen path
|
|
# (-ffast-math reordering included). Override CC/CFLAGS to test other toolchains.
|
|
CC ?= cc
|
|
CFLAGS ?= -O3 -ffast-math -march=x86-64-v3 -Wall
|
|
LDLIBS := -lm
|
|
|
|
SRC := ../src/fft.c
|
|
|
|
.PHONY: test bench clean
|
|
|
|
test: fft_verify
|
|
./fft_verify
|
|
|
|
bench: fft_bench
|
|
./fft_bench
|
|
|
|
fft_verify: fft_verify.c $(SRC)
|
|
$(CC) $(CFLAGS) $^ $(LDLIBS) -o $@
|
|
|
|
fft_bench: fft_bench.c $(SRC)
|
|
$(CC) $(CFLAGS) $^ $(LDLIBS) -o $@
|
|
|
|
clean:
|
|
rm -f fft_verify fft_bench
|