.PHONY: build FORCE KERNEL = $(shell uname -s) MACHINE = $(shell uname -m) PLATFORM = $(KERNEL)_$(MACHINE) CC = clang CXX = clang++ 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 CXXFLAGS = -g -c -Wno-nullability-completeness -DWP_DEBUG_ASSERT LDFLAGS = -g -DWP_DEBUG_ASSERT LDLIBS = -lm WND_BKND = SDL GPU_BKND = Vulkan BUILD_ROOT = .build BUILDDIR = $(BUILD_ROOT)/$(PLATFORM) OBJDIR = $(BUILDDIR)/obj COBJDIR = $(OBJDIR)/c CXXOBJDIR = $(OBJDIR)/cxx 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,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) build: $(OUT) $(OUT): $(OBJS) $(CXX) $(LDFLAGS) -o "$@" $^ $(LDLIBS) @cp -r src/shaders $(BUILDDIR) $(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 "$@" run: @cd $(BUILDDIR) && ./$(OUT_NAME) clean: @rm -rf $(BUILD_ROOT) FORCE: