Untitled_Kernel/Makefile

94 lines
1.6 KiB
Makefile
Raw Permalink Normal View History

###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 ($(VGA), 2)
QEMU_FLAGS += -monitor stdio
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)