46 lines
881 B
Makefile
46 lines
881 B
Makefile
PROJECT_ROOT = $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
|
|
|
|
ifeq ($(BUILD_MODE),debug)
|
|
CFLAGS += -g
|
|
endif
|
|
|
|
TARGET = i686-elf
|
|
CC = $(TARGET)-gcc
|
|
STRIP = $(TARGET)-strip
|
|
NASM = nasm
|
|
QEMU = qemu-system-i386
|
|
|
|
CFLAGS += -std=gnu17 -ffreestanding -O2 -Wall -Wextra
|
|
LDFLAGS += -ffreestanding -O2 -nostdlib -lgcc
|
|
NASMFLAGS += -felf32
|
|
|
|
BIN = isodir/boot/hhhos.bin
|
|
ISO = HhhOS.iso
|
|
|
|
OBJS = boot.o kernel.o string.o terminal.o
|
|
|
|
.PHONY: all qemu clean
|
|
|
|
all: qemu
|
|
|
|
qemu: $(ISO)
|
|
$(QEMU) -cdrom $(ISO)
|
|
|
|
$(ISO): $(BIN)
|
|
mkdir -p isodir/boot/grub
|
|
cp $(PROJECT_ROOT)grub.cfg isodir/boot/grub/grub.cfg
|
|
grub-mkrescue -o $(ISO) isodir
|
|
|
|
$(BIN): $(OBJS)
|
|
mkdir -p isodir/boot
|
|
$(CC) -T $(PROJECT_ROOT)linker.ld $(LDFLAGS) -o $@ $^
|
|
|
|
%.o: $(PROJECT_ROOT)%.c
|
|
$(CC) -c $(CFLAGS) -I$(PROJECT_ROOT)include -o $@ $<
|
|
|
|
%.o: $(PROJECT_ROOT)%.asm
|
|
$(NASM) $(NASMFLAGS) -o $@ $<
|
|
|
|
clean:
|
|
rm -fr HhhOS $(OBJS)
|