- Changed primary assembler to NASM. Specifically so I could use - - Swapped start.s to intel syntax. I find it prettier. Learned a lot doing it tbh. - Changed the name of the multiboot structures in C.
76 lines
1.4 KiB
Makefile
76 lines
1.4 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
|
|
|
|
###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) -kernel $(OUT_ELF)
|
|
|
|
.PHONY: debug
|
|
debug:
|
|
$(QEMU) -s -S -kernel $(OUT_ELF)
|
|
|
|
.PHONY: run_iso
|
|
run_iso:
|
|
$(QEMU) -cdrom $(OUT_ISO)
|
|
|
|
.PHONY: debug_iso
|
|
debug_iso:
|
|
$(QEMU) -s -S -cdrom $(OUT_ISO)
|