Newer
Older
tree-os / Makefile
CC = i686-elf-gcc
CCFLAGS = -m32 -mtune=generic -ffreestanding -nostdlib -c -I src/kernel
LD = i686-elf-ld
LD_FLAGS = -m elf_i386 -nostdlib -T linker.ld -o
AS = nasm
ASFlAGS = -felf32
EMU = qemu-system-x86_64
EMUFLAGS = -no-reboot -m 256M -fda
DD = dd
DD_FLAGS = status=noxfer conv=notrunc

BUILD_FOLDER = build

SOURCE_FILES := $(shell find src/kernel -name *.c -or -name *.asm -or -name *.s)
OBJS := $(SOURCE_FILES:%=$(BUILD_FOLDER)/%.o)

default: run

run: tree-os.flp
	$(EMU) $(EMUFLAGS) $^

tree-os.flp: tree-os.bin
	$(DD) $(DD_FLAGS) if=$< of=$@

tree-os.bin: loader.bin kernel.bin
	cat $^ > $@

kernel.bin: linker.ld $(OBJS)
	$(LD) $(LD_FLAGS) $@ $(OBJS)

loader.bin: src/boot/boot.asm
	$(AS) -f bin -o $@ $<

$(BUILD_FOLDER)/%.asm.o: %.asm
	mkdir -p $(dir $@)
	$(AS) $(ASFlAGS) $< -o $@

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

$(BUILD_FOLDER)/%.s.o: %.s
	mkdir -p $(dir $@)
	$(CC) $(CCFLAGS) -r $< -o $@

clean:
	rm -r $(BUILD_FOLDER)