# ====== 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