# ====== Configuration ====== VHEADERS ?= TARGET ?= i686-elf CC := $(TARGET)-gcc AR := $(TARGET)-ar CFLAGS := -Wall -Wextra -ffreestanding -I . -I ../ -O2 # ====== Directories ====== OBJ_DIR := obj # ====== File Discovery ====== SRCS := $(wildcard *.c) OBJS := $(patsubst %.c, $(OBJ_DIR)/%.o, $(SRCS)) HEADERS := $(wildcard *.h) # ====== Output ====== LIB := $(OBJ_DIR)/exec.a # ====== Default Rule ====== all: $(LIB) # ====== Build Static Library ====== $(LIB): $(OBJS) $(AR) rcs $@ $(OBJS) # ====== Object File Compilation ====== $(OBJ_DIR)/%.o: %.c $(HEADERS) obj $(CC) $(CFLAGS) -c $< -o $@ # ====== Clean Rule ====== clean: rm -rf $(OBJ_DIR) $(LIB) obj: mkdir -p $(OBJ_DIR) # ====== Phony Targets ====== .PHONY: all clean obj