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:
parent
6423dc4610
commit
7500299684
3 changed files with 53 additions and 40 deletions
89
Makefile
89
Makefile
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)/*
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue