﻿CC ?= cc

COMMON_WARN = -g -Wall -Wextra -Wpedantic -Werror -std=gnu11
PART1_FLAGS = $(COMMON_WARN) -O0
PART23_FLAGS_O0 = $(COMMON_WARN) -O0
PART23_FLAGS_O3 = $(COMMON_WARN) -O3
SCALAR_FLAGS = $(COMMON_WARN) -O0 -DLAB13_FORCE_SCALAR=1

all: clean part1 part2_3 part2_3_opt

part1:
	$(CC) $(PART1_FLAGS) -o part1 part1.c

part2_3:
	$(CC) $(PART23_FLAGS_O0) -o part2_3 part2_3.c

part2_3_opt:
	$(CC) $(PART23_FLAGS_O3) -o part2_3_opt part2_3.c

part1_scalar:
	$(CC) $(SCALAR_FLAGS) -o part1_scalar part1.c

part2_3_scalar:
	$(CC) $(SCALAR_FLAGS) -o part2_3_scalar part2_3.c

test1: part1
	@echo "Running part1.c with default build settings"
	@./part1

test2: part2_3 part2_3_opt
	@echo "Running part2_3.c with -O0"
	@./part2_3
	@echo
	@echo "Running part2_3.c with -O3"
	@./part2_3_opt

test_scalar: part1_scalar part2_3_scalar
	@echo "Running compatibility build for part1.c"
	@./part1_scalar
	@echo
	@echo "Running compatibility build for part2_3.c"
	@./part2_3_scalar

clean:
	rm -f part1 part2_3 part2_3_opt part1_scalar part2_3_scalar

.PHONY: all clean part1 part2_3 part2_3_opt part1_scalar part2_3_scalar test1 test2 test_scalar


