Makefile working with imgui

This commit is contained in:
2026-04-27 13:41:50 +02:00
parent 0fed24b3c4
commit 21476a3b95
11 changed files with 187 additions and 131 deletions

View File

@@ -1,52 +1,56 @@
# Compiler and tools
CC = emcc
XXD = xxd
FETCH = ./fetch_libs.sh
# Directories
SRC_DIR = src
LIB_DIR = lib
SHADER_DIR = $(SRC_DIR)/shaders
GENERATED_DIR = $(SRC_DIR)/generated
SOKOL_DIR = ../sokol
NUKLEAR_DIR = ../nuklear
# Output
TARGET = app.html
# Source files
C_SOURCES = $(SRC_DIR)/main.c
IMGUI_SOURCES = $(LIB_DIR)/imgui/imgui/imgui.cpp \
$(LIB_DIR)/imgui/imgui/imgui_draw.cpp \
$(LIB_DIR)/imgui/imgui/imgui_tables.cpp \
$(LIB_DIR)/imgui/imgui/imgui_widgets.cpp \
$(LIB_DIR)/imgui/cimgui.cpp
# Dynamic shader processing
SHADER_FILES = $(wildcard $(SHADER_DIR)/*)
SHADER_HEADERS = $(patsubst $(SHADER_DIR)/%,$(GENERATED_DIR)/%.h,$(SHADER_FILES))
SHADER_FILES = $(wildcard $(SHADER_DIR)/*.wgsl)
SHADER_HEADERS = $(patsubst $(SHADER_DIR)/%.wgsl,$(GENERATED_DIR)/%.h,$(SHADER_FILES))
# Compiler flags
EMCC_FLAGS = -sUSE_WEBGPU \
-sASSERTIONS \
EMCC_FLAGS = --use-port=emdawnwebgpu \
-sWASM_BIGINT \
-sALLOW_MEMORY_GROWTH \
-msimd128 \
-sFILESYSTEM=0
# Include directories
INCLUDES = -I$(SOKOL_DIR) -I$(NUKLEAR_DIR)
# Shell template
SHELL_FILE = shell.html
# Default target
all: $(TARGET)
all: $(FETCH) $(TARGET)
# Main build target
$(TARGET): $(SHADER_HEADERS) $(C_SOURCES) $(SHELL_FILE)
$(CC) $(C_SOURCES) \
$(TARGET): $(SHADER_HEADERS) $(C_SOURCES) $(IMGUI_SOURCES) $(SHELL_FILE)
$(CC) $(C_SOURCES) $(IMGUI_SOURCES) \
-o $(TARGET) \
$(EMCC_FLAGS) \
-O3 \
$(INCLUDES) \
-I$(LIB_DIR)/sokol \
-I$(LIB_DIR)/imgui \
-I$(LIB_DIR)/imgui/imgui \
-I$(LIB_DIR)/util \
--shell-file=$(SHELL_FILE)
# Pattern rule for generating shader headers
$(GENERATED_DIR)/%.h: $(SHADER_DIR)/% | $(GENERATED_DIR)
# Shader header generation
$(GENERATED_DIR)/%.h: $(SHADER_DIR)/%.wgsl | $(GENERATED_DIR)
@echo "Generating header for $<"
$(XXD) -i $< $@
@@ -54,12 +58,15 @@ $(GENERATED_DIR)/%.h: $(SHADER_DIR)/% | $(GENERATED_DIR)
$(GENERATED_DIR):
mkdir -p $(GENERATED_DIR)
debug: $(SHADER_HEADERS) $(C_SOURCES) $(SHELL_FILE)
$(CC) $(C_SOURCES) \
debug: $(FETCH) $(SHADER_HEADERS) $(C_SOURCES) $(IMGUI_SOURCES) $(SHELL_FILE)
$(CC) $(C_SOURCES) $(IMGUI_SOURCES) \
-o $(TARGET) \
$(EMCC_FLAGS) \
-g -gsource-map=inline \
$(INCLUDES) \
-I$(LIB_DIR)/sokol \
-I$(LIB_DIR)/imgui \
-I$(LIB_DIR)/imgui/imgui \
-I$(LIB_DIR)/util \
--shell-file=$(SHELL_FILE)
# Clean build artifacts
@@ -79,4 +86,4 @@ list-shaders:
@echo "$(SHADER_HEADERS)"
# Phony targets
.PHONY: all clean rebuild list-shaders
.PHONY: all clean rebuild list-shaders $(FETCH)