KERNEL_EXEC := socks_kernel

ARCH := x86_64

include tools/make/gcc-cross-compile.mk
include arch/$(ARCH)/config.mk

BUILDDIR := build

ARCH_C_FILES := $(wildcard arch/$(ARCH)/*.c)
ARCH_ASM_FILES := $(wildcard arch/$(ARCH)/*.S)
ARCH_OBJ := $(addprefix $(BUILDDIR)/,$(ARCH_C_FILES:.c=.o) $(ARCH_ASM_FILES:.S=.o))

SRC_DIRS := core
KERNEL_C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c))
KERNEL_OBJ := $(addprefix $(BUILDDIR)/,$(KERNEL_C_FILES:.c=.o))

BUILD_ID := $(shell tools/generate_build_id.py --arch $(ARCH))

CFLAGS := $(CFLAGS) -DBUILD_ID=\"$(BUILD_ID)\" -g
ASMFLAGS := $(ASMFLAGS) -DBUILD_ID=\"$(BUILD_ID)\"
LDFLAGS := $(LDFLAGS) -g

$(BUILDDIR)/$(KERNEL_EXEC): $(KERNEL_OBJ) $(ARCH_OBJ)
	@echo "    \033[1;36mLINK\033[0m   \033[1m$@\033[0m"
	@mkdir -p $(@D)
	@$(LD) $^ -o $@ $(LDFLAGS) $(ARCH_LDFLAGS)

$(BUILDDIR)/%.o: %.S
	@echo "    \033[1;32mASM\033[0m    $<"
	@mkdir -p $(@D)
	@$(ASM) $< -o $@ -c $(ASMFLAGS) $(ARCH_ASMFLAGS)

$(BUILDDIR)/%.o: %.c
	@echo "    \033[1;32mCC\033[0m     $<"
	@mkdir -p $(@D)
	@$(CC) $< -o $@ -c $(CFLAGS) $(ARCH_CFLAGS)

clean:
	@echo "    \033[1;93mCLEAN\033[0m  Deleting build artefacts."
	@rm -rf $(BUILDDIR)


all: $(BUILDDIR)/$(KERNEL_EXEC)

include arch/$(ARCH)/extra.mk

.PHONY: all

.INTERMEDIATE: $(ARCH_TEMP_FILES)
