Untitled_Kernel/Makefile
lordtet 53198515c8 Temporary "default output" global, makefile changes.
Default output variable holds a generic writer, and any output that
isn't really sure where to output to can just output there. Set by the
system early in boot.

Also made some changes to the makefile to support arguments in the "make
run" or "make debug" subset of calls. For now, it's just VGA=1/0 or
SERIAL=1/0 to enable/disable VGA/serial. Defaults are VGA=1, SERIAL=0.
2025-07-04 02:20:31 -04:00

89 lines
1.6 KiB
Makefile

###CONFIGURATION
ARCH := i686
CROSS := $(ARCH)-elf-
AS := nasm
CC := $(CROSS)gcc
LD := $(CROSS)ld
QEMU := qemu-system-i386
INCLUDES:= include/
CFLAGS := -I $(INCLUDES) -O2 -Wall -Wextra -ffreestanding -nostdlib -lgcc -g
LDFLAGS := -T linker.ld -nostdlib
ASFLAGS := -f elf32
SRC_DIR := src
OBJ_DIR := obj
BIN_DIR := build
LOADER_DIR := module_bootloader
SOURCES := $(wildcard $(SRC_DIR)/*.c) $(wildcard $(SRC_DIR)/*.s)
OBJECTS := $(patsubst $(SRC_DIR)/%, $(OBJ_DIR)/%, $(SOURCES:.c=.o))
OBJECTS := $(OBJECTS:.s=.o)
OUT_ELF := $(BIN_DIR)/ukern.elf
OUT_ISO := $(BIN_DIR)/uOS.iso
###QEMU CONFIG
QEMU_FLAGS :=
VGA ?= 1
SERIAL ?= 0
ifeq ($(VGA), 0)
QEMU_FLAGS += -display none
endif
ifeq ($(SERIAL), 1)
QEMU_FLAGS += -serial stdio
endif
###RULES
.PHONY: all
all: $(OUT_ELF)
#Build Targets
$(OUT_ELF): $(OBJECTS)
@mkdir -p $(BIN_DIR)
$(LD) $(LDFLAGS) -o $@ $^ $(shell $(CC) -print-libgcc-file-name)
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c $< -o $@
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.s
@mkdir -p $(dir $@)
$(AS) $(ASFLAGS) $< -o $@
#Related targets
$(OUT_ISO): $(OUT_ELF)
@cp $(OUT_ELF) $(LOADER_DIR)/src/boot/
@$(MAKE) -C $(LOADER_DIR) all
@cp $(LOADER_DIR)/$(OUT_ISO) $(BIN_DIR)/
#Utility
.PHONY: clean
clean:
rm -rf $(OBJ_DIR) $(BIN_DIR)
.PHONY: iso
iso: $(OUT_ISO)
.PHONY: run
run: $(OUT_ELF)
$(QEMU) $(QEMU_FLAGS) -kernel $(OUT_ELF)
.PHONY: debug
debug:
$(QEMU) $(QEMU_FLAGS) -s -S -kernel $(OUT_ELF)
.PHONY: run_iso
run_iso:
$(QEMU) $(QEMU_FLAGS) -cdrom $(OUT_ISO)
.PHONY: debug_iso
debug_iso:
$(QEMU) $(QEMU_FLAGS) -s -S -cdrom $(OUT_ISO)