# =====CONFIG===== SRC_DIR := src BUILD_DIR := build RELEASE_DIR := $(BUILD_DIR)/release DEBUG_DIR := $(BUILD_DIR)/debug MINSIZEREL_DIR := $(BUILD_DIR)/min_size_rel BINARY := stj CORES := $(shell nproc --all) PREFIX := /usr/local MANPREFIX := $(PREFIX)/share/man all: debug .PHONY: all # =====INSTALL & UNINSTALL===== install: release mkdir -p $(DESTDIR)$(PREFIX)/bin cp -f build/release/stj $(DESTDIR)$(PREFIX)/bin chmod 755 $(DESTDIR)$(PREFIX)/bin/stj mkdir -p $(DESTDIR)$(MANPREFIX)/man1 sed "s/VERSION/$(VERSION)/g" < data/stj.1 > $(DESTDIR)$(MANPREFIX)/man1/stj.1 chmod 644 $(DESTDIR)$(MANPREFIX)/man1/stj.1 tic -sx data/stj.info cp -f data/stj.desktop $(DESTDIR)$(PREFIX)/share/applications .PHONY: install uninstall: rm -f $(DESTDIR)$(PREFIX)/bin/stj rm -f $(DESTDIR)$(MANPREFIX)/man1/stj.1 rm -f $(DESTDIR)$(PREFIX)/share/applications/stj.desktop .PHONY: uninstall # =====DEBUG===== debug: $(DEBUG_DIR)/Makefile @ make -C '$(DEBUG_DIR)' -j'$(CORES)' && \ ln -sf '$(DEBUG_DIR)/$(BINARY)' ./'$(BINARY)' .PHONY: debug $(DEBUG_DIR)/Makefile: $(SRC_DIR)/CMakeLists.txt @ cmake \ -H'$(SRC_DIR)' \ -B'$(DEBUG_DIR)' \ -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON # =====RELEASE===== release: $(RELEASE_DIR)/Makefile @ make -C '$(RELEASE_DIR)' -j'$(CORES)' && \ ln -sf '$(RELEASE_DIR)'/'$(BINARY)' ./'$(BINARY)' .PHONY: release $(RELEASE_DIR)/Makefile: $(SRC_DIR)/CMakeLists.txt @ cmake \ -H'$(SRC_DIR)' \ -B'$(RELEASE_DIR)' \ -DCMAKE_BUILD_TYPE=Release \ # =====MINIMUM SIZE RELEASE===== minsizerel: $(MINSIZEREL_DIR)/Makefile @ make -C '$(MINSIZEREL_DIR)' -j'$(CORES)' && \ ln -sf '$(MINSIZEREL_DIR)'/'$(BINARY)' ./'$(BINARY)' .PHONY: minsizerel $(MINSIZEREL_DIR)/Makefile: $(SRC_DIR)/CMakeLists.txt @ cmake \ -H'$(SRC_DIR)' \ -B'$(MINSIZEREL_DIR)' \ -DCMAKE_BUILD_TYPE=MinSizeRel \ # =====CLEANING===== clean: @ [ ! -e '$(BINARY)' ] || rm '$(BINARY)' @ rm -rf '$(BUILD_DIR)' .PHONY: clean clean-release: @ rm -rf '$(RELEASE_DIR)' .PHONY: clean-release clean-debug: @ rm -rf '$(DEBUG_DIR)' .PHONY: clean-debug # =====FORMAT CODE===== format: @ clang-format -i --style=file src/**/*.c src/**/*.h