# Run this Makefile from inside exe2_template/.
# It assumes a Unix-like shell environment with gcc, make, rm, and ./program
# execution support (Linux, macOS, or WSL on Windows).
#
# Common student workflow:
#   make base_test
#   make fast_test
#   make check_test
#   make benchmark

CC = gcc
CFLAGS = -O2
LIBS = -lm
BENCH_ROWS = 1024
BENCH_COLS = 1024
BENCH_REP = 16
BENCH_TRIALS = 9

all : base_test fast_test check_test

clean:
	@-rm -f *.o qam_base qam_fast test_accuracy
	@-rm -f qam_base_out.bin qam_fast_out.bin

base:
	@-rm -f *.o qam_base
	$(CC) $(CFLAGS) -o qam_base main.c apply_qam_base.c $(LIBS)

fast:
	@-rm -f *.o qam_fast
	$(CC) $(CFLAGS) -o qam_fast main.c apply_qam_fast.c $(LIBS)

check:
	@-rm -f *.o test_accuracy
	$(CC) $(CFLAGS) -o test_accuracy test_accuracy.c $(LIBS)

base_test: base
	./qam_base qam_base_out.bin 1024 1024 12

fast_test: fast
	./qam_fast qam_fast_out.bin 1024 1024 12

check_test: base_test fast_test check
	./test_accuracy qam_base_out.bin qam_fast_out.bin

benchmark: base fast
	bash ./benchmark_compare.sh qam_base qam_base_out.bin qam_fast qam_fast_out.bin $(BENCH_ROWS) $(BENCH_COLS) $(BENCH_REP) $(BENCH_TRIALS)
