CC = gcc
CFLAGS = -std=c11 -Wall -Wextra -Werror -g -O0
.PHONY: test clean unit objects
build/main.o: main.c sensor.h
	mkdir -p build
	$(CC) $(CFLAGS) -c main.c -o $@
build/sensor.o: sensor.c sensor.h
	mkdir -p build
	$(CC) $(CFLAGS) -c sensor.c -o $@
build/test: test_sensor.c sensor.c sensor.h
	mkdir -p build
	$(CC) $(CFLAGS) -I. test_sensor.c sensor.c -o $@
objects: build/main.o build/sensor.o
unit: build/test
	./build/test
recorder: build/main.o build/sensor.o
	$(CC) $(CFLAGS) build/main.o build/sensor.o -o $@
test: regression hal-test
clean:
	rm -rf build recorder record-buffer debug-probe test-hal test-alternate test-read-fault test-write-fault test-registers hal-demo

build/test_buffer: test_buffer.c buffer.c buffer.h
	mkdir -p build
	$(CC) $(CFLAGS) test_buffer.c buffer.c -o $@
record-buffer: record_main.c buffer.c sensor.c buffer.h sensor.h
	$(CC) $(CFLAGS) record_main.c buffer.c sensor.c -o $@
debug-probe: debug_probe.c buffer.c buffer.h
	$(CC) $(CFLAGS) debug_probe.c buffer.c -o $@
memory-test:
	python3 memory_check.py

.PHONY: hal-test regression
regression:
	python3 check.py
	python3 memory_check.py
hal-test: test-hal test-alternate test-read-fault test-write-fault test-registers
	./test-hal
	./test-alternate
	./test-read-fault
	./test-write-fault
	./test-registers
test-hal: test_hal.c hal_sim.c recorder.c buffer.c sensor.c hal.h hal_sim.h recorder.h buffer.h sensor.h
	$(CC) $(CFLAGS) test_hal.c hal_sim.c recorder.c buffer.c sensor.c -o $@
test-alternate: test_alternate.c hal_fixture.c recorder.c buffer.c sensor.c hal.h recorder.h buffer.h sensor.h
	$(CC) $(CFLAGS) test_alternate.c hal_fixture.c recorder.c buffer.c sensor.c -o $@
test-read-fault: test_fault.c hal_fault.c recorder.c buffer.c sensor.c hal.h recorder.h buffer.h sensor.h
	$(CC) $(CFLAGS) test_fault.c hal_fault.c recorder.c buffer.c sensor.c -o $@
test-write-fault: test_fault.c hal_fault.c recorder.c buffer.c sensor.c hal.h recorder.h buffer.h sensor.h
	$(CC) $(CFLAGS) -DFAIL_WRITE=1 test_fault.c hal_fault.c recorder.c buffer.c sensor.c -o $@
test-registers: test_registers.c registers.c registers.h
	$(CC) $(CFLAGS) test_registers.c registers.c -o $@
hal-demo: hal_demo.c hal_sim.c recorder.c buffer.c sensor.c hal.h hal_sim.h recorder.h buffer.h sensor.h
	$(CC) $(CFLAGS) hal_demo.c hal_sim.c recorder.c buffer.c sensor.c -o $@
