53 lines
1.2 KiB
Makefile
53 lines
1.2 KiB
Makefile
# ====== Configuration ======
|
|
TARGET ?= i686-elf
|
|
PLATFORM ?= pcmultiboot
|
|
|
|
CC := $(TARGET)-gcc
|
|
AS := $(TARGET)-as
|
|
AR := $(TARGET)-ar
|
|
|
|
OBJ_DIR := obj
|
|
LIB := $(OBJ_DIR)/$(PLATFORM).a
|
|
|
|
-include $(PLATFORM).make
|
|
|
|
# ====== File Discovery ======
|
|
HEADERS := $(wildcard *.h)
|
|
|
|
C_OBJS := $(patsubst %.c, $(OBJ_DIR)/%.o, $(C_SRCS))
|
|
ASM_OBJS := $(patsubst %.s, $(OBJ_DIR)/%.o, $(ASM_SRCS))
|
|
OBJS := $(C_OBJS) $(ASM_OBJS)
|
|
|
|
# ====== Default Flags (can be overridden in make.config) ======
|
|
CFLAGS ?= -Wall -Wextra -ffreestanding -mno-80387 -mgeneral-regs-only -O2 -I ../
|
|
ASFLAGS ?=
|
|
|
|
# ====== Default Rule ======
|
|
all: pre_build $(LIB)
|
|
|
|
# ====== Pre-build Hook ======
|
|
# This can be overridden or extended in platform make
|
|
pre_build: ;
|
|
|
|
# ====== Static Library ======
|
|
$(LIB): $(OBJS)
|
|
$(AR) rcs $@ $(OBJS)
|
|
|
|
# ====== Compilation Rules ======
|
|
# C files depend on all headers.
|
|
$(OBJ_DIR)/%.o: %.c $(HEADERS) obj
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
# Assembly files do NOT depend on headers.
|
|
$(OBJ_DIR)/%.o: %.s obj
|
|
$(AS) $(ASFLAGS) -o $@ $<
|
|
|
|
# ====== Clean Rule ======
|
|
clean:
|
|
rm -rf $(OBJ_DIR) $(LIB)
|
|
|
|
obj:
|
|
mkdir -p $(OBJ_DIR)
|
|
|
|
# ====== Phony Targets ======
|
|
.PHONY: all clean pre_build obj |