CC ?= gcc
LD ?= ld
BUILD := build
CFLAGS := -std=c11 -m32 -O2 -g -ffreestanding -fno-pie -fno-pic \
	-fno-stack-protector -fno-asynchronous-unwind-tables -fno-unwind-tables \
	-Wall -Wextra -Wconversion -Wshadow -Werror

.PHONY: all clean
COMMON := $(BUILD)/entry.o $(BUILD)/model.o $(BUILD)/machine.o
all: $(BUILD)/fuser.elf $(BUILD)/oracle.elf

$(BUILD):
	mkdir -p $@

$(BUILD)/entry.o: entry.S | $(BUILD)
	$(CC) -m32 -ffreestanding -fno-pie -c $< -o $@

$(BUILD)/%.o: %.c model.h machine.h | $(BUILD)
	$(CC) $(CFLAGS) -c $< -o $@

$(BUILD)/fuser.elf: $(COMMON) $(BUILD)/guest.o layout.ld
	$(LD) -m elf_i386 --build-id=none -T layout.ld $(filter %.o,$^) -o $@

$(BUILD)/oracle.elf: $(COMMON) $(BUILD)/oracle.o layout.ld
	$(LD) -m elf_i386 --build-id=none -T layout.ld $(filter %.o,$^) -o $@

clean:
	rm -rf $(BUILD)
