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.
89 lines
1.6 KiB
Makefile
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)
|