Refactoring of makefiles is here. Looks like a bit less of a mess,

thankfully.

Also now using `ld` and `as` instead of `gcc` for everything. Seems to
work OK for now - but may bite on the ass later. We'll see!
This commit is contained in:
lordtet 2025-05-26 22:42:41 -04:00
parent 6423dc4610
commit 7500299684
3 changed files with 53 additions and 40 deletions

View file

@ -1,57 +1,66 @@
# Makefile ###CONFIGURATION
ARCH := i686
CROSS := $(ARCH)-elf-
AS := $(CROSS)as
CC := $(CROSS)gcc
LD := $(CROSS)ld
QEMU := qemu-system-i386
#Some definitions
SRC_DIR = src
BUILD_DIR = build
LOADER_DIR = module_bootloader CFLAGS := -ffreestanding -nostdlib -lgcc -g
LOADER_NAME = uOS.iso LDFLAGS := -T linker.ld -nostdlib
LOADER_IMG = $(BUILD_DIR)/$(LOADER_NAME)
KERNEL_MAIN = $(SRC_DIR)/main.c SRC_DIR := src
KERNEL_MAIN_OBJ = $(BUILD_DIR)/main.o OBJ_DIR := obj
BIN_DIR := build
LOADER_DIR := module_bootloader
ENTRY_ASM = $(SRC_DIR)/start.s SOURCES := $(wildcard $(SRC_DIR)/*.c) $(wildcard $(SRC_DIR)/*.s)
ENTRY_ASM_OBJ = $(BUILD_DIR)/start.o OBJECTS := $(patsubst $(SRC_DIR)/%, $(OBJ_DIR)/%, $(SOURCES:.c=.o))
OBJECTS := $(OBJECTS:.s=.o)
LINKING_RECIPE = $(SRC_DIR)/linker.ld
KERNEL_IMG = $(BUILD_DIR)/ukern.elf OUT_ELF := $(BIN_DIR)/ukern.elf
OUT_ISO := $(BIN_DIR)/uOS.iso
QEMU = qemu-system-i386 ###RULES
GCC = i686-elf-gcc
#Actual recipe .PHONY: all
all: $(KERNEL_IMG) all: $(OUT_ELF)
$(BUILD_DIR): #Build Targets
mkdir -p $(BUILD_DIR) $(OUT_ELF): $(OBJECTS)
@mkdir -p $(BIN_DIR)
$(LD) $(LDFLAGS) -o $@ $^
$(KERNEL_MAIN_OBJ): $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
$(GCC) -std=gnu99 -ffreestanding -g -c $(KERNEL_MAIN) -o $(BUILD_DIR)/main.o @mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c $< -o $@
$(ENTRY_ASM_OBJ): $(OBJ_DIR)/%.o: $(SRC_DIR)/%.s
$(GCC) -std=gnu99 -ffreestanding -g -c $(ENTRY_ASM) -o $(ENTRY_ASM_OBJ) @mkdir -p $(dir $@)
$(AS) $< -o $@
#now kith (link) #Related targets
$(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) $(OUT_ISO): $(OUT_ELF)
cp $(KERNEL_IMG) $(LOADER_DIR)/src/boot/; \ @cp $(OUT_ELF) $(LOADER_DIR)/src/boot/
cd $(LOADER_DIR); \ @$(MAKE) -C $(LOADER_DIR) all
make all; \ @cp $(LOADER_DIR)/$(OUT_ISO) $(BIN_DIR)/
cd ..; \
cp $(LOADER_DIR)/$(LOADER_IMG) $(BUILD_DIR)/
iso: $(LOADER_IMG)
run_iso: iso
$(QEMU) -cdrom $(LOADER_IMG)
#Utility
.PHONY: clean
clean: clean:
rm -rf $(BUILD_DIR)/* rm -rf $(OBJ_DIR) $(BIN_DIR)i
.PHONY: iso
iso: $(OUT_ISO)
.PHONY: run
run:
$(QEMU) -kernel $(OUT_ELF)
.PHONY: run_iso
run_iso:
$(QEMU) -cdrom $(OUT_ISO)

View file

@ -7,3 +7,7 @@ BUILD_DIR = build
all: all:
grub-mkrescue -o $(BUILD_DIR)/uOS.iso $(SRC_DIR) grub-mkrescue -o $(BUILD_DIR)/uOS.iso $(SRC_DIR)
.PHONY: clean
clean:
rm $(BUILD_DIR)/*