CC ?= gcc
CFLAGS ?= -O3 -std=c11 -Wall -Wextra -Werror -fPIC -pthread
LDFLAGS ?= -pthread

LIBRARY := libh618_hub75.so
BENCHMARK := hub75_benchmark
UNIT_TEST := hub75_native_test
SAFEOFF := hub75_safeoff

.PHONY: all clean test

all: $(LIBRARY) $(BENCHMARK) $(UNIT_TEST) $(SAFEOFF)

$(LIBRARY): h618_hub75.c h618_hub75.h
	$(CC) $(CFLAGS) -shared h618_hub75.c -o $@ $(LDFLAGS)

$(BENCHMARK): benchmark.c h618_hub75.c h618_hub75.h
	$(CC) $(CFLAGS) benchmark.c h618_hub75.c -o $@ $(LDFLAGS)

$(UNIT_TEST): native_test.c h618_hub75.c h618_hub75.h
	$(CC) $(CFLAGS) native_test.c h618_hub75.c -o $@ $(LDFLAGS)

$(SAFEOFF): safeoff.c h618_hub75.c h618_hub75.h
	$(CC) $(CFLAGS) safeoff.c h618_hub75.c -o $@ $(LDFLAGS)

test: $(UNIT_TEST) $(SAFEOFF)
	./$(UNIT_TEST)
	./$(SAFEOFF) --fake

clean:
	rm -f -- $(LIBRARY) $(BENCHMARK) $(UNIT_TEST) $(SAFEOFF)
