2025-03-27 11:39:12 -04:00
|
|
|
### Copyright (c) 2025 Freya Murphy <freya@freyacat.org>
|
2025-03-25 17:36:52 -04:00
|
|
|
|
2025-03-27 11:39:12 -04:00
|
|
|
.PHONY: build fmt clean qemu
|
2025-03-25 17:41:18 -04:00
|
|
|
.SILENT:
|
2025-03-25 17:36:52 -04:00
|
|
|
|
2025-04-17 13:44:55 -04:00
|
|
|
AS ?= as
|
|
|
|
CC ?= cc
|
|
|
|
LD ?= ld
|
|
|
|
CPP ?= cpp
|
|
|
|
|
|
|
|
CPPFLAGS += -Ikernel/include
|
|
|
|
|
2025-04-19 16:36:51 -04:00
|
|
|
CFLAGS += -O2
|
2025-04-17 13:44:55 -04:00
|
|
|
CFLAGS += -std=c11
|
|
|
|
CFLAGS += -Wall -Wextra -pedantic
|
|
|
|
CFLAGS += -fno-pie -fno-stack-protector
|
|
|
|
CFLAGS += -fno-omit-frame-pointer -ffreestanding
|
|
|
|
CFLAGS += -fno-builtin
|
|
|
|
CFLAGS += -D DEBUG -g
|
|
|
|
CFLAGS += $(CPPFLAGS)
|
|
|
|
|
2025-04-17 14:12:53 -04:00
|
|
|
LDFLAGS += -nmagic -nostdlib
|
2025-04-17 14:49:33 -04:00
|
|
|
LDFLAGS += -z noexecstack
|
2025-04-17 13:44:55 -04:00
|
|
|
|
|
|
|
SRC=kernel
|
|
|
|
BIN=bin
|
|
|
|
KERNEL=kernel.bin
|
|
|
|
ISO=os.iso
|
2025-04-20 23:34:00 -04:00
|
|
|
IMAGE=disk.img
|
|
|
|
IMAGE_SIZE=4G
|
2025-04-17 13:44:55 -04:00
|
|
|
|
|
|
|
H_SRC = $(shell find $(SRC) -type f -name "*.h")
|
|
|
|
A_SRC = $(shell find $(SRC) -type f -name "*.S")
|
|
|
|
A_OBJ = $(patsubst %.S,$(BIN)/%.S.o,$(A_SRC))
|
|
|
|
C_SRC = $(shell find $(SRC) -type f -name "*.c")
|
|
|
|
C_OBJ = $(patsubst %.c,$(BIN)/%.o,$(C_SRC))
|
|
|
|
|
2025-03-26 23:55:20 -04:00
|
|
|
UNAME := $(shell uname)
|
|
|
|
|
2025-04-03 12:31:21 -04:00
|
|
|
QEMU = qemu-system-x86_64
|
2025-04-17 13:44:55 -04:00
|
|
|
QEMUOPTS = -cdrom $(BIN)/$(ISO) \
|
2025-03-27 14:50:33 -04:00
|
|
|
-no-reboot \
|
2025-04-20 23:34:00 -04:00
|
|
|
-drive format=raw,file=$(BIN)/$(IMAGE)\
|
2025-03-25 18:00:51 -04:00
|
|
|
-serial mon:stdio \
|
|
|
|
-m 4G \
|
|
|
|
-name kern
|
2025-03-25 17:36:52 -04:00
|
|
|
|
2025-04-19 16:36:51 -04:00
|
|
|
GRUB = grub-mkrescue
|
|
|
|
|
|
|
|
ifdef UEFI
|
|
|
|
QEMU = qemu-system-x86_64-uefi
|
|
|
|
GRUB = grub-mkrescue-uefi
|
|
|
|
endif
|
|
|
|
|
2025-04-20 23:50:31 -04:00
|
|
|
qemu: $(BIN)/$(ISO) $(BIN)/$(IMAGE)
|
2025-04-10 14:57:15 -04:00
|
|
|
$(QEMU) $(QEMUOPTS)
|
2025-04-10 14:34:35 -04:00
|
|
|
|
2025-04-20 23:50:31 -04:00
|
|
|
qemu-kvm: $(BIN)/$(ISO) $(BIN)/$(IMAGE)
|
2025-04-17 14:14:18 -04:00
|
|
|
$(QEMU) $(QEMUOPTS) -cpu host --enable-kvm
|
|
|
|
|
2025-04-20 23:50:31 -04:00
|
|
|
qemu-kvm-nox: $(BIN)/$(ISO) $(BIN)/$(IMAGE)
|
2025-04-17 14:14:18 -04:00
|
|
|
$(QEMU) $(QEMUOPTS) -cpu host --enable-kvm -nographic
|
2025-04-16 16:51:06 -04:00
|
|
|
|
2025-04-20 23:50:31 -04:00
|
|
|
qemu-nox: $(BIN)/$(ISO) $(BIN)/$(IMAGE)
|
2025-04-10 15:00:49 -04:00
|
|
|
$(QEMU) $(QEMUOPTS) -nographic
|
2025-03-25 17:36:52 -04:00
|
|
|
|
2025-04-20 23:50:31 -04:00
|
|
|
qemu-gdb: $(BIN)/$(ISO) $(BIN)/$(IMAGE)
|
2025-04-10 14:57:15 -04:00
|
|
|
$(QEMU) $(QEMUOPTS) -S -gdb tcp::1337
|
2025-04-10 14:34:35 -04:00
|
|
|
|
2025-04-20 23:50:31 -04:00
|
|
|
qemu-gdb-nox: $(BIN)/$(ISO) $(BIN)/$(IMAGE)
|
2025-04-10 14:57:15 -04:00
|
|
|
$(QEMU) $(QEMUOPTS) -nographic -S -gdb tcp::1337
|
2025-03-25 18:00:51 -04:00
|
|
|
|
|
|
|
gdb:
|
2025-04-08 10:39:48 -04:00
|
|
|
gdb -q -n -x config/gdbinit
|
2025-03-25 17:36:52 -04:00
|
|
|
|
|
|
|
clean:
|
2025-04-17 13:44:55 -04:00
|
|
|
rm -fr $(BIN)
|
|
|
|
|
|
|
|
build: $(BIN)/$(ISO)
|
|
|
|
|
|
|
|
$(A_OBJ): $(BIN)/%.S.o : %.S
|
|
|
|
mkdir -p $(@D)
|
|
|
|
printf "\033[33m AS \033[0m%s\n" $<
|
|
|
|
$(CPP) $(CPPFLAGS) -o $@.cpp $<
|
|
|
|
$(AS) -o $@ $@.cpp
|
|
|
|
|
|
|
|
$(C_OBJ): $(BIN)/%.o : %.c
|
|
|
|
mkdir -p $(@D)
|
|
|
|
printf "\033[34m CC \033[0m%s\n" $<
|
|
|
|
$(CC) -c $(CFLAGS) -o $@ $<
|
2025-03-25 17:41:18 -04:00
|
|
|
|
2025-04-17 13:44:55 -04:00
|
|
|
$(BIN)/$(KERNEL): $(C_OBJ) $(A_OBJ)
|
|
|
|
mkdir -p $(@D)
|
|
|
|
printf "\033[32m LD \033[0m%s\n" $@
|
|
|
|
$(LD) $(LDFLAGS) -T config/kernel.ld -o $(BIN)/$(KERNEL) $(A_OBJ) $(C_OBJ)
|
2025-03-25 17:36:52 -04:00
|
|
|
|
2025-04-17 13:44:55 -04:00
|
|
|
$(BIN)/$(ISO): $(BIN)/$(KERNEL)
|
|
|
|
mkdir -p $(BIN)/iso/boot/grub
|
|
|
|
cp config/grub.cfg $(BIN)/iso/boot/grub
|
|
|
|
cp $(BIN)/$(KERNEL) $(BIN)/iso/boot
|
2025-04-19 16:36:51 -04:00
|
|
|
$(GRUB) -o $(BIN)/$(ISO) bin/iso 2>/dev/null
|
2025-04-03 14:39:21 -04:00
|
|
|
|
2025-04-20 23:50:31 -04:00
|
|
|
$(BIN)/$(IMAGE):
|
|
|
|
qemu-img create $(BIN)/$(IMAGE) $(IMAGE_SIZE)
|
|
|
|
|
2025-03-27 11:39:12 -04:00
|
|
|
fmt:
|
2025-04-08 14:23:06 -04:00
|
|
|
clang-format -i $(shell find -type f -name "*.[ch]" -and -not -path "./kernel/old/*")
|
|
|
|
sed -i 's/[ \t]*$$//' $(shell find -type f -name "*.[chS]" -and -not -path "./kernel/old/*")
|