# Prism — Build tasks
# See https://just.systems

default: build

CC       := "clang"
CXX      := "clang++"
BUILDDIR := "build"

# Resolve VULKAN_SDK once via backtick
VK_SDK := `echo $VULKAN_SDK`
VENDOR_INC := "vendor/include"
VENDOR_LIB := "vendor/lib"

VK_FLAGS := "-DPR_RHI_VULKAN -DVK_NO_PROTOTYPES -I" + VK_SDK + "/include -I" + VK_SDK + "/include/vma -I" + VENDOR_INC
APP_INC  := "-I" + VK_SDK + "/include -I" + VK_SDK + "/include/vma -I" + VK_SDK + "/include/slang -I" + VENDOR_INC + " -Isrc"

# Build KTX from source
vendor:
	mkdir -p vendor/ktx/build
	cmake vendor/ktx -B vendor/ktx/build \
		-D KTX_FEATURE_LOADTEST_APPS=OFF \
		-D KTX_FEATURE_DOC=OFF \
		-D CMAKE_EXPORT_COMPILE_COMMANDS=1 \
		-D CMAKE_BUILD_TYPE=Release \
		-D CMAKE_INSTALL_PREFIX=$(pwd)/vendor \
		-D CMAKE_CXX_STANDARD=17 \
		-D CMAKE_CXX_FLAGS="-msse4.1" \
		-G Ninja
	cmake --build vendor/ktx/build --config Release
	cmake --install vendor/ktx/build

# Build all objects, then link
build: vendor
	mkdir -p {{BUILDDIR}}
	bear -- {{CXX}} -g -c -Wno-nullability-completeness {{VK_FLAGS}} \
		src/prism/rhi/vulkan/profiles/vulkan_profiles.cpp \
		-o {{BUILDDIR}}/vulkan_profiles.o
	bear -a -- {{CXX}} -g -c -Wno-nullability-completeness {{VK_FLAGS}} \
		src/prism/rhi/vulkan/pr_rhi_vk_vma.cpp \
		-o {{BUILDDIR}}/pr_rhi_vk_vma.o
	bear -a -- {{CC}} -g -c {{VK_FLAGS}} {{VK_SDK}}/include/volk/volk.c -o {{BUILDDIR}}/volk.o
	bear -a -- {{CC}} -g -c {{VK_FLAGS}} src/prism/rhi/pr_rhi.c -o {{BUILDDIR}}/pr_rhi.o
	bear -a -- {{CC}} -g -c {{VK_FLAGS}} src/prism/rhi/vulkan/pr_rhi_vk.c -o {{BUILDDIR}}/pr_rhi_vk.o
	bear -a -- {{CC}} -g -c src/wapp/wapp.c -o {{BUILDDIR}}/wapp.o
	bear -a -- {{CXX}} -g -c -Wno-nullability-completeness -DVK_NO_PROTOTYPES \
		{{APP_INC}} \
		src/main.cpp \
		-o {{BUILDDIR}}/main.o
	bear -a -- {{CXX}} -g {{VK_FLAGS}} \
		-L{{VK_SDK}}/lib -L{{VENDOR_LIB}} \
		build/*.o \
		-lSDL3 -lglm -ltinyobjloader -lktx -lslang -lvulkan \
		-Wl,-rpath,{{VENDOR_LIB}} -Wl,-rpath,{{VK_SDK}}/lib \
		-o {{BUILDDIR}}/prism
	@echo "--- build done: {{BUILDDIR}}/prism ---"

# Clean
clean:
	rm -rf {{BUILDDIR}}

# Run linter
lint:
	@echo "TODO: implement linter"

# Run tests
test:
	@echo "TODO: implement tests"
