# pikul_two PROJ=pikul_two # 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 -DNDEBUG else ifeq ($(BUILD_MODE),release-debug) OBJ_EXT := rso LIB_EXT := rsa BLT_BUILD_MODE := debug64 BLT_BUILD_DIR := Debug OPT_FLAGS ?= -O2 -g -DDEBUG else ifeq ($(BUILD_MODE),debug) OBJ_EXT := so LIB_EXT := sa BLT_BUILD_MODE := debug64 BLT_BUILD_DIR := Debug OPT_FLAGS ?= -O0 -g -DDEBUG else $(error Unknown build mode: $(BUILD_MODE)) endif #echo $@ : $(@F) : $< : $^ define cc-command $(CC) -std=c2x -c -o $@ $(OPT_FLAGS) $(CFLAGS) $(INCS) $< endef define cxx-command $(CXX) -std=c++23 -c -o $@ $(OPT_FLAGS) $(CXXFLAGS) $(INCS) $< endef define cc-encode-binary-command $(1): $(2) xxd -i $$< | sed -e 's/^unsigned /const unsigned /' > $$@ endef define cc-pre-compile-header-command $(1): $(2) $(CC) -std=c2x -O3 -c $$< -o $$@ endef FLG_PKE = -Iembed -Isub/imgui -Isub/stb -Isub/cgltf -Isub/bullet3/src FLG_EDT = $(FLG_PKE) -Isrc -Isub/msdfgen -Isub/msdf-atlas-gen FLG_MPL = $(FLG_PKE) -Isrc FLG_RUN = $(FLG_PKE) -Isrc FLG_TST = $(FLG_PKE) -Isrc DST_SHADERS = \ $(DIR_OBJ)/shaders/3d.frag.spv \ $(DIR_OBJ)/shaders/3d.vert.spv \ $(DIR_OBJ)/shaders/glyph.frag.spv \ $(DIR_OBJ)/shaders/glyph.vert.spv \ $(DIR_OBJ)/shaders/present.frag.spv \ $(DIR_OBJ)/shaders/present.vert.spv \ $(DIR_OBJ)/shaders/ui-base.frag.spv \ $(DIR_OBJ)/shaders/ui-base.vert.spv \ $(DIR_OBJ)/shaders/ui-txtr.frag.spv \ FILES_BIN = \ $(DST_SHADERS) \ assets/fonts/font-mannequin.png \ assets/fonts/font-mannequin.glyph \ FILES_BIN_SAFE = $(subst -,_,$(subst .,_,$(FILES_BIN))) FILES_BIN_H = $(FILES_BIN_SAFE:%=%.h) FILES_BIN_GCH = $(FILES_BIN_SAFE:%=%.gch) # I don't like foreach but this works $(foreach f,$(FILES_BIN), \ $(eval \ $(call cc-encode-binary-command,$(subst -,_,$(subst .,_,$f)).h,$(f)) \ ) \ ) $(foreach f,$(FILES_BIN_SAFE), \ $(eval \ $(call cc-pre-compile-header-command,$(f).gch,$(f).h) \ ) \ ) .PHONY: default default: options .WAIT $(DIR_OBJ)/libpke-editor.$(OBJ_EXT) $(DIR_OBJ)/libpke-example.$(LIB_EXT) $(DIR_EXE)/pke-runtime ; .PHONY: prepare prepare: config.h prepare: config.mk prepare: mkdir -p $(DIR_EXE) mkdir -p $(DIR_OBJ)/shaders mkdir -p $(DIR_OBJ)/bullet3 .PHONY: options options: prepare .WAIT @echo "$(PROJ)" build options: @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)/%.$(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)/%.$(OBJ_EXT) : src/%.c | prepare $(cc-command) $(FLG_PKE) $(DIR_OBJ)/%.$(OBJ_EXT) : embed/%.c | prepare $(FILES_BIN_GCH) $(cc-command) $(FLG_PKE) $(DIR_OBJ)/%.$(OBJ_EXT) : editor/%.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 $(FILES_BIN_GCH) $(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)/libpke-bullet3.$(LIB_EXT): (cd sub/bullet3/build3 && ./premake4_linux64 gmake) ${MAKE} no-demos=1 no-extras=1 no-test=1 config=$(BLT_BUILD_MODE) -C sub/bullet3/build3/gmake \ BulletDynamics BulletCollision LinearMath Bullet3Common Bullet3Geometry ar rc $@ sub/bullet3/build3/gmake/obj/x64/$(BLT_BUILD_DIR)/*/*.o ranlib $@ $(DIR_OBJ)/libmsdfgen.$(LIB_EXT): prepare ${MAKE} -C sub/msdfgen $@ ar rc $@ sub/msdfgen/$(DIR_OBJ)/*.$(OBJ_EXT) ranlib $@ $(DIR_OBJ)/libmsdf-atlas-gen.$(LIB_EXT): prepare ${MAKE} -C sub/msdf-atlas-gen $@ ar rc $@ sub/msdf-atlas-gen/$(DIR_OBJ)/*.$(OBJ_EXT) ranlib $@ $(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)/audio.$(OBJ_EXT) $(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/audio-impl-pw.$(OBJ_EXT) $(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/audio-impl-shared.$(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)/embedded-shaders.$(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-input.$(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)/window.$(OBJ_EXT) $(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/imgui.$(OBJ_EXT) $(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/imgui_demo.$(OBJ_EXT) $(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/imgui_draw.$(OBJ_EXT) $(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/imgui_tables.$(OBJ_EXT) $(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/imgui_widgets.$(OBJ_EXT) $(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/imgui_impl_glfw.$(OBJ_EXT) $(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/imgui_impl_vulkan.$(OBJ_EXT) $(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/imgui_stdlib.$(OBJ_EXT) $(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/vendor-imgui-ext.$(OBJ_EXT) $(DIR_OBJ)/libpke.$(LIB_EXT): ar rc $@ $(filter %.$(OBJ_EXT),$^) ranlib $@ $(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-plugin.$(OBJ_EXT) $(DIR_OBJ)/libpke-editor.$(LIB_EXT): $(DIR_OBJ)/editor.$(OBJ_EXT) $(DIR_OBJ)/libpke-editor.$(LIB_EXT): $(DIR_OBJ)/vendor-tinyfiledialogs.$(OBJ_EXT) $(DIR_OBJ)/libpke-editor.$(LIB_EXT): ar rc $@ $(filter %.$(OBJ_EXT),$^) ranlib $@ $(DIR_OBJ)/libpke-editor.$(OBJ_EXT): $(DIR_OBJ)/libpke-editor.$(LIB_EXT) $(DIR_OBJ)/libpke-editor.$(OBJ_EXT): $(DIR_OBJ)/libmsdf-atlas-gen.$(LIB_EXT) $(DIR_OBJ)/libpke-editor.$(OBJ_EXT): $(DIR_OBJ)/libmsdfgen.$(LIB_EXT) $(CXX) -rdynamic -shared -Wl,-soname,libpke-editor.$(OBJ_EXT).$(PKE_VERSION_MAJ).$(PKE_VERSION_MIN) -Wl,--whole-archive $^ -Wl,--no-whole-archive $(LDFLAGS) -o $@ $(DIR_OBJ)/libpke-example.$(LIB_EXT): $(DIR_OBJ)/example.$(OBJ_EXT) ar rc $@ $(filter %.$(OBJ_EXT),$^) ranlib $@ $(DIR_OBJ)/libpke-test.$(LIB_EXT): $(DIR_OBJ)/pke-test-stubs.$(OBJ_EXT) $(DIR_OBJ)/libpke-test.$(LIB_EXT): $(DIR_OBJ)/pke-test-dummy.$(OBJ_EXT) $(DIR_OBJ)/libpke-test.$(LIB_EXT): $(DIR_OBJ)/pke-test-audio.$(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-load-unload.$(OBJ_EXT) $(DIR_OBJ)/libpke-test.$(LIB_EXT): $(DIR_OBJ)/pke-test-asset-manager.$(OBJ_EXT) $(DIR_OBJ)/libpke-test.$(LIB_EXT): $(DIR_OBJ)/pke-test-font.$(OBJ_EXT) ar rcs $@ $(filter %.$(OBJ_EXT),$^) $(DIR_OBJ)/libpke-runtime.$(LIB_EXT): $(DIR_OBJ)/libpke.$(LIB_EXT) $(DIR_OBJ)/libpke-runtime.$(LIB_EXT): $(DIR_OBJ)/libpke-bullet3.$(LIB_EXT) mkdir -p tmp ar x --output tmp $(DIR_OBJ)/libpke.$(LIB_EXT) ar x --output tmp $(DIR_OBJ)/libpke-bullet3.$(LIB_EXT) ar rcs $@ tmp/*.$(OBJ_EXT) rm -rf tmp $(DIR_EXE)/pke-editor: $(DIR_OBJ)/libpke-editor.$(LIB_EXT) $(DIR_EXE)/pke-editor: $(DIR_OBJ)/libpke.$(LIB_EXT) $(DIR_EXE)/pke-editor: $(DIR_OBJ)/libpke-bullet3.$(LIB_EXT) $(DIR_EXE)/pke-editor: $(DIR_OBJ)/libmsdf-atlas-gen.$(LIB_EXT) $(DIR_EXE)/pke-editor: $(DIR_OBJ)/libmsdfgen.$(LIB_EXT) $(DIR_EXE)/pke-editor: $(DIR_OBJ)/editor-main.$(OBJ_EXT) $(CXX) -v -std=c++23 $(OPT_FLAGS) $(INCS) $^ $(LDFLAGS) $(CXXFLAGS) -o $@ $(DIR_EXE)/pke-runtime: $(DIR_OBJ)/libpke.$(LIB_EXT) $(DIR_OBJ)/libpke-bullet3.$(LIB_EXT) $(DIR_EXE)/pke-runtime: $(DIR_OBJ)/runtime.$(OBJ_EXT) @echo $^ $(CXX) -v -std=c++23 $(CXXFLAGS) $(OPT_FLAGS) $(INCS) $(DIR_OBJ)/runtime.$(OBJ_EXT) -Lobj -Wl,--whole-archive $(DIR_OBJ)/libpke.$(LIB_EXT) $(DIR_OBJ)/libpke-bullet3.$(LIB_EXT) -Wl,--no-whole-archive -ldl $(LDFLAGS) -o $@ $(DIR_EXE)/pke-test: $(DIR_OBJ)/libpke-test.$(LIB_EXT) $(DIR_OBJ)/libpke.$(LIB_EXT) $(DIR_OBJ)/libpke-bullet3.$(LIB_EXT) $(DIR_EXE)/pke-test: $(DIR_OBJ)/pke-test.$(OBJ_EXT) @echo $^ $(CXX) -v -std=c++23 $(OPT_FLAGS) $(INCS) $^ $(LDFLAGS) $(CXXFLAGS) -o $@ .PHONY: print print: @echo $(FILES_BIN_H) @echo $(FILES_BIN_GCH) .PHONY: clean clean: rm -rf .cache rm -f *.o *.so *.plist config.h $(FILES_BIN_SAFE) $(FILES_BIN_GCH) rm -rf ./$(DIR_EXE_release) ./$(DIR_EXE_release-debug) ./$(DIR_EXE_debug) ./$(DIR_OBJ) $(DIR_OBJ)/pke.hpp: prepare echo "#ifndef PKE_PKE_HPP\n#define PKE_PKE_HPP\n" > $(DIR_OBJ)/pke.hpp find ./src -name "*.h" -and -name "*type*" -or -name "*.hpp" -and -name "*type*" -printf "#include \"%f\"\n" | sort >> $(DIR_OBJ)/pke.hpp echo "\n" >> $(DIR_OBJ)/pke.hpp find ./src -name "*.h" -not -name "*type*" -or -name "*.hpp" -not -name "*type*" -printf "#include \"%f\"\n" | sort >> $(DIR_OBJ)/pke.hpp echo "\n#endif /* PKE_PKE_HPP */" >> $(DIR_OBJ)/pke.hpp $(DIR_OBJ)/pke.pc: prepare @echo -n 'Creating pke.pc ...' @echo 'prefix=$${pcfiledir}/../..' > $(DIR_OBJ)/pke.pc @echo 'exec_prefix=$${prefix}' >> $(DIR_OBJ)/pke.pc @echo 'libdir=$${exec_prefix}/lib/pke' >> $(DIR_OBJ)/pke.pc @echo 'includedir=$${prefix}/include' >> $(DIR_OBJ)/pke.pc @echo '\nName: libpke' >> $(DIR_OBJ)/pke.pc @echo 'Description: pke Static Library' >> $(DIR_OBJ)/pke.pc @echo 'Version: $(PKE_VERSION)' >> $(DIR_OBJ)/pke.pc @echo 'Libs: -L$${libdir} -lpke-runtime' >> $(DIR_OBJ)/pke.pc @echo 'Cflags: -I$${includedir}' >> $(DIR_OBJ)/pke.pc @echo '\nRequires: bullet' >> $(DIR_OBJ)/pke.pc @echo -n 'Requires.private: ' >> $(DIR_OBJ)/pke.pc @echo 'vulkan glfw3 glm libpipewire-0.3 libspa-0.2' >> $(DIR_OBJ)/pke.pc @echo ' Done.' $(DIR_OBJ)/pke-dbg.pc: prepare @echo -n 'Creating pke-dbg.pc ...' @echo 'prefix=$${pcfiledir}/../..' > $(DIR_OBJ)/pke-dbg.pc @echo 'exec_prefix=$${prefix}' >> $(DIR_OBJ)/pke-dbg.pc @echo 'libdir=$${exec_prefix}/lib/pke-dbg' >> $(DIR_OBJ)/pke-dbg.pc @echo 'includedir=$${prefix}/include' >> $(DIR_OBJ)/pke-dbg.pc @echo '\nName: libpke-dbg' >> $(DIR_OBJ)/pke-dbg.pc @echo 'Description: pke Static Debug Library' >> $(DIR_OBJ)/pke-dbg.pc @echo 'Version: $(PKE_VERSION)' >> $(DIR_OBJ)/pke-dbg.pc @echo 'Libs: -L$${libdir} -lpke-runtime' >> $(DIR_OBJ)/pke-dbg.pc @echo 'Cflags: -I$${includedir}' >> $(DIR_OBJ)/pke-dbg.pc @echo '\nRequires: bullet' >> $(DIR_OBJ)/pke-dbg.pc @echo -n 'Requires.private: ' >> $(DIR_OBJ)/pke-dbg.pc @echo 'vulkan glfw3 glm libpipewire-0.3 libspa-0.2' >> $(DIR_OBJ)/pke-dbg.pc @echo ' Done.' .PHONY: install install: bin/pke-runtime install: obj/libpke-runtime.a install: obj/libpke-editor.o install: $(DIR_OBJ)/pke.hpp install: $(DIR_OBJ)/pke.pc mkdir -p $(DESTDIR)$(PREFIX)/bin mkdir -p $(DESTDIR)$(PREFIX)/lib/pke mkdir -p $(DESTDIR)$(PREFIX)/lib/pkgconfig mkdir -p $(DESTDIR)$(PREFIX)/usr/include/pke cp -f bin/pke-runtime $(DESTDIR)$(PREFIX)/bin cp -f obj/libpke-runtime.a $(DESTDIR)$(PREFIX)/lib/pke cp -f obj/libpke-editor.o $(DESTDIR)$(PREFIX)/lib/pke cp -f obj/pke.hpp $(DESTDIR)$(PREFIX)/usr/include/pke cp -f obj/pke.pc $(DESTDIR)$(PREFIX)/lib/pkgconfig cp -f sub/imgui/*.h $(DESTDIR)$(PREFIX)/usr/include/pke cp -f sub/stb/stb_image.h $(DESTDIR)$(PREFIX)/usr/include/pke cp -f sub/cgltf/cgltf.h $(DESTDIR)$(PREFIX)/usr/include/pke cp -f src/*.h $(DESTDIR)$(PREFIX)/usr/include/pke cp -f src/*.hpp $(DESTDIR)$(PREFIX)/usr/include/pke chmod 755 $(DESTDIR)$(PREFIX)/bin/pke-runtime chmod 755 $(DESTDIR)$(PREFIX)/lib/pke/libpke-runtime.a chmod 755 $(DESTDIR)$(PREFIX)/lib/pke/libpke-editor.o chmod 644 $(DESTDIR)$(PREFIX)/lib/pkgconfig/pke.pc chmod 644 $(DESTDIR)$(PREFIX)/usr/include/pke/*.h chmod 644 $(DESTDIR)$(PREFIX)/usr/include/pke/*.hpp .PHONY: install-dbg install-dbg: dbg/pke-runtime install-dbg: obj/libpke-runtime.sa install-dbg: obj/libpke-editor.so install-dbg: $(DIR_OBJ)/pke-dbg.pc mkdir -p $(DESTDIR)$(PREFIX)/lib/debug/usr/bin mkdir -p $(DESTDIR)$(PREFIX)/lib/pke-dbg cp -f dbg/pke-runtime $(DESTDIR)$(PREFIX)/lib/debug/usr/bin cp -f obj/libpke-runtime.sa $(DESTDIR)$(PREFIX)/lib/pke-dbg/libpke-runtime.a cp -f obj/libpke-editor.so $(DESTDIR)$(PREFIX)/lib/pke-dbg cp -f obj/pke-dbg.pc $(DESTDIR)$(PREFIX)/lib/pkgconfig chmod 755 $(DESTDIR)$(PREFIX)/lib/debug/usr/bin/pke-runtime chmod 755 $(DESTDIR)$(PREFIX)/lib/pke-dbg/libpke-runtime.a chmod 755 $(DESTDIR)$(PREFIX)/lib/pke-dbg/libpke-editor.so chmod 644 $(DESTDIR)$(PREFIX)/lib/pkgconfig/pke-dbg.pc .PHONY: uninstall uninstall: rm -f $(DESTDIR)$(PREFIX)/bin/pke-runtime rm -f $(DESTDIR)$(PREFIX)/lib/debug/usr/bin/pke-runtime rm -rf $(DESTDIR)$(PREFIX)/lib/pke rm -rf $(DESTDIR)$(PREFIX)/lib/pke-dbg rm -f $(DESTDIR)$(PREFIX)/lib/pkgconfig/pke.pc rm -f $(DESTDIR)$(PREFIX)/lib/pkgconfig/pke-dbg.pc rm -rf $(DESTDIR)$(PREFIX)/usr/include/pke