Files
2026-11-01 01:31:25 +00:00

82 lines
2.4 KiB
Makefile

.PHONY: build FORCE
KERNEL = $(shell uname -s)
MACHINE = $(shell uname -m)
PLATFORM = $(KERNEL)_$(MACHINE)
CC = clang
CXX = clang++
SLANGC = slangc
C_SRCS = src/main.c
C_UNITY_SRCS = src/wapp/wapp.c \
src/config/config_src.c \
src/window/window_src.c \
src/gpu/gpu_c_src.c
CXX_UNITY_SRCS = src/gpu/gpu_cc_src.cpp
CFLAGS = -g -c -DWP_DEBUG_ASSERT -DCGLM_DEFINE_PRINTS
CXXFLAGS = -g -c -Wno-nullability-completeness -DWP_DEBUG_ASSERT
LDFLAGS = -g -DWP_DEBUG_ASSERT
LDLIBS = -lm
WND_BKND = SDL
GPU_BKND = Vulkan
SLANGC_FLAGS = -entry vertMain -entry fragMain
SHADER_SRC = src/shaders/shader.slang
BUILD_ROOT = .build
BUILDDIR = $(BUILD_ROOT)/$(PLATFORM)
OBJDIR = $(BUILDDIR)/obj
COBJDIR = $(OBJDIR)/c
CXXOBJDIR = $(OBJDIR)/cxx
SHADER_OUTDIR = $(BUILDDIR)/shaders
ASSETS_DIR = assets
ifeq ($(WND_BKND), SDL)
CFLAGS += -DUSE_SDL_WINDOW_BACKEND
LDLIBS += -lSDL3
endif
ifeq ($(GPU_BKND), Vulkan)
C_SRCS += vendor/vulkan/include/volk/volk.c
CFLAGS += -DUSE_VULKAN_RENDER_BACKEND -DVK_NO_PROTOTYPES -Ivendor/vulkan/include
CXXFLAGS += -DUSE_VULKAN_RENDER_BACKEND -DVK_NO_PROTOTYPES -Ivendor/vulkan/include
LDFLAGS += -Lvendor/vulkan/lib -Wl,-rpath,$(shell realpath vendor/vulkan/lib)
endif
COBJS = $(patsubst %.c, $(COBJDIR)/%.o, $(C_SRCS))
C_UNITY_OBJS = $(patsubst %.c, $(COBJDIR)/%.o, $(C_UNITY_SRCS))
CXX_UNITY_OBJS = $(patsubst %.cpp, $(CXXOBJDIR)/%.o, $(CXX_UNITY_SRCS))
OBJS = $(COBJS) $(C_UNITY_OBJS) $(CXX_UNITY_OBJS)
OUT_NAME = main
OUT = $(BUILDDIR)/$(OUT_NAME)
SHADER_OUT = $(SHADER_OUTDIR)/shader.spv
build: $(OUT) $(SHADER_OUT) copy-assets
$(OUT): $(OBJS)
$(CXX) $(LDFLAGS) -o "$@" $^ $(LDLIBS)
$(COBJS): $(COBJDIR)/%.o: %.c
@mkdir -p "$(@D)"
$(CC) $(CFLAGS) "$<" -o "$@"
$(C_UNITY_OBJS): $(COBJDIR)/%.o: %.c FORCE
@mkdir -p "$(@D)"
$(CC) $(CFLAGS) "$<" -o "$@"
$(CXX_UNITY_OBJS): $(CXXOBJDIR)/%.o: %.cpp FORCE
@mkdir -p "$(@D)"
$(CXX) $(CXXFLAGS) "$<" -o "$@"
$(SHADER_OUT): $(SHADER_SRC)
@mkdir -p $(SHADER_OUTDIR)
$(SLANGC) $(SHADER_SRC) $(SLANGC_FLAGS) -o $(SHADER_OUT)
copy-assets:
@cp -r $(ASSETS_DIR) $(BUILDDIR)
run:
@cd $(BUILDDIR) && VK_LAYER_MESSAGE_ID_FILTER=0x8adbf7e3,0x8b6f2f9a ./$(OUT_NAME)
clean:
@rm -rf $(BUILD_ROOT)
FORCE: