# 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 -I/home/pikum/build/msdfgen -I/home/pikum/build/msdf-atlas-gen FLG_MPL = $(FLG_PKE) -Isrc FLG_RUN = $(FLG_PKE) -Isrc FLG_TST = $(FLG_PKE) -Isrc DIR_OBJ=obj DIR_BIN=bin DIR_DBG=dbg DST_SHADERS = \ $(DIR_OBJ)/shaders/vertex.vert.spv \ $(DIR_OBJ)/shaders/present.vert.spv \ $(DIR_OBJ)/shaders/texture.frag.spv \ $(DIR_OBJ)/shaders/present.frag.spv \ $(DIR_OBJ)/shaders/glyph.vert.spv \ $(DIR_OBJ)/shaders/glyph.frag.spv \ $(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 ; .PHONY: prepare 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 .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: ; %.hpp: ; $(DIR_OBJ)/%.o : config.h config.mk $(DIR_OBJ)/%.so : 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)/shaders/%.vert.spv: assets/shaders/%.vert $(GLSLC) $^ -o $@ $(DIR_OBJ)/shaders/%.frag.spv: assets/shaders/%.frag $(GLSLC) $^ -o $@ $(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 : tests/%.c $(cc-bin-command) $(FLG_TST) $(DIR_OBJ)/%.so : tests/%.c $(cc-dbg-command) $(FLG_TST) $(DIR_OBJ)/%.o : src/%.cpp $(cxx-bin-command) $(FLG_PKE) $(DIR_OBJ)/%.so : src/%.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_OBJ)/%.o : example/%.cpp $(cxx-bin-command) $(FLG_MPL) $(DIR_OBJ)/%.so : example/%.cpp $(cxx-dbg-command) $(FLG_MPL) $(DIR_OBJ)/%.o : runtime/%.cpp $(cxx-bin-command) $(FLG_RUN) $(DIR_OBJ)/%.so : runtime/%.cpp $(cxx-dbg-command) $(FLG_RUN) $(DIR_OBJ)/%.o : tests/%.cpp $(cxx-bin-command) $(FLG_TST) $(DIR_OBJ)/%.so : tests/%.cpp $(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 ar rc $@ $^ ranlib $@ # -j$$((`nproc`-1)) $(DIR_BIN)/libBullet3.a: (cd sub/bullet3/build3 && ./premake4_linux64 gmake) ${MAKE} no-demos=1 no-extras=1 no-test=1 config=release64 -C sub/bullet3/build3/gmake \ BulletDynamics BulletCollision LinearMath Bullet3Common ar r $@ sub/bullet3/build3/gmake/obj/x64/Release/*/*.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 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)/entities.o $(DIR_BIN)/libpke.a: $(DIR_OBJ)/event.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)/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,$^) 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)/entities.so $(DIR_DBG)/libpke.a: $(DIR_OBJ)/event.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)/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,$^) 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 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 ar rcs $@ $(filter %.so,$^) $(DIR_BIN)/pke-editor: $(DIR_BIN)/libpke.a $(DIR_BIN)/libImgui.a $(DIR_BIN)/libBullet3.a $(DIR_BIN)/pke-editor: $(DIR_OBJ)/editor-main.o $(DIR_OBJ)/editor.o $(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_DBG)/pke-editor: $(DIR_DBG)/libpke.a $(DIR_DBG)/libImgui.a $(DIR_DBG)/libBullet3.a $(DIR_DBG)/pke-editor: $(DIR_OBJ)/editor-main.so $(DIR_OBJ)/editor.so $(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) -g -O0 -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_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 @echo $^ $(CXX) -v -std=c++23 $(INCS) $^ $(LDFLAGS) $(CXXFLAGS) -g -O0 -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 @echo $^ $(CXX) -v -std=c++23 $(INCS) $^ $(LDFLAGS) $(CXXFLAGS) -g -O0 -o $@ .PHONY: print print: @echo $(OUT_OBJ) @echo $(MAINS_OBJ) @echo $(MAINS_SOBJ) .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