rearraged files, set up to use grub bootloader

This commit is contained in:
2026-06-10 18:28:33 -05:00
parent 0f8d5f8ce7
commit eb1e096bac
19 changed files with 270 additions and 386 deletions

View File

@@ -1,55 +1,38 @@
CC = i686-elf-gcc
LD = i686-elf-ld
OBJCOPY = i686-elf-objcopy
CFLAGS = -m32 -ffreestanding -O2 -Wall -Wextra -nostdlib
ASFLAGS = -m32
OSNAME := rockos
BOOT_DIR := boot
KERNEL_DIR := kernel
BUILD_DIR := build
C_SOURCES := $(shell find kernel -type f -name '*.c')
S_SOURCES := $(shell find kernel -type f -name '*.s')
BOOT_BIN := $(BUILD_DIR)/boot.bin
KERNEL_BIN := $(BUILD_DIR)/kernel.bin
IMAGE := os.img
OBJECTS := $(patsubst %.c, obj/%.o, $(C_SOURCES)) $(patsubst %.s, obj/%.o, $(S_SOURCES))
.PHONY: all clean run
CFLAGS := -ffreestanding -O2 -Wall -Wextra -Ikernel
LDFLAGS := -T kernel/linker.ld
all: $(IMAGE)
.PHONY: all run clean
$(BUILD_DIR)/%.o: $(BOOT_DIR)/%.s | $(BUILD_DIR)
$(CC) $(ASFLAGS) -c $< -o $@
$(OSNAME).bin: $(OBJECTS)
$(LD) $(LDFLAGS) -o $@ $(OBJECTS)
$(BUILD_DIR)/%.o: $(KERNEL_DIR)/%.s | $(BUILD_DIR)
$(CC) $(ASFLAGS) -c $< -o $@
$(OSNAME).iso: $(OSNAME).bin grub.cfg
mkdir -p isodir/boot/grub
cp $(OSNAME).bin isodir/boot/$(OSNAME)
cp grub.cfg isodir/boot/grub/grub.cfg
grub-mkrescue -o $(OSNAME).iso isodir
$(BUILD_DIR)/%.o: $(KERNEL_DIR)/%.c | $(BUILD_DIR)
$(CC) $(CFLAGS) -c $< -o $@
obj/%.o: %.c
@mkdir -p $(dir $@)
$(CC) -c $< -o $@ $(CFLAGS)
$(BUILD_DIR)/boot.elf: $(BUILD_DIR)/boot.o $(BOOT_DIR)/boot.ld
$(LD) -T $(BOOT_DIR)/boot.ld -o $@ $(BUILD_DIR)/boot.o
obj/%.o: %.s
@mkdir -p $(dir $@)
$(CC) -c $< -o $@ $(CFLAGS)
$(BOOT_BIN): $(BUILD_DIR)/boot.elf
$(OBJCOPY) -O binary $< $@
run: $(OSNAME).iso
qemu-system-i386 -cdrom $(OSNAME).iso
KERNEL_OBJS := $(BUILD_DIR)/prekernel.o $(BUILD_DIR)/kmain.o
$(BUILD_DIR)/kernel.elf: $(KERNEL_OBJS) $(KERNEL_DIR)/kernel.ld
$(LD) -T $(KERNEL_DIR)/kernel.ld -o $@ $(KERNEL_OBJS)
$(KERNEL_BIN): $(BUILD_DIR)/kernel.elf
$(OBJCOPY) -O binary $< $@
$(BUILD_DIR):
mkdir -p $(BUILD_DIR)
$(IMAGE): $(BOOT_BIN) $(KERNEL_BIN)
dd if=$(BOOT_BIN) of=$@ bs=512 count=1
dd if=$(KERNEL_BIN) of=$@ bs=512 seek=1
truncate -s 1440k $@
run: $(IMAGE)
qemu-system-i386 -drive format=raw,file=$(IMAGE)
clean:
rm -rf $(BUILD_DIR) $(IMAGE)
clean:
@echo "Cleaning up build artifacts..."
rm -rf $(OSNAME).iso $(OSNAME).bin obj isodir