# pikul_two PROJ=pikul_two include config.mk #echo $@ : $(@F) : $< : $^ define cc-bin-command $(CC) -std=c2x -c -o $@ -DNDEBUG -O0 $(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 -O0 $(CXXFLAGS) $(INCS) $< endef define cxx-dbg-command $(CXX) -std=c++23 -c -o $@ -DDEBUG -g -O0 $(CXXFLAGS) $(INCS) $< endef FLG_PKE = -Isub/imgui -Isub/stb -Isub/cgltf -Isub/bullet3/src FLG_EDT = $(FLG_PKE) -Isrc DIR_OBJ=obj DIR_BIN=bin DIR_DBG=dbg DIR_SCR=scratch SRC = \ src/vendor/pkh_include.cpp \ src/arg-handler.cpp \ src/camera.cpp \ src/ecs.cpp \ src/entities.cpp \ src/event.cpp \ src/game.cpp \ src/game-settings.cpp \ src/helpers.cpp \ src/level-types.cpp \ src/level.cpp \ src/math-helpers.cpp \ src/dynamic-array.cpp \ src/asset-manager.cpp \ src/physics.cpp \ src/player-input.cpp \ src/plugins.cpp \ src/project.cpp \ src/project-settings.cpp \ src/static/cube.cpp \ src/thread_pool.cpp \ src/vendor/cgltf-include.cpp \ src/vendor/stb_image_include.cpp \ src/vendor/tinyfiledialogs/tinyfiledialogs.c \ src/window.cpp \ DST_SHADERS = \ $(DIR_OBJ)/vertex.vert.spv \ $(DIR_OBJ)/present.vert.spv \ $(DIR_OBJ)/texture.frag.spv \ $(DIR_OBJ)/present.frag.spv \ # Bullet3Collision/libBullet3Collision.a \ Bullet3Dynamics/libBullet3Dynamics.a \ Bullet3Geometry/libBullet3Geometry.a \ Bullet3OpenCL/libBullet3OpenCL_clew.a \ Bullet3Serialize/Bullet2FileLoader/libBullet2FileLoader.a \ BulletInverseDynamics/libBulletInverseDynamics.a \ BulletSoftBody/libBulletSoftBody.a \ # DST_BULLET = \ BulletDynamics/libBulletDynamics.so.3.25 \ BulletCollision/libBulletCollision.so.3.25 \ LinearMath/libLinearMath.so.3.25 \ Bullet3Common/libBullet3Common.so.3.25 \ # TMP_BULLET = $(notdir $(DST_BULLET)) # DST_BULLET_BIN = $(TMP_BULLET:%.so.3.25=$(DIR_BIN)/%.so.3.25) # DST_BULLET_DBG = $(TMP_BULLET:%.so.3.25=$(DIR_DBG)/%.so.3.25) DST_BULLET = \ BulletDynamics/libBulletDynamics.a \ BulletCollision/libBulletCollision.a \ LinearMath/libLinearMath.a \ Bullet3Common/libBullet3Common.a \ DST_BULLET_BIN = $(TMP_BULLET:%.a=$(DIR_BIN)/src/bullet3/%.a) DST_BULLET_DBG = $(TMP_BULLET:%.a=$(DIR_DBG)/src/bullet3/%.a) SRC_C = $(filter %.c,$(SRC)) SRC_CXX = $(filter %.cpp,$(SRC)) OBJ = $(SRC_C:%.c=%.o) SOBJ = $(SRC_C:%.c=%.so) CXXOBJ = $(SRC_CXX:%.cpp=%.o) CXXSOBJ = $(SRC_CXX:%.cpp=%.so) TMP_OUT_OBJ = $(notdir $(OBJ)) TMP_OUT_SOBJ = $(notdir $(SOBJ)) TMP_OUT_CXXOBJ = $(notdir $(CXXOBJ)) TMP_OUT_CXXSOBJ = $(notdir $(CXXSOBJ)) OUT_OBJ = $(TMP_OUT_OBJ:%.o=$(DIR_OBJ)/%.o) OUT_SOBJ = $(TMP_OUT_SOBJ:%.so=$(DIR_OBJ)/%.so) OUT_CXXOBJ = $(TMP_OUT_CXXOBJ:%.o=$(DIR_OBJ)/%.o) OUT_CXXSOBJ = $(TMP_OUT_CXXSOBJ:%.so=$(DIR_OBJ)/%.so) .PHONY: prepare prepare: mkdir -p $(DIR_BIN) $(DIR_DBG) $(DIR_OBJ) $(DIR_DBG)/bullet3 $(DIR_BIN)/bullet3 mkdir -p $(DIR_BIN)/bullet3 $(DIR_BIN)/assets/shaders mkdir -p $(DIR_DBG)/bullet3 $(DIR_DBG)/assets/shaders .PHONY: options options: prepare .WAIT @echo "$(PROJ)" build options: @echo "CFLAGS = $(CFLAGS)" @echo "CXXFLAGS = $(CXXFLAGS)" @echo "LDFLAGS = $(LDFLAGS)" @echo "CC = $(CC)" @echo "CXX = $(CXX)" config.h: cp config.def.h $@ %.h: ; $(SRC_C): config.h config.mk $(SRC_CXX): config.h config.mk $(DIR_OBJ)/%.o: sub/imgui/%.cpp $(cxx-bin-command) -Isub/imgui $(DIR_OBJ)/%.so: sub/imgui/%.cpp $(cxx-dbg-command) -Isub/imgui $(DIR_OBJ)/%.o: sub/imgui/backends/%.cpp $(cxx-bin-command) -Isub/imgui $(DIR_OBJ)/%.so: sub/imgui/backends/%.cpp $(cxx-dbg-command) -Isub/imgui $(DIR_OBJ)/%.o: sub/imgui/misc/cpp/%.cpp $(cxx-bin-command) -Isub/imgui $(DIR_OBJ)/%.so: sub/imgui/misc/cpp/%.cpp $(cxx-dbg-command) -Isub/imgui $(DIR_OBJ)/%.vert.spv: assets/shaders/%.vert $(GLSLC) $^ -o $@ cp $@ $(DIR_BIN)/assets/shaders cp $@ $(DIR_DBG)/assets/shaders $(DIR_OBJ)/%.frag.spv: assets/shaders/%.frag $(GLSLC) $^ -o $@ cp $@ $(DIR_BIN)/assets/shaders cp $@ $(DIR_DBG)/assets/shaders $(DIR_OBJ)/%.o : src/%.c $(cc-bin-command) $(FLG_PKE) $(DIR_OBJ)/%.so : src/%.c $(cc-dbg-command) $(FLG_PKE) $(DIR_OBJ)/%.o : src/vendor/tinyfiledialogs/%.c $(cc-bin-command) $(FLG_PKE) $(DIR_OBJ)/%.so : src/vendor/tinyfiledialogs/%.c $(cc-dbg-command) $(FLG_PKE) $(DIR_OBJ)/%.o : src/%.cpp $(cxx-bin-command) $(FLG_PKE) $(DIR_OBJ)/%.so : src/%.cpp $(cxx-dbg-command) $(FLG_PKE) $(DIR_OBJ)/%.o : src/static/%.cpp $(cxx-bin-command) $(FLG_PKE) $(DIR_OBJ)/%.so : src/static/%.cpp $(cxx-dbg-command) $(FLG_PKE) $(DIR_OBJ)/%.o : src/vendor/%.cpp $(cxx-bin-command) $(FLG_PKE) $(DIR_OBJ)/%.so : src/vendor/%.cpp $(cxx-dbg-command) $(FLG_PKE) $(DIR_OBJ)/%.o : editor/%.cpp $(cxx-bin-command) $(FLG_EDT) $(DIR_OBJ)/%.so : editor/%.cpp $(cxx-dbg-command) $(FLG_EDT) $(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 ar rc $@ $^ ranlib $@ $(DIR_BIN)/libBullet3.a: $(CMAKE) \ -DCMAKE_C_FLAGS:STRING="" \ -DCMAKE_CXX_FLAGS:STRING="" \ -DCMAKE_BUILD_TYPE:STRING=Release \ -DBUILD_BULLET2_DEMOS:BOOL=0 \ -DBUILD_CPU_DEMOS:BOOL=0 \ -DBUILD_UNIT_TESTS:BOOL=0 \ -DBUILD_OPENGL3_DEMOS:BOOL=0 \ -DBUILD_EXTRAS:BOOL=0 \ -DINSTALL_EXTRA_LIBS:BOOL=0 \ -DINSTALL_LIBS:BOOL=1 \ -DINSTALL_CMAKE_FILES:BOOL=0 \ -DPOSITION_INDEPENDENT_CODE:BOOL=0 \ -Hsub/bullet3 -B$(DIR_BIN)/bullet3 -G "Unix Makefiles" $(CMAKE) --build $(DIR_BIN)/bullet3 --target BulletDynamics BulletCollision LinearMath Bullet3Common ar rc $@ $(DST_BULLET_BIN) # touch $@ # -LAH to show all cmake variables # # ar rc $@ sub/bullet3/build3/gmake/obj/x64/Debug/Bullet3Collision/*.o # ar r $@ sub/bullet3/build3/gmake/obj/x64/Debug/Bullet3Common/*.o # ar r $@ sub/bullet3/build3/gmake/obj/x64/Debug/BulletCollision/*.o # ar r $@ sub/bullet3/build3/gmake/obj/x64/Debug/BulletDynamics/*.o # ar r $@ sub/bullet3/build3/gmake/obj/x64/Debug/LinearMath/*.o $(DIR_DBG)/libBullet3.a: (cd sub/bullet3/build3 && ./premake4_linux64 gmake) ${MAKE} no-demos=1 no-extras=1 no-test=1 config=debug64 -j$$((`nproc`-1)) -C sub/bullet3/build3/gmake \ BulletCollision Bullet3Collision BulletDynamics LinearMath Bullet3Common ar r $@ sub/bullet3/build3/gmake/obj/x64/Debug/*/*.o ranlib $@ $(DIR_BIN)/libpke.a: $(DST_SHADERS) $(DIR_BIN)/libpke.a: $(OUT_OBJ) $(OUT_CXXOBJ) $(DIR_BIN)/libpke.a: ar rc $@ $(filter %.o,$^) ranlib $@ $(DIR_DBG)/libpke.a: $(DST_SHADERS) $(DIR_DBG)/libpke.a: $(OUT_SOBJ) $(OUT_CXXSOBJ) $(DIR_DBG)/libpke.a: ar rc $@ $(filter %.so,$^) ranlib $@ # $(DST_BULLET_BIN) -L$(PWD)/bin -L$(PWD)/obj # $(DIR_BIN)/pke-editor: $(DIR_OBJ)/main.o $(DIR_OBJ)/editor.o $(DIR_BIN)/pke-editor: $(DIR_OBJ)/main.o $(DIR_OBJ)/editor.o $(DIR_BIN)/pke-editor: $(DIR_BIN)/libpke.a $(CXX) -v -o $@ -O3 $(CXXFLAGS) $(LDFLAGS) $(FLG_EDT) $^ -Wl,-v $(DIR_DBG)/pke-editor: $(DIR_DBG)/libpke.a $(DIR_DBG)/libImgui.a $(DIR_DBG)/libBullet3.a $(DIR_DBG)/pke-editor: $(DIR_OBJ)/main.so $(DIR_OBJ)/editor.so @echo $^ $(CXX) -v -std=c++23 $(INCS) $^ $(LDFLAGS) $(CXXFLAGS) -g -Os $(FLG_EDT) -o $@ # pke-dbg: .PHONY: print print: @echo $(DST_SHADERS) .PHONY: clean clean: rm -rf .cache rm -f *.o *.so *.plist config.h rm -rf $(DIR_BIN) $(DIR_OBJ) $(DIR_DBG) .PHONY: dist install uninstall