61 lines
1.9 KiB
Makefile
61 lines
1.9 KiB
Makefile
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 |