MAKE := make
MAKEFLAGS += -j 8

ARCH := aarch64
GNU := $(ARCH)-linux-gnu

CC := $(GNU)-gcc
CCFLAGS += -Wall -Wextra -O0 \
					 -nostdinc -nostdlib -nostartfiles -nodefaultlibs \
					 -Wno-unused-parameter -Wno-unused-value -Wno-main -g

LD := $(GNU)-ld
LDFLAGS += -g -nostdlib -no-pie
OBJCOPY := $(GNU)-objcopy

INCLUDE := -I../include -Iinclude

LD_SCRIPT := linker.ld
SRCS := $(shell find . -name '*.[cS]')
OBJS := $(SRCS:%=%.o)

.PHONY: all

all: userprog

userprog: userprog.elf
	$(OBJCOPY) -O binary $< $@

userprog.elf: $(LD_SCRIPT) $(OBJS)
	$(LD) -o $@ -T $(LD_SCRIPT) $(OBJS) $(LDFLAGS)

%.S.o: %.S
	mkdir -p $(dir $@)
	$(CC) -c $< -o $@ $(INCLUDE) $(CCFLAGS)

%.c.o: %.c
	mkdir -p $(dir $@)
	$(CC) -c $< -o $@ $(INCLUDE) $(CCFLAGS)

clean:
	-rm $(OBJS) userprog userprog.elf
