Untitled_Kernel/Makefile
lordtet 6423dc4610 Makefile is getting a little messy, i'll rework it later, probably.
Anyway, now:
make iso -> creates iso with bootloader
make run_iso -> runs iso in qemu
make run -> runs kernel without bootloader or img creation
2025-05-26 17:59:56 -04:00

57 lines
1.1 KiB
Makefile

# Makefile
#Some definitions
SRC_DIR = src
BUILD_DIR = build
LOADER_DIR = module_bootloader
LOADER_NAME = uOS.iso
LOADER_IMG = $(BUILD_DIR)/$(LOADER_NAME)
KERNEL_MAIN = $(SRC_DIR)/main.c
KERNEL_MAIN_OBJ = $(BUILD_DIR)/main.o
ENTRY_ASM = $(SRC_DIR)/start.s
ENTRY_ASM_OBJ = $(BUILD_DIR)/start.o
LINKING_RECIPE = $(SRC_DIR)/linker.ld
KERNEL_IMG = $(BUILD_DIR)/ukern.elf
QEMU = qemu-system-i386
GCC = i686-elf-gcc
#Actual recipe
all: $(KERNEL_IMG)
$(BUILD_DIR):
mkdir -p $(BUILD_DIR)
$(KERNEL_MAIN_OBJ):
$(GCC) -std=gnu99 -ffreestanding -g -c $(KERNEL_MAIN) -o $(BUILD_DIR)/main.o
$(ENTRY_ASM_OBJ):
$(GCC) -std=gnu99 -ffreestanding -g -c $(ENTRY_ASM) -o $(ENTRY_ASM_OBJ)
#now kith (link)
$(KERNEL_IMG): $(KERNEL_MAIN_OBJ) $(ENTRY_ASM_OBJ)
$(GCC) -ffreestanding -nostdlib -g -T $(LINKING_RECIPE) $(ENTRY_ASM_OBJ) $(KERNEL_MAIN_OBJ) -o $(KERNEL_IMG) -lgcc
run: all
$(QEMU) -kernel $(KERNEL_IMG)
$(LOADER_IMG): $(KERNEL_IMG)
cp $(KERNEL_IMG) $(LOADER_DIR)/src/boot/; \
cd $(LOADER_DIR); \
make all; \
cd ..; \
cp $(LOADER_DIR)/$(LOADER_IMG) $(BUILD_DIR)/
iso: $(LOADER_IMG)
run_iso: iso
$(QEMU) -cdrom $(LOADER_IMG)
clean:
rm -rf $(BUILD_DIR)/*