PLATFORM = linux PLATFORMS = linux WORK_DIR = . SRC_DIR = $(WORK_DIR)/src CSH_FLAGS = \ -O2 -g \ -Wall -Wextra -Werror -pedantic \ -MMD -MP \ -I$(SRC_DIR) ifeq ($(filter $(PLATFORM),$(PLATFORMS)),) $(error "Unknown platform: $(PLATFORM)") endif CC = clang CC_STD = -std=c11 CC_FLAGS = $(CC_STD) $(CSH_FLAGS) CXX = clang++ CXX_STD = -std=c++17 CXX_FLAGS = -fno-rtti -fno-exceptions $(CXX_STD) $(CSH_FLAGS) CARGO = cargo RM = rm -rf ECHO = echo CMAKE = cmake MI_DIR = $(WORK_DIR)/mimalloc MI_BUILD = $(MI_DIR)/build MI_INCLUDE = $(MI_BUILD)/include MI_OBJECT = $(MI_BUILD)/mimalloc.o MI_FLAGS = \ -DMI_BUILD_STATIC=NO \ -DMI_BUILD_SHARED=NO \ -DMI_BUILD_OBJECT=YES \ -DMI_BUILD_TESTS=NO \ -DMI_USE_CXX=NO \ -DMI_XMALLOC=YES \ -DMI_OVERRIDE=YES HASHMAP_DIR = $(WORK_DIR)/hashmap HASHMAP_SOURCE = $(HASHMAP_DIR)/hashmap.c GLAD_DIR = $(WORK_DIR)/glad GLAD_SOURCE = $(GLAD_DIR)/glad.c FREETYPE_DIR = $(WORK_DIR)/freetype FREETYPE_BUILD = $(FREETYPE_DIR)/build FREETYPE_INCLUDE = $(FREETYPE_DIR)/include FREETYPE_ARCHIVE = $(FREETYPE_BUILD)/libfreetype.a FREETYPE_FLAGS = \ -DFT_DISABLE_ZLIB=ON \ -DFT_DISABLE_BZIP2=ON \ -DFT_DISABLE_PNG=ON \ -DFT_DISABLE_BROTLI=ON \ -DFT_DISABLE_HARFBUZZ=ON CGLM_DIR = $(WORK_DIR)/cglm CGLM_INCLUDE = $(CGLM_DIR)/include SOKOL_DIR = $(WORK_DIR)/sokol SOKOL_BIN = $(WORK_DIR)/sokol_bin/bin SOKOL_SHDC = $(SOKOL_BIN)/$(PLATFORM)/sokol-shdc ASSETS_DIR = $(WORK_DIR)/assets SHADER_LANG=glsl430 SHADER_OUTPUT=sokol_impl SHADERS = \ $(ASSETS_DIR)/text_shader.glsl SHADER_HEADERS = $(SHADERS:.glsl=.h) CSH_FLAGS += \ -I$(MI_INCLUDE) \ -I$(HASHMAP_DIR) \ -I$(GLAD_DIR) \ -I$(CGLM_INCLUDE) \ -I$(FREETYPE_INCLUDE) \ -I$(SOKOL_DIR) \ -I$(ASSETS_DIR) CMAKE_PASSON = -DCMAKE_C_COMPILER=$(CC) CMAKE_GENERATOR = "Unix Makefiles" WAYCLOCK = $(WORK_DIR)/wayclock SOURCES = \ $(SRC_DIR)/wayclock.cc \ $(SRC_DIR)/xdg-shell.c \ $(SRC_DIR)/wlstate.c \ $(SRC_DIR)/vec.c \ $(SRC_DIR)/events.c \ $(SRC_DIR)/window.c \ $(SRC_DIR)/graphics.cc \ $(SRC_DIR)/gfx.c \ $(SRC_DIR)/text.cc \ $(SRC_DIR)/atlas.cc \ $(GLAD_DIR)/glad.c \ $(ASSETS_DIR)/text_shader.c \ $(HASHMAP_SOURCE) OBJECTS := $(SOURCES:.cc=.o) OBJECTS := $(OBJECTS:.c=.o) OBJECTS += $(MI_OBJECT) DEPS = $(OBJECTS:.o=.d) LIBRARIES = -lwayland-client -lEGL -lwayland-egl $(FREETYPE_ARCHIVE) -lGL all: $(WAYCLOCK) $(OBJECTS): $(SHADER_HEADERS) $(FREETYPE_BUILD): @echo " CMAKE $@" @$(CMAKE) $(FREETYPE_DIR) -B $@ -G $(CMAKE_GENERATOR) $(FREETYPE_FLAGS) $(CMAKE_PASSON) $(FREETYPE_ARCHIVE): | $(FREETYPE_BUILD) @echo " MAKE $@" @$(MAKE) -C $(FREETYPE_BUILD) $(MI_BUILD): @echo " CMAKE $@" @$(CMAKE) $(MI_DIR) -B $@ -G $(CMAKE_GENERATOR) $(MI_FLAGS) $(CMAKE_PASSON) $(MI_OBJECT): | $(MI_BUILD) @echo " MAKE $@" @$(MAKE) -C $(MI_BUILD) $(WAYCLOCK): $(OBJECTS) $(LIBRARIES) @echo " LD $@" @$(CXX) $(CXX_FLAGS) -o $@ $^ $(LIBRARIES) %.o: %.cc @echo " CXX $<" @$(CXX) $(CXX_FLAGS) -c -o $@ $< %.o: %.c @echo " CC $<" @$(CC) $(CC_FLAGS) -c -o $@ $< %.h: %.glsl @echo " SHDC $<" @$(SOKOL_SHDC) --slang=$(SHADER_LANG) --format=$(SHADER_OUTPUT) --input=$< --output=$@ .PHONY: clean clean: @$(RM) $(MI_BUILD) @$(RM) $(FREETYPE_BUILD) @$(RM) $(WAYCLOCK) @$(RM) $(OBJECTS) $(DEPS) @$(RM) $(SHADER_HEADERS) -include $(DEPS)