CC ?= cc
CFLAGS ?= -O2 -g -std=c11 -Wall -Wextra -Werror
BUILD := ../build/labs
.PHONY: all test sanitize
all: $(BUILD)/mechanisms $(BUILD)/link-symbols
$(BUILD):
	mkdir -p $@
$(BUILD)/mechanisms: mechanisms.c extra.c | $(BUILD)
	$(CC) $(CFLAGS) $^ -pthread -o $@
$(BUILD)/link-symbols: abi_main.c abi_helper.c abi_helper.h | $(BUILD)
	$(CC) $(CFLAGS) abi_main.c abi_helper.c -o $@
$(BUILD)/libabi.a: abi_helper.c abi_helper.h | $(BUILD)
	$(CC) $(CFLAGS) -fPIC -c abi_helper.c -o $(BUILD)/abi.o
	ar rcs $@ $(BUILD)/abi.o
$(BUILD)/libabi.so: abi_helper.c abi_helper.h | $(BUILD)
	$(CC) $(CFLAGS) -fPIC -shared abi_helper.c -o $@
test: all $(BUILD)/libabi.a $(BUILD)/libabi.so
	timeout 20 $(BUILD)/mechanisms
	$(BUILD)/link-symbols
	nm $(BUILD)/libabi.a | grep lab_sum
	readelf -h $(BUILD)/link-symbols > $(BUILD)/elf-header.txt
sanitize:
	$(MAKE) BUILD=../build/labs-asan CFLAGS='-O1 -g -std=c11 -Wall -Wextra -Werror -fsanitize=address,undefined -fno-omit-frame-pointer' test

$(BUILD)/abba: abba-counterexample.c | $(BUILD)
	$(CC) $(CFLAGS) $< -pthread -o $@
counterexample: $(BUILD)/abba
