Files
net/platform/Makefile
2025-12-20 18:49:21 -08:00

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