refactor separate framework from game code, add demo3d
This commit is contained in:
parent
19ae869769
commit
40f5cdcaa5
92 changed files with 2665 additions and 6547 deletions
193
Makefile
193
Makefile
|
|
@ -1,21 +1,21 @@
|
|||
# pxl8 - Makefile
|
||||
#
|
||||
# Usage:
|
||||
# make Build everything (debug)
|
||||
# make release Build everything (release)
|
||||
# make run Build and run (CART=script.fnl)
|
||||
# make server Build pxl8d only
|
||||
# make client Build pxl8 only
|
||||
# make install Install to ~/.local/bin (release)
|
||||
# make profile Profile with perf + flamegraph (Linux)
|
||||
# make ase Aseprite tools (ASE_CMD=package|clean)
|
||||
# make clean Remove build artifacts
|
||||
# make clean-all Remove build artifacts and dependencies
|
||||
# make clean-deps Remove only dependencies
|
||||
# make clean-cache Clear ccache
|
||||
# make update Fetch/update all dependencies
|
||||
# make vendor-sdl Vendor SDL3 from source
|
||||
# make help Show available targets
|
||||
# make Build everything (debug)
|
||||
# make release Build everything (release)
|
||||
# make run Build and run (CART=script.fnl)
|
||||
# make demo3d-server Build demo3d server only
|
||||
# make client Build pxl8 only
|
||||
# make install Install to ~/.local/bin (release)
|
||||
# make profile Profile with perf + flamegraph (Linux)
|
||||
# make ase Aseprite tools (ASE_CMD=package|clean)
|
||||
# make clean Remove build artifacts
|
||||
# make clean-all Remove build artifacts and dependencies
|
||||
# make clean-deps Remove only dependencies
|
||||
# make clean-cache Clear ccache
|
||||
# make update Fetch/update all dependencies
|
||||
# make vendor-sdl Vendor SDL3 from source
|
||||
# make help Show available targets
|
||||
#
|
||||
# Variables:
|
||||
# MODE=release Build in release mode (default: debug)
|
||||
|
|
@ -173,11 +173,17 @@ endif
|
|||
# -- Include paths ------------------------------------------------------------
|
||||
|
||||
INCLUDES = \
|
||||
-Isrc/asset -Isrc/bsp -Isrc/core -Isrc/gfx -Isrc/gui -Isrc/hal \
|
||||
-Isrc/asset -Isrc/core -Isrc/gfx -Isrc/gui -Isrc/platform \
|
||||
-Isrc/math -Isrc/net -Isrc/procgen -Isrc/script -Isrc/shader \
|
||||
-Isrc/sfx -Isrc/sim -Isrc/world \
|
||||
-Isrc/sfx \
|
||||
-I$(LINENOISE_DIR) -Ilib/luajit/src -Ilib/miniz -I.build/shaders/c
|
||||
|
||||
DEMO3D_INCLUDES = \
|
||||
-Idemo3d/client/bsp \
|
||||
-Idemo3d/client/world \
|
||||
-Idemo3d/client/sim \
|
||||
-Idemo3d/client/net
|
||||
|
||||
# -- Source files -------------------------------------------------------------
|
||||
|
||||
LIB_SRCS = $(LINENOISE_SRCS) lib/miniz/miniz.c
|
||||
|
|
@ -186,21 +192,19 @@ PXL8_SRCS = \
|
|||
src/asset/pxl8_ase.c \
|
||||
src/asset/pxl8_cart.c \
|
||||
src/asset/pxl8_save.c \
|
||||
src/bsp/pxl8_bsp.c \
|
||||
src/bsp/pxl8_bsp_render.c \
|
||||
src/core/pxl8.c \
|
||||
src/core/pxl8_bytes.c \
|
||||
src/core/pxl8_io.c \
|
||||
src/core/pxl8_log.c \
|
||||
src/core/pxl8_replay.c \
|
||||
src/core/pxl8_rng.c \
|
||||
src/gfx/pxl8_3d_camera.c \
|
||||
src/gfx/pxl8_camera3d.c \
|
||||
src/gfx/pxl8_anim.c \
|
||||
src/gfx/pxl8_atlas.c \
|
||||
src/gfx/pxl8_blit.c \
|
||||
src/gfx/pxl8_colormap.c \
|
||||
src/gfx/pxl8_dither.c \
|
||||
src/gfx/pxl8_render.c \
|
||||
src/gfx/pxl8_blit3d.c \
|
||||
src/gfx/pxl8_shader_registry.c \
|
||||
src/gfx/pxl8_shader_runtime.c \
|
||||
src/gfx/pxl8_font.c \
|
||||
|
|
@ -215,33 +219,40 @@ PXL8_SRCS = \
|
|||
src/gfx/pxl8_tilesheet.c \
|
||||
src/gfx/pxl8_transition.c \
|
||||
src/gui/pxl8_gui.c \
|
||||
src/hal/pxl8_hal_sdl3.c \
|
||||
src/hal/pxl8_thread_sdl3.c \
|
||||
src/platform/pxl8_platform_sdl3.c \
|
||||
src/platform/pxl8_thread_sdl3.c \
|
||||
src/math/pxl8_math.c \
|
||||
src/math/pxl8_noise.c \
|
||||
src/net/pxl8_net.c \
|
||||
src/net/pxl8_protocol.c \
|
||||
src/procgen/pxl8_graph.c \
|
||||
src/script/pxl8_repl.c \
|
||||
src/script/pxl8_script.c \
|
||||
src/sfx/pxl8_sfx.c \
|
||||
src/sim/pxl8_sim.c \
|
||||
src/world/pxl8_entity.c \
|
||||
src/world/pxl8_world.c \
|
||||
src/world/pxl8_world_chunk.c \
|
||||
src/world/pxl8_world_chunk_cache.c
|
||||
src/sfx/pxl8_sfx.c
|
||||
|
||||
DEMO3D_SRCS = \
|
||||
demo3d/client/bsp/demo3d_bsp.c \
|
||||
demo3d/client/bsp/demo3d_bsp_render.c \
|
||||
demo3d/client/world/demo3d_world.c \
|
||||
demo3d/client/world/demo3d_chunk.c \
|
||||
demo3d/client/world/demo3d_chunk_cache.c \
|
||||
demo3d/client/world/demo3d_entity.c \
|
||||
demo3d/client/sim/demo3d_sim.c \
|
||||
demo3d/client/net/demo3d_protocol.c \
|
||||
demo3d/client/net/demo3d_net.c \
|
||||
demo3d/client/demo3d.c
|
||||
|
||||
ifeq ($(HAS_SDL3),1)
|
||||
PXL8_SRCS += src/hal/pxl8_io_sdl3.c src/hal/pxl8_mem_sdl3.c
|
||||
PXL8_SRCS += src/platform/pxl8_io_sdl3.c src/platform/pxl8_mem_sdl3.c
|
||||
else
|
||||
PXL8_SRCS += src/hal/pxl8_mem.c
|
||||
PXL8_SRCS += src/platform/pxl8_mem.c
|
||||
endif
|
||||
|
||||
# -- Object files -------------------------------------------------------------
|
||||
|
||||
LIB_OBJS = $(patsubst %.c,$(OBJDIR)/%.o,$(notdir $(LIB_SRCS)))
|
||||
PXL8_OBJS = $(patsubst %.c,$(OBJDIR)/%.o,$(notdir $(PXL8_SRCS)))
|
||||
ALL_OBJS = $(LIB_OBJS) $(PXL8_OBJS)
|
||||
LIB_OBJS = $(patsubst %.c,$(OBJDIR)/%.o,$(notdir $(LIB_SRCS)))
|
||||
PXL8_OBJS = $(patsubst %.c,$(OBJDIR)/%.o,$(notdir $(PXL8_SRCS)))
|
||||
DEMO3D_OBJS = $(patsubst %.c,$(OBJDIR)/demo3d_%.o,$(notdir $(DEMO3D_SRCS)))
|
||||
ALL_OBJS = $(LIB_OBJS) $(PXL8_OBJS)
|
||||
|
||||
# -- Shader objects -----------------------------------------------------------
|
||||
|
||||
|
|
@ -252,16 +263,18 @@ SHADER_INCLUDES = -Isrc/core -Isrc/gfx -Isrc/math
|
|||
# -- Targets ------------------------------------------------------------------
|
||||
|
||||
CLIENT = $(BINDIR)/pxl8$(EXE_EXT)
|
||||
SERVER = $(BINDIR)/pxl8d$(EXE_EXT)
|
||||
SERVER = $(BINDIR)/demo3d-server$(EXE_EXT)
|
||||
DEMO3D = $(BINDIR)/demo3d$(EXE_EXT)
|
||||
|
||||
CART ?= demo
|
||||
PROFILE_DURATION ?= 30
|
||||
ASE_CMD ?=
|
||||
|
||||
.PHONY: all release client server run clean clean-all clean-deps clean-cache \
|
||||
.PHONY: all release client server demo3d demo3d-server run run-demo3d \
|
||||
clean clean-all clean-deps clean-cache \
|
||||
update vendor-sdl deps luajit install ase profile help
|
||||
|
||||
all: client server
|
||||
all: client demo3d demo3d-server
|
||||
|
||||
release:
|
||||
$(MAKE) MODE=release all
|
||||
|
|
@ -326,19 +339,21 @@ $(LUAJIT_LIB): lib/luajit/src/luajit.c
|
|||
|
||||
# -- Server (Rust) ------------------------------------------------------------
|
||||
|
||||
server: $(SERVER)
|
||||
server: demo3d-server
|
||||
|
||||
$(SERVER): $(wildcard pxl8d/src/*.rs pxl8d/Cargo.toml)
|
||||
demo3d-server: $(SERVER)
|
||||
|
||||
$(SERVER): $(wildcard demo3d/server/src/*.rs demo3d/server/Cargo.toml)
|
||||
@mkdir -p $(BINDIR)
|
||||
$(INFO) "Building pxl8d ($(MODE) mode)"
|
||||
$(INFO) "Building demo3d-server ($(MODE) mode)"
|
||||
ifeq ($(MODE),release)
|
||||
@cd pxl8d && PATH="$$(echo $$PATH | tr ':' '\n' | grep -v '/usr/bin' | tr '\n' ':')" cargo build --release --quiet
|
||||
@cp pxl8d/target/release/pxl8d$(EXE_EXT) $(SERVER)
|
||||
@cd demo3d/server && PATH="$$(echo $$PATH | tr ':' '\n' | grep -v '/usr/bin' | tr '\n' ':')" cargo build --release --quiet
|
||||
@cp demo3d/server/target/release/demo3d-server$(EXE_EXT) $(SERVER)
|
||||
else
|
||||
@cd pxl8d && PATH="$$(echo $$PATH | tr ':' '\n' | grep -v '/usr/bin' | tr '\n' ':')" cargo build --quiet
|
||||
@cp pxl8d/target/debug/pxl8d$(EXE_EXT) $(SERVER)
|
||||
@cd demo3d/server && PATH="$$(echo $$PATH | tr ':' '\n' | grep -v '/usr/bin' | tr '\n' ':')" cargo build --quiet
|
||||
@cp demo3d/server/target/debug/demo3d-server$(EXE_EXT) $(SERVER)
|
||||
endif
|
||||
$(INFO) "Built pxl8d"
|
||||
$(INFO) "Built demo3d-server"
|
||||
|
||||
# -- Client (C23) -------------------------------------------------------------
|
||||
|
||||
|
|
@ -359,6 +374,31 @@ ifeq ($(STRIP),true)
|
|||
endif
|
||||
$(INFO) "Built pxl8 -> $@"
|
||||
|
||||
# -- Demo3D (game client) ----------------------------------------------------
|
||||
|
||||
demo3d: deps $(DEMO3D)
|
||||
|
||||
$(DEMO3D): $(ALL_OBJS) $(DEMO3D_OBJS) $(SHADER_OBJS) $(LUAJIT_LIB)
|
||||
@mkdir -p $(BINDIR)
|
||||
$(INFO) "Linking demo3d"
|
||||
ifeq ($(PLATFORM),windows)
|
||||
@(echo EXPORTS && llvm-nm --defined-only $(ALL_OBJS) $(DEMO3D_OBJS) $(SHADER_OBJS) | grep ' T pxl8_\| T demo3d_\| T SDL' | awk '{print $$3}') > $(BUILDDIR)/demo3d.def
|
||||
@MSYS_NO_PATHCONV=1 $(CC) $(LDFLAGS) $(ALL_OBJS) $(DEMO3D_OBJS) $(SHADER_OBJS) $(LUAJIT_LIB) $(LIBS) -Wl,/DEF:$(BUILDDIR)/demo3d.def -o $@
|
||||
@cp -u $(SDL3_BUILD_DIR)/SDL3.dll $(BINDIR)/
|
||||
else
|
||||
@$(CC) $(LDFLAGS) $(ALL_OBJS) $(DEMO3D_OBJS) $(SHADER_OBJS) $(LUAJIT_LIB) $(LIBS) -o $@
|
||||
endif
|
||||
ifeq ($(STRIP),true)
|
||||
@llvm-strip $@
|
||||
endif
|
||||
$(INFO) "Built demo3d -> $@"
|
||||
|
||||
run-demo3d: demo3d demo3d-server
|
||||
@$(BINDIR)/demo3d-server$(EXE_EXT) & SERVER_PID=$$!; \
|
||||
sleep 0.5; \
|
||||
$(BINDIR)/demo3d$(EXE_EXT) demo3d $(EXTRA_ARGS) || true; \
|
||||
kill $$SERVER_PID 2>/dev/null; wait $$SERVER_PID 2>/dev/null || true
|
||||
|
||||
# -- Compile rules ------------------------------------------------------------
|
||||
|
||||
# Lib sources (dep flags, no warnings)
|
||||
|
|
@ -385,7 +425,15 @@ $(OBJDIR)/%.o: $(1)/%.c | $(OBJDIR)
|
|||
@$$(CC) -c $$(CFLAGS) $$(INCLUDES) $$< -o $$@
|
||||
endef
|
||||
|
||||
$(foreach dir,src/asset src/bsp src/core src/gfx src/gui src/hal src/math src/net src/procgen src/script src/shader src/sfx src/sim src/world,$(eval $(call PXL8_COMPILE_RULE,$(dir))))
|
||||
$(foreach dir,src/asset src/core src/gfx src/gui src/platform src/math src/net src/procgen src/script src/shader src/sfx,$(eval $(call PXL8_COMPILE_RULE,$(dir))))
|
||||
|
||||
define DEMO3D_COMPILE_RULE
|
||||
$(OBJDIR)/demo3d_%.o: $(1)/%.c | $(OBJDIR)
|
||||
@printf '$(CYAN)[%s CC]$(NC) %s\n' "$$$$(date +%H:%M:%S)" "$$<"
|
||||
@$$(CC) -c $$(CFLAGS) $$(INCLUDES) $$(DEMO3D_INCLUDES) $$< -o $$@
|
||||
endef
|
||||
|
||||
$(foreach dir,demo3d/client demo3d/client/bsp demo3d/client/world demo3d/client/sim demo3d/client/net,$(eval $(call DEMO3D_COMPILE_RULE,$(dir))))
|
||||
|
||||
# pxl8_script.o depends on embedded Lua/Fennel sources
|
||||
LUA_SRCS = $(wildcard src/lua/*.lua src/lua/pxl8/*.lua) lib/fennel/fennel.lua
|
||||
|
|
@ -410,17 +458,14 @@ $(shell [ -f lib/.gitignore ] || echo '*' > lib/.gitignore)
|
|||
|
||||
# -- Run ----------------------------------------------------------------------
|
||||
|
||||
run: all
|
||||
@$(BINDIR)/pxl8d$(EXE_EXT) & SERVER_PID=$$!; \
|
||||
sleep 0.5; \
|
||||
$(BINDIR)/pxl8$(EXE_EXT) $(CART) || true; \
|
||||
kill $$SERVER_PID 2>/dev/null; wait $$SERVER_PID 2>/dev/null || true
|
||||
run: client
|
||||
@$(BINDIR)/pxl8$(EXE_EXT) $(CART) $(EXTRA_ARGS)
|
||||
|
||||
# -- Clean --------------------------------------------------------------------
|
||||
|
||||
clean:
|
||||
rm -rf .build/debug .build/release bin/debug bin/release .build/shaders
|
||||
@if [ -d pxl8d ]; then cd pxl8d && cargo clean 2>/dev/null; fi || true
|
||||
@if [ -d demo3d/server ]; then cd demo3d/server && cargo clean 2>/dev/null; fi || true
|
||||
|
||||
clean-all: clean
|
||||
rm -rf lib
|
||||
|
|
@ -458,7 +503,7 @@ profile: client
|
|||
TIMESTAMP=$$(date +%Y%m%d_%H%M%S); \
|
||||
PDIR=.build/$(MODE)/profile; \
|
||||
echo "[INFO] Starting server..."; \
|
||||
$(BINDIR)/pxl8d$(EXE_EXT) & SERVER_PID=$$!; \
|
||||
$(BINDIR)/demo3d-server$(EXE_EXT) & SERVER_PID=$$!; \
|
||||
sleep 0.5; \
|
||||
echo "[INFO] Profiling for $(PROFILE_DURATION)s (Ctrl+C to stop early)..."; \
|
||||
perf record -F 99 -g --call-graph dwarf -o $$PDIR/perf_$$TIMESTAMP.data -- \
|
||||
|
|
@ -479,24 +524,25 @@ help:
|
|||
@echo "pxl8 - framework build system"
|
||||
@echo ""
|
||||
@echo "TARGETS:"
|
||||
@echo " make Build everything (debug)"
|
||||
@echo " make release Build everything (release)"
|
||||
@echo " make run Build and run (CART=\"demo --repl\")"
|
||||
@echo " make client Build pxl8 only"
|
||||
@echo " make server Build pxl8d only"
|
||||
@echo " make install Install to ~/.local/bin (release)"
|
||||
@echo " make profile Profile with perf (PROFILE_DURATION=30, Linux only)"
|
||||
@echo " make ase Aseprite tools (ASE_CMD=package|clean)"
|
||||
@echo " make clean Remove build artifacts"
|
||||
@echo " make clean-all Remove artifacts + dependencies"
|
||||
@echo " make clean-deps Remove only dependencies"
|
||||
@echo " make clean-cache Clear ccache"
|
||||
@echo " make update Fetch/update all dependencies"
|
||||
@echo " make vendor-sdl Vendor SDL3 from source"
|
||||
@echo " make Build everything (debug)"
|
||||
@echo " make release Build everything (release)"
|
||||
@echo " make run Build and run (CART=\"demo --repl\")"
|
||||
@echo " make client Build pxl8 only"
|
||||
@echo " make demo3d-server Build demo3d client"
|
||||
@echo " make server Build demo3d-server"
|
||||
@echo " make install Install to ~/.local/bin (release)"
|
||||
@echo " make profile Profile with perf (PROFILE_DURATION=30, Linux only)"
|
||||
@echo " make ase Aseprite tools (ASE_CMD=package|clean)"
|
||||
@echo " make clean Remove build artifacts"
|
||||
@echo " make clean-all Remove artifacts + dependencies"
|
||||
@echo " make clean-deps Remove only dependencies"
|
||||
@echo " make clean-cache Clear ccache"
|
||||
@echo " make update Fetch/update all dependencies"
|
||||
@echo " make vendor-sdl Vendor SDL3 from source"
|
||||
@echo ""
|
||||
@echo "VARIABLES:"
|
||||
@echo " MODE=release Build mode (default: debug)"
|
||||
@echo " CART=demo Cart or script to run"
|
||||
@echo " MODE=release Build mode (default: debug)"
|
||||
@echo " CART=demo Cart or script to run"
|
||||
|
||||
# -- Auto-generated header dependencies --------------------------------------
|
||||
|
||||
|
|
@ -505,7 +551,7 @@ help:
|
|||
|
||||
# -- compile_commands.json ----------------------------------------------------
|
||||
|
||||
compile_commands.json: $(LIB_SRCS) $(PXL8_SRCS)
|
||||
compile_commands.json: $(LIB_SRCS) $(PXL8_SRCS) $(DEMO3D_SRCS)
|
||||
$(INFO) "Generating compile_commands.json"
|
||||
@echo '[' > $@.tmp
|
||||
@first=true; \
|
||||
|
|
@ -518,6 +564,11 @@ compile_commands.json: $(LIB_SRCS) $(PXL8_SRCS)
|
|||
if $$first; then first=false; else printf ',\n' >> $@.tmp; fi; \
|
||||
printf ' {"directory":"%s","command":"clang -c %s %s","file":"%s"}' \
|
||||
"$(CURDIR)" "$(CFLAGS) $(INCLUDES)" "$$f" "$$f" >> $@.tmp; \
|
||||
done; \
|
||||
for f in $(DEMO3D_SRCS); do \
|
||||
if $$first; then first=false; else printf ',\n' >> $@.tmp; fi; \
|
||||
printf ' {"directory":"%s","command":"clang -c %s %s %s","file":"%s"}' \
|
||||
"$(CURDIR)" "$(CFLAGS) $(INCLUDES)" "$(DEMO3D_INCLUDES)" "$$f" "$$f" >> $@.tmp; \
|
||||
done
|
||||
@printf '\n]\n' >> $@.tmp
|
||||
@mv $@.tmp $@
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue