# =====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 SHELL := $(shell which sh) all: debug .PHONY: all # =====INSTALL & UNINSTALL===== install: release @ mkdir -p '$(DESTDIR)$(PREFIX)/bin' @ cp -f '$(RELEASE_DIR)/$(BINARY)' '$(DESTDIR)$(PREFIX)/bin' @ chmod 755 '$(DESTDIR)$(PREFIX)/bin/$(BINARY)' @ mkdir -p '$(DESTDIR)$(MANPREFIX)/man1' @ sed "s/VERSION/$(VERSION)/g" < 'data/stj.1' > '$(DESTDIR)$(MANPREFIX)/man1/$(BINARY).1' @ chmod 644 '$(DESTDIR)$(MANPREFIX)/man1/$(BINARY).1' @ tic -sx 'data/stj.info' @ cp -f 'data/$(BINARY).desktop' '$(DESTDIR)$(PREFIX)/share/applications' .PHONY: install uninstall: @ rm -f '$(DESTDIR)$(PREFIX)/bin/$(BINARY)' @ rm -f '$(DESTDIR)$(MANPREFIX)/man1/$(BINARY).1' @ rm -f '$(DESTDIR)$(PREFIX)/share/applications/$(BINARY).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 src/*.c src/*.h