CC := /usr/bin/g++
INCLUDE_DIR := -I./include -I./third_party/vma/include
LFLAGS := -lglfw -lvulkan
CFLAGS := -g -Wall -Werror -std=c++20 $(INCLUDE_DIR) $(LFLAGS)
SRC_DIR := src
BUILD_DIR := ./build
TARGET := RedScarfEngine
SOURCES :=  main.cpp \
	vulkanBase.cpp \
	window.cpp \
	logger.cpp \

OBJECTS := $(SOURCES:%=$(BUILD_DIR)/%)
OBJECTS := $(OBJECTS:cpp=o)

SHADERS_DIR := ./shaders

SHADER_OBJECTS := vertex.spv \
	fragments.spv \

all: prepare_dirs $(OBJECTS) $(SHADER_OBJECTS)
	$(CC) $(CFLAGS) -o $(BUILD_DIR)/$(TARGET) $(OBJECTS)

# Build shader files
vertex.spv: $(SHADERS_DIR)/shader.vert
	glslc $^ -o $(BUILD_DIR)/$@

fragments.spv: $(SHADERS_DIR)/shader.frag
	glslc $^ -o $(BUILD_DIR)/$@

$(BUILD_DIR)/%.spv:
	echo $(basename $^)
	glslc $^ -o $@

# Generic build command
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp
	$(CC) $(CFLAGS) -c $^ -o $@

.PHONY: prepare_dirs
prepare_dirs:
	mkdir -p ./build

.PHONY: clean
clean:
	rm -rf ./build
