summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-06-05 15:50:27 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-06-05 16:00:59 -0400
commit11454fb99a9dc1c959e58828f447d1fb2e9f3d9d (patch)
treee51691d7adcc9e789471e911f107e71d51b619b8 /Makefile
parent1231e679cabdf8d62677fce46fa15207007aab4f (diff)
Makefile: refactor for BUILD_MODE
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile389
1 files changed, 149 insertions, 240 deletions
diff --git a/Makefile b/Makefile
index 69bd4c3..0db983d 100644
--- a/Makefile
+++ b/Makefile
@@ -2,20 +2,54 @@
PROJ=pikul_two
-include config.mk
+# Automatically set BUILD_MODE if target path hints at it
+ifeq (,$(BUILD_MODE))
+ ifneq (,$(findstring dbg/,$(MAKECMDGOALS)))
+ BUILD_MODE := debug
+ else ifneq (,$(findstring rld/,$(MAKECMDGOALS)))
+ BUILD_MODE := release-debug
+ else ifneq (,$(findstring bin/,$(MAKECMDGOALS)))
+ BUILD_MODE := release
+ endif
+endif
+
+-include config.mk
+
+DIR_EXE_release := bin
+DIR_EXE_release-debug := rld
+DIR_EXE_debug := dbg
+DIR_OBJ := obj
+BUILD_MODE ?= release
+DIR_EXE := $(DIR_EXE_$(BUILD_MODE))
+
+ifeq ($(BUILD_MODE),release)
+ OBJ_EXT := o
+ LIB_EXT := a
+ BLT_BUILD_MODE := release64
+ BLT_BUILD_DIR := Release
+ OPT_FLAGS ?= -O3 -s
+else ifeq ($(BUILD_MODE),release-debug)
+ OBJ_EXT := rso
+ LIB_EXT := rsa
+ BLT_BUILD_MODE := debug64
+ BLT_BUILD_DIR := Debug
+ OPT_FLAGS ?= -O2 -g
+else ifeq ($(BUILD_MODE),debug)
+ OBJ_EXT := so
+ LIB_EXT := sa
+ BLT_BUILD_MODE := debug64
+ BLT_BUILD_DIR := Debug
+ OPT_FLAGS ?= -O0 -g
+else
+ $(error Unknown build mode: $(BUILD_MODE))
+endif
#echo $@ : $(@F) : $< : $^
-define cc-bin-command
- $(CC) -std=c2x -c -o $@ -DNDEBUG -s -O2 $(CFLAGS) $(INCS) $<
+define cc-command
+ $(CC) -std=c2x -c -o $@ -DNDEBUG $(OPT_FLAGS) $(CFLAGS) $(INCS) $<
endef
-define cc-dbg-command
- $(CC) -std=c2x -c -o $@ -DDEBUG -g -O0 $(CFLAGS) $(INCS) $<
-endef
-define cxx-bin-command
- $(CXX) -std=c++23 -c -o $@ -DNDEBUG -s -O2 $(CXXFLAGS) $(INCS) $<
-endef
-define cxx-dbg-command
- $(CXX) -std=c++23 -c -o $@ -DDEBUG -g -O0 $(CXXFLAGS) $(INCS) $<
+define cxx-command
+ $(CXX) -std=c++23 -c -o $@ -DDEBUG $(OPT_FLAGS) $(CXXFLAGS) $(INCS) $<
endef
define cc-encode-binary-command
$(1): $(2)
@@ -52,10 +86,6 @@ $(foreach f,$(FILES_BIN_SAFE), \
) \
)
-DIR_OBJ=obj
-DIR_BIN=bin
-DIR_DBG=dbg
-
DST_SHADERS = \
$(DIR_OBJ)/shaders/vertex.vert.spv \
$(DIR_OBJ)/shaders/present.vert.spv \
@@ -66,23 +96,17 @@ DST_SHADERS = \
$(DIR_OBJ)/shaders/ui-base.vert.spv \
$(DIR_OBJ)/shaders/ui-base.frag.spv \
-MAINS_OBJ = obj/editor-main.o obj/pke-runtime.o obj/test-pke.o
-MAINS_SOBJ = $(MAINS_OBJ:%.o=%.so)
-
.PHONY: default
-default: options $(DIR_BIN)/pke-editor $(DIR_BIN)/libpke-example.a $(DIR_BIN)/pke-runtime ;
-
-.PHONY: default-dbg
-default-dbg: options $(DIR_DBG)/pke-editor $(DIR_DBG)/libpke-example.a $(DIR_DBG)/pke-runtime ;
+default: options .WAIT $(DIR_EXE)/pke-editor $(DIR_EXE)/libpke-example.a $(DIR_EXE)/pke-runtime ;
.PHONY: prepare
prepare: config.h
prepare: config.mk
prepare: $(FILES_BIN_GCH)
prepare:
- mkdir -p $(DIR_BIN) $(DIR_DBG) $(DIR_OBJ) $(DIR_OBJ)/shaders $(DIR_DBG)/bullet3 $(DIR_BIN)/bullet3
- mkdir -p $(DIR_BIN)/bullet3
- mkdir -p $(DIR_DBG)/bullet3
+ mkdir -p $(DIR_EXE)
+ mkdir -p $(DIR_OBJ)/shaders
+ mkdir -p $(DIR_OBJ)/bullet3
.PHONY: options
options: prepare .WAIT
@@ -90,251 +114,136 @@ options: prepare .WAIT
@echo "CFLAGS = $(CFLAGS)"
@echo "CXXFLAGS = $(CXXFLAGS)"
@echo "LDFLAGS = $(LDFLAGS)"
+ @echo "OPT_FLAGS= $(OPT_FLAGS)"
@echo "CC = $(CC)"
@echo "CXX = $(CXX)"
config.h:
cp config.def.h $@
-$(DIR_OBJ)/%.o : sub/imgui/%.cpp | prepare
- $(cxx-bin-command) -Isub/imgui
-$(DIR_OBJ)/%.so : sub/imgui/%.cpp | prepare
- $(cxx-dbg-command) -Isub/imgui
-$(DIR_OBJ)/%.o : sub/imgui/backends/%.cpp | prepare
- $(cxx-bin-command) -Isub/imgui
-$(DIR_OBJ)/%.so : sub/imgui/backends/%.cpp | prepare
- $(cxx-dbg-command) -Isub/imgui
-$(DIR_OBJ)/%.o : sub/imgui/misc/cpp/%.cpp | prepare
- $(cxx-bin-command) -Isub/imgui
-$(DIR_OBJ)/%.so : sub/imgui/misc/cpp/%.cpp | prepare
- $(cxx-dbg-command) -Isub/imgui
+$(DIR_OBJ)/%.$(OBJ_EXT) : sub/imgui/%.cpp | prepare
+ $(cxx-command) -Isub/imgui
+$(DIR_OBJ)/%.$(OBJ_EXT) : sub/imgui/backends/%.cpp | prepare
+ $(cxx-command) -Isub/imgui
+$(DIR_OBJ)/%.$(OBJ_EXT) : sub/imgui/misc/cpp/%.cpp | prepare
+ $(cxx-command) -Isub/imgui
$(DIR_OBJ)/shaders/%.vert.spv: assets/shaders/%.vert | prepare
$(GLSLC) $^ -o $@
$(DIR_OBJ)/shaders/%.frag.spv: assets/shaders/%.frag | prepare
$(GLSLC) $^ -o $@
-$(DIR_OBJ)/%.o : src/%.c | prepare
- $(cc-bin-command) $(FLG_PKE)
-$(DIR_OBJ)/%.so : src/%.c | prepare
- $(cc-dbg-command) $(FLG_PKE)
-$(DIR_OBJ)/%.o : embed/%.c | prepare
- $(cc-bin-command) $(FLG_PKE)
-$(DIR_OBJ)/%.so : embed/%.c | prepare
- $(cc-dbg-command) $(FLG_PKE)
-$(DIR_OBJ)/%.o : src/vendor/tinyfiledialogs/%.c | prepare
- $(cc-bin-command) $(FLG_PKE)
-$(DIR_OBJ)/%.so : src/vendor/tinyfiledialogs/%.c | prepare
- $(cc-dbg-command) $(FLG_PKE)
-$(DIR_OBJ)/%.o : tests/%.c | prepare
- $(cc-bin-command) $(FLG_TST)
-$(DIR_OBJ)/%.so : tests/%.c | prepare
- $(cc-dbg-command) $(FLG_TST)
-
-$(DIR_OBJ)/%.o : src/%.cpp | prepare
- $(cxx-bin-command) $(FLG_PKE)
-$(DIR_OBJ)/%.so : src/%.cpp | prepare
- $(cxx-dbg-command) $(FLG_PKE)
-$(DIR_OBJ)/%.o : embed/%.cpp | prepare
- $(cxx-bin-command) $(FLG_PKE)
-$(DIR_OBJ)/%.so : embed/%.cpp | prepare
- $(cxx-dbg-command) $(FLG_PKE)
-$(DIR_OBJ)/%.o : editor/%.cpp | prepare
- $(cxx-bin-command) $(FLG_EDT)
-$(DIR_OBJ)/%.so : editor/%.cpp | prepare
- $(cxx-dbg-command) $(FLG_EDT)
-$(DIR_OBJ)/%.o : example/%.cpp | prepare
- $(cxx-bin-command) $(FLG_MPL)
-$(DIR_OBJ)/%.so : example/%.cpp | prepare
- $(cxx-dbg-command) $(FLG_MPL)
-$(DIR_OBJ)/%.o : runtime/%.cpp | prepare
- $(cxx-bin-command) $(FLG_RUN)
-$(DIR_OBJ)/%.so : runtime/%.cpp | prepare
- $(cxx-dbg-command) $(FLG_RUN)
-$(DIR_OBJ)/%.o : tests/%.cpp | prepare
- $(cxx-bin-command) $(FLG_TST)
-$(DIR_OBJ)/%.so : tests/%.cpp | prepare
- $(cxx-dbg-command) $(FLG_TST)
-
-$(DIR_BIN)/libImgui.a: $(DIR_OBJ)/imgui.o
-$(DIR_BIN)/libImgui.a: $(DIR_OBJ)/imgui_demo.o
-$(DIR_BIN)/libImgui.a: $(DIR_OBJ)/imgui_draw.o
-$(DIR_BIN)/libImgui.a: $(DIR_OBJ)/imgui_tables.o
-$(DIR_BIN)/libImgui.a: $(DIR_OBJ)/imgui_widgets.o
-$(DIR_BIN)/libImgui.a: $(DIR_OBJ)/imgui_impl_glfw.o
-$(DIR_BIN)/libImgui.a: $(DIR_OBJ)/imgui_impl_vulkan.o
-$(DIR_BIN)/libImgui.a: $(DIR_OBJ)/imgui_stdlib.o
- ar rc $@ $^
- ranlib $@
-
-$(DIR_DBG)/libImgui.a: $(DIR_OBJ)/imgui.so
-$(DIR_DBG)/libImgui.a: $(DIR_OBJ)/imgui_demo.so
-$(DIR_DBG)/libImgui.a: $(DIR_OBJ)/imgui_draw.so
-$(DIR_DBG)/libImgui.a: $(DIR_OBJ)/imgui_tables.so
-$(DIR_DBG)/libImgui.a: $(DIR_OBJ)/imgui_widgets.so
-$(DIR_DBG)/libImgui.a: $(DIR_OBJ)/imgui_impl_glfw.so
-$(DIR_DBG)/libImgui.a: $(DIR_OBJ)/imgui_impl_vulkan.so
-$(DIR_DBG)/libImgui.a: $(DIR_OBJ)/imgui_stdlib.so
+$(DIR_OBJ)/%.$(OBJ_EXT) : src/%.c | prepare
+ $(cc-command) $(FLG_PKE)
+$(DIR_OBJ)/%.$(OBJ_EXT) : embed/%.c | prepare
+ $(cc-command) $(FLG_PKE)
+$(DIR_OBJ)/%.$(OBJ_EXT) : src/vendor/tinyfiledialogs/%.c | prepare
+ $(cc-command) $(FLG_PKE)
+$(DIR_OBJ)/%.$(OBJ_EXT) : tests/%.c | prepare
+ $(cc-command) $(FLG_TST)
+
+$(DIR_OBJ)/%.$(OBJ_EXT) : src/%.cpp | prepare
+ $(cxx-command) $(FLG_PKE)
+$(DIR_OBJ)/%.$(OBJ_EXT) : embed/%.cpp | prepare
+ $(cxx-command) $(FLG_PKE)
+$(DIR_OBJ)/%.$(OBJ_EXT) : editor/%.cpp | prepare
+ $(cxx-command) $(FLG_EDT)
+$(DIR_OBJ)/%.$(OBJ_EXT) : example/%.cpp | prepare
+ $(cxx-command) $(FLG_MPL)
+$(DIR_OBJ)/%.$(OBJ_EXT) : runtime/%.cpp | prepare
+ $(cxx-command) $(FLG_RUN)
+$(DIR_OBJ)/%.$(OBJ_EXT) : tests/%.cpp | prepare
+ $(cxx-command) $(FLG_TST)
+
+$(DIR_OBJ)/libImgui.$(LIB_EXT): $(DIR_OBJ)/imgui.$(OBJ_EXT)
+$(DIR_OBJ)/libImgui.$(LIB_EXT): $(DIR_OBJ)/imgui_demo.$(OBJ_EXT)
+$(DIR_OBJ)/libImgui.$(LIB_EXT): $(DIR_OBJ)/imgui_draw.$(OBJ_EXT)
+$(DIR_OBJ)/libImgui.$(LIB_EXT): $(DIR_OBJ)/imgui_tables.$(OBJ_EXT)
+$(DIR_OBJ)/libImgui.$(LIB_EXT): $(DIR_OBJ)/imgui_widgets.$(OBJ_EXT)
+$(DIR_OBJ)/libImgui.$(LIB_EXT): $(DIR_OBJ)/imgui_impl_glfw.$(OBJ_EXT)
+$(DIR_OBJ)/libImgui.$(LIB_EXT): $(DIR_OBJ)/imgui_impl_vulkan.$(OBJ_EXT)
+$(DIR_OBJ)/libImgui.$(LIB_EXT): $(DIR_OBJ)/imgui_stdlib.$(OBJ_EXT)
ar rc $@ $^
ranlib $@
# -j$$((`nproc`-1))
-$(DIR_BIN)/libBullet3.a:
+$(DIR_OBJ)/libBullet3.$(LIB_EXT):
(cd sub/bullet3/build3 && ./premake4_linux64 gmake)
- ${MAKE} no-demos=1 no-extras=1 no-test=1 config=release64 -C sub/bullet3/build3/gmake \
+ ${MAKE} no-demos=1 no-extras=1 no-test=1 config=$(BLT_BUILD_MODE) -C sub/bullet3/build3/gmake \
BulletDynamics BulletCollision LinearMath Bullet3Common
- ar r $@ sub/bullet3/build3/gmake/obj/x64/Release/*/*.o
+ ar r $@ sub/bullet3/build3/gmake/obj/x64/$(BLT_BUILD_DIR)/*/*.o
ranlib $@
-# -j$$((`nproc`-1))
-$(DIR_DBG)/libBullet3.a:
- (cd sub/bullet3/build3 && ./premake4_linux64 gmake)
- ${MAKE} no-demos=1 no-extras=1 no-test=1 config=debug64 -C sub/bullet3/build3/gmake \
- BulletDynamics BulletCollision LinearMath Bullet3Common
- ar r $@ sub/bullet3/build3/gmake/obj/x64/Debug/*/*.o
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DST_SHADERS)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/arg-handler.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/asset-manager.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/camera.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/dynamic-array.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/ecs.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/embedded-fonts.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/entities.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/font.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/game-settings.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/game.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/helpers.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/level-types.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/level.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/math-helpers.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/physics.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/player-input.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/plugins.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/project-settings.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/project.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/scene.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/serialization.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/serialization-camera.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/serialization-component.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/serialization-font.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/serialization-static-ui.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/static-cube.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/static-plane.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/static-ui.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/thread-pool.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/vendor-cgltf-include.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/vendor-pkh-include.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/vendor-stb-image-include.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/vendor-tinyfiledialogs.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/window.$(OBJ_EXT)
+$(DIR_OBJ)/libpke.$(LIB_EXT):
+ ar rc $@ $(filter %.$(OBJ_EXT),$^)
ranlib $@
-$(DIR_BIN)/libpke.a: $(DST_SHADERS)
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/arg-handler.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/asset-manager.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/camera.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/dynamic-array.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/ecs.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/embedded-fonts.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/entities.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/font.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/game-settings.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/game.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/helpers.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/level-types.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/level.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/math-helpers.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/physics.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/player-input.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/plugins.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/project-settings.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/project.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/scene.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/serialization.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/serialization-camera.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/serialization-component.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/serialization-font.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/serialization-static-ui.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/static-cube.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/static-plane.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/static-ui.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/thread-pool.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/vendor-cgltf-include.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/vendor-pkh-include.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/vendor-stb-image-include.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/vendor-tinyfiledialogs.o
-$(DIR_BIN)/libpke.a: $(DIR_OBJ)/window.o
-$(DIR_BIN)/libpke.a:
- ar rc $@ $(filter %.o,$^)
+$(DIR_OBJ)/libpke-editor.$(LIB_EXT): $(DIR_OBJ)/editor-main.$(OBJ_EXT)
+$(DIR_OBJ)/libpke-editor.$(LIB_EXT): $(DIR_OBJ)/editor-types.$(OBJ_EXT)
+$(DIR_OBJ)/libpke-editor.$(LIB_EXT): $(DIR_OBJ)/editor-io.$(OBJ_EXT)
+$(DIR_OBJ)/libpke-editor.$(LIB_EXT): $(DIR_OBJ)/editor.$(OBJ_EXT)
+$(DIR_OBJ)/libpke-editor.$(LIB_EXT):
+ ar rc $@ $(filter %.$(OBJ_EXT),$^)
ranlib $@
-$(DIR_DBG)/libpke.a: $(DST_SHADERS)
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/arg-handler.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/asset-manager.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/camera.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/dynamic-array.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/ecs.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/embedded-fonts.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/entities.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/font.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/game-settings.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/game.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/helpers.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/level-types.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/level.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/math-helpers.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/physics.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/player-input.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/plugins.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/project-settings.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/project.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/scene.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/serialization.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/serialization-camera.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/serialization-component.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/serialization-font.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/serialization-static-ui.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/static-cube.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/static-plane.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/static-ui.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/thread-pool.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/vendor-cgltf-include.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/vendor-pkh-include.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/vendor-stb-image-include.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/vendor-tinyfiledialogs.so
-$(DIR_DBG)/libpke.a: $(DIR_OBJ)/window.so
-$(DIR_DBG)/libpke.a:
- ar rc $@ $(filter %.so,$^)
+$(DIR_OBJ)/libpke-example.$(LIB_EXT): $(DIR_OBJ)/example.$(OBJ_EXT)
+ ar rc $@ $(filter %.$(OBJ_EXT),$^)
ranlib $@
-$(DIR_BIN)/libpke-editor.a: $(DIR_OBJ)/editor-main.o
-$(DIR_BIN)/libpke-editor.a: $(DIR_OBJ)/editor-types.o
-$(DIR_BIN)/libpke-editor.a: $(DIR_OBJ)/editor-io.o
-$(DIR_BIN)/libpke-editor.a: $(DIR_OBJ)/editor.o
-$(DIR_BIN)/libpke-editor.a:
- ar rc $@ $(filter %.o,$^)
- ranlib $@
+$(DIR_OBJ)/libpke-test.$(LIB_EXT): $(DIR_OBJ)/pke-test-dummy.$(OBJ_EXT)
+$(DIR_OBJ)/libpke-test.$(LIB_EXT): $(DIR_OBJ)/pke-test-static-ui.$(OBJ_EXT)
+$(DIR_OBJ)/libpke-test.$(LIB_EXT): $(DIR_OBJ)/pke-test-serialization.$(OBJ_EXT)
+$(DIR_OBJ)/libpke-test.$(LIB_EXT): $(DIR_OBJ)/pke-test-asset-manager.$(OBJ_EXT)
+ ar rcs $@ $(filter %.$(OBJ_EXT),$^)
-$(DIR_DBG)/libpke-editor.a: $(DIR_OBJ)/editor-main.so
-$(DIR_DBG)/libpke-editor.a: $(DIR_OBJ)/editor-types.so
-$(DIR_DBG)/libpke-editor.a: $(DIR_OBJ)/editor-io.so
-$(DIR_DBG)/libpke-editor.a: $(DIR_OBJ)/editor.so
-$(DIR_DBG)/libpke-editor.a:
- ar rc $@ $(filter %.so,$^)
- ranlib $@
-
-$(DIR_BIN)/libpke-example.a: $(DIR_OBJ)/example.o
- ar rc $@ $(filter %.o,$^)
- ranlib $@
-
-$(DIR_DBG)/libpke-example.a: $(DIR_OBJ)/example.so
- ar rc $@ $(filter %.so,$^)
- ranlib $@
-
-$(DIR_BIN)/libpke-test.a: $(DIR_OBJ)/pke-test-dummy.o
-$(DIR_BIN)/libpke-test.a: $(DIR_OBJ)/pke-test-static-ui.o
-$(DIR_BIN)/libpke-test.a: $(DIR_OBJ)/pke-test-serialization.o
-$(DIR_BIN)/libpke-test.a: $(DIR_OBJ)/pke-test-asset-manager.o
- ar rcs $@ $(filter %.o,$^)
-
-$(DIR_DBG)/libpke-test.a: $(DIR_OBJ)/pke-test-dummy.so
-$(DIR_DBG)/libpke-test.a: $(DIR_OBJ)/pke-test-static-ui.so
-$(DIR_DBG)/libpke-test.a: $(DIR_OBJ)/pke-test-serialization.so
-$(DIR_DBG)/libpke-test.a: $(DIR_OBJ)/pke-test-asset-manager.so
- ar rcs $@ $(filter %.so,$^)
-
-$(DIR_BIN)/pke-editor: $(DIR_BIN)/libpke-editor.a $(DIR_BIN)/libpke.a $(DIR_BIN)/libImgui.a $(DIR_BIN)/libBullet3.a
-$(DIR_BIN)/pke-editor:
- $(CXX) -v -std=c++23 $(INCS) $^ /home/pikum/build/msdf-atlas-gen/dbg/msdf-atlas-gen.a /home/pikum/build/msdfgen/dbg/msdfgen.a $(LDFLAGS) $(CXXFLAGS) -s -O2 -o $@
-
-$(DIR_DBG)/pke-editor: $(DIR_DBG)/libpke-editor.a $(DIR_DBG)/libpke.a $(DIR_DBG)/libImgui.a $(DIR_DBG)/libBullet3.a
-$(DIR_DBG)/pke-editor:
- $(CXX) -v -std=c++23 $(INCS) $^ /home/pikum/build/msdf-atlas-gen/dbg/msdf-atlas-gen.a /home/pikum/build/msdfgen/dbg/msdfgen.a $(LDFLAGS) $(CXXFLAGS) -g -O0 -o $@
-
-$(DIR_BIN)/pke-runtime: $(DIR_BIN)/libpke.a $(DIR_BIN)/libImgui.a $(DIR_BIN)/libBullet3.a
-$(DIR_BIN)/pke-runtime: $(DIR_OBJ)/runtime.o
- @echo $^
- $(CXX) -v -std=c++23 $(INCS) $^ $(LDFLAGS) $(CXXFLAGS) -s -O2 -o $@
-
-$(DIR_DBG)/pke-runtime: $(DIR_DBG)/libpke.a $(DIR_DBG)/libImgui.a $(DIR_DBG)/libBullet3.a
-$(DIR_DBG)/pke-runtime: $(DIR_OBJ)/runtime.so
- @echo $^
- $(CXX) -v -std=c++23 $(INCS) $^ $(LDFLAGS) $(CXXFLAGS) -g -O0 -o $@
+$(DIR_EXE)/pke-editor: $(DIR_OBJ)/libpke-editor.$(LIB_EXT) $(DIR_OBJ)/libpke.$(LIB_EXT) $(DIR_OBJ)/libImgui.$(LIB_EXT) $(DIR_OBJ)/libBullet3.$(LIB_EXT)
+$(DIR_EXE)/pke-editor:
+ $(CXX) -v -std=c++23 $(OPT_FLAGS) $(INCS) $^ /home/pikum/build/msdf-atlas-gen/dbg/msdf-atlas-gen.a /home/pikum/build/msdfgen/dbg/msdfgen.a $(LDFLAGS) $(CXXFLAGS) -o $@
-$(DIR_BIN)/pke-test: $(DIR_BIN)/libpke-test.a $(DIR_BIN)/libpke.a $(DIR_BIN)/libImgui.a $(DIR_BIN)/libBullet3.a
-$(DIR_BIN)/pke-test: $(DIR_OBJ)/pke-test.o
+$(DIR_EXE)/pke-runtime: $(DIR_OBJ)/libpke.$(LIB_EXT) $(DIR_OBJ)/libImgui.$(LIB_EXT) $(DIR_OBJ)/libBullet3.$(LIB_EXT)
+$(DIR_EXE)/pke-runtime: $(DIR_OBJ)/runtime.$(OBJ_EXT)
@echo $^
- $(CXX) -v -std=c++23 $(INCS) $^ $(LDFLAGS) $(CXXFLAGS) -s -O2 -o $@
+ $(CXX) -v -std=c++23 $(OPT_FLAGS) $(INCS) $^ $(LDFLAGS) $(CXXFLAGS) -o $@
-$(DIR_DBG)/pke-test: $(DIR_DBG)/libpke-test.a $(DIR_DBG)/libpke.a $(DIR_DBG)/libImgui.a $(DIR_DBG)/libBullet3.a
-$(DIR_DBG)/pke-test: $(DIR_OBJ)/pke-test.so
+$(DIR_EXE)/pke-test: $(DIR_OBJ)/libpke-test.$(LIB_EXT) $(DIR_OBJ)/libpke.$(LIB_EXT) $(DIR_OBJ)/libImgui.$(LIB_EXT) $(DIR_OBJ)/libBullet3.$(LIB_EXT)
+$(DIR_EXE)/pke-test: $(DIR_OBJ)/pke-test.$(OBJ_EXT)
@echo $^
- $(CXX) -v -std=c++23 $(INCS) $^ $(LDFLAGS) $(CXXFLAGS) -g -O0 -o $@
+ $(CXX) -v -std=c++23 $(OPT_FLAGS) $(INCS) $^ $(LDFLAGS) $(CXXFLAGS) -o $@
.PHONY: print
print:
@@ -345,6 +254,6 @@ print:
clean:
rm -rf .cache
rm -f *.o *.so *.plist config.h $(FILES_BIN_GCH)
- rm -rf $(DIR_BIN) $(DIR_OBJ) $(DIR_DBG)
+ rm -rf ./$(DIR_EXE_release) ./$(DIR_EXE_release-debug) ./$(DIR_EXE_debug) ./$(DIR_OBJ)
.PHONY: dist install uninstall