ARCH ?= i686 PLATFORM ?= pcmultiboot TARGET ?= $(ARCH)-elf CC := $(TARGET)-gcc LD := $(TARGET)-ld AR := $(TARGET)-ar PLATFORM_DIR := platform EXEC_DIR := exec DEV_DIR := dev GUI_DIR := gui OUT_KERNEL := kernel.elf LINK_SCRIPT := $(PLATFORM_DIR)/$(PLATFORM).ld PLATFORM_LIB := $(PLATFORM_DIR)/obj/$(PLATFORM).a EXEC_LIB := $(EXEC_DIR)/obj/exec.a DEV_LIB := $(DEV_DIR)/pclpt/pclpt.a $(DEV_DIR)/ne2k_isa/ne2k_isa.a $(DEV_DIR)/bga/bga.a GUI_LIB := $(GUI_DIR)/gui.a # ====================================== # Default target # ====================================== all: build_components link_kernel # ====================================== # Build components # ====================================== build_components: $(MAKE) -C platform PLATFORM=$(PLATFORM) $(MAKE) -C exec TARGET=$(TARGET) $(MAKE) -C gui TARGET=$(TARGET) $(MAKE) -C dev/pclpt TARGET=$(TARGET) $(MAKE) -C dev/ne2k_isa TARGET=$(TARGET) $(MAKE) -C dev/bga TARGET=$(TARGET) # ====================================== # Linking final kernel # ====================================== link_kernel: $(OUT_KERNEL) $(OUT_KERNEL): $(PLATFORM_LIB) $(EXEC_LIB) $(DEV_LIB) $(LINK_SCRIPT) $(CC) -T $(LINK_SCRIPT) -Wl,-Map=kernel.map -nostdlib -ffreestanding -o $@ \ -Wl,--start-group $(PLATFORM_LIB) $(EXEC_LIB) $(DEV_LIB) $(GUI_LIB) -Wl,--end-group # ====================================== # Clean # ====================================== clean: $(MAKE) -C platform clean PLATFORM=$(PLATFORM) $(MAKE) -C exec clean TARGET=$(TARGET) $(MAKE) -C gui clean TARGET=$(TARGET) $(MAKE) -C dev/pclpt clean TARGET=$(TARGET) $(MAKE) -C dev/ne2k_isa clean TARGET=$(TARGET) $(MAKE) -C dev/bga clean TARGET=$(TARGET) rm -rf $(OUT_KERNEL) kernel.map # ====================================== # Phony targets # ====================================== .PHONY: all clean setup_headers build_components link_kernel