CC ?= gcc
CFLAGS ?= -O2 -Wall -Wextra -std=gnu11
LDFLAGS_URING = -luring

TARGETS := bench_readwrite bench_sendfile bench_splice bench_iouring_zc bench_latency

.PHONY: all clean help

all: $(TARGETS)

bench_readwrite: bench_readwrite.c common.h
	$(CC) $(CFLAGS) $< -o $@

bench_sendfile: bench_sendfile.c common.h
	$(CC) $(CFLAGS) $< -o $@

bench_splice: bench_splice.c common.h
	$(CC) $(CFLAGS) $< -o $@

bench_iouring_zc: bench_iouring_zc.c common.h
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS_URING)

bench_latency: bench_latency.c common.h
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS_URING)

clean:
	rm -f $(TARGETS)

help:
	@echo "Zero-Copy Benchmark Suite"
	@echo ""
	@echo "Build:   make"
	@echo "Run all: ./run_bench.sh"
	@echo "Clean:   make clean"
	@echo ""
	@echo "Individual usage:"
	@echo "  ./bench_readwrite  <data_size> [port] [warmup_sec] [run_sec]"
	@echo "  ./bench_sendfile   <data_size> [port] [warmup_sec] [run_sec]"
	@echo "  ./bench_splice     <data_size> [port] [warmup_sec] [run_sec]"
	@echo "  ./bench_iouring_zc <data_size> [port] [warmup_sec] [run_sec]"
	@echo ""
	@echo "data_size: bytes (e.g. 64, 4096, 65536, 1048576)"
