ARM ?= arm-none-eabi/bin/arm-none-eabi

IMG := bin/kernel.img
ELF := bin/kernel.elf

ASM_OBJECTS := $(wildcard src/*.R)
ASM_OBJECTS := $(notdir $(ASM_OBJECTS))
ASM_OBJECTS := $(addprefix obj/, $(ASM_OBJECTS))
ASM_OBJECTS := $(ASM_OBJECTS:.R=.o)

CC_OBJECTS := $(wildcard src/*.c)
CC_OBJECTS := $(notdir $(CC_OBJECTS))
CC_OBJECTS := $(addprefix obj/, $(CC_OBJECTS))
CC_OBJECTS := $(CC_OBJECTS:.c=.o)

CC_HEADERS := $(wildcard src/*.h)

LIST := kernel.lst
MAP := kernel.map

LD_SCRIPT := src/script.ld

.PHONY: all tasks carpetas $(IMG) clean

all: tasks carpetas $(IMG)

carpetas:
	mkdir -p ./obj
	mkdir -p ./bin

tasks:
	make -C tasks/

$(IMG): $(ASM_OBJECTS) $(CC_OBJECTS) $(LD_SCRIPT) Makefile $(CC_HEADERS)
	$(ARM)-ld -Map $(MAP) -T$(LD_SCRIPT) -o $(ELF) $(ASM_OBJECTS) $(CC_OBJECTS)
	$(ARM)-objdump -d $(ELF) > $(LIST)
	$(ARM)-objcopy $(ELF) -O binary $(IMG)

obj/%.o: src/%.R
	$(ARM)-as -mcpu=arm1176jzf-s -o $@ $^

obj/%.o: src/%.c
	$(ARM)-gcc -Wall -fno-common -nostdlib  -std=c99 -mcpu=arm1176jzf-s -I ./src/ -o $@ -c $^

copy: $(IMG)
	cp $(IMG) /run/media/$(USER)/boot
	sudo umount /run/media/$(USER)/boot

clean:
	make -C tasks/ clean
	rm -rf bin/ obj/ $(MAP) $(LIST)

