.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 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) $(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) run: @cd $(BUILDDIR) && ./$(OUT_NAME) clean: @rm -rf $(BUILD_ROOT) FORCE: