diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ea99159 --- /dev/null +++ b/Makefile @@ -0,0 +1,69 @@ +.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: diff --git a/build b/build new file mode 100755 index 0000000..f118385 --- /dev/null +++ b/build @@ -0,0 +1,3 @@ +#!/bin/bash + +time bear -a -- make -j6