99 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
| SHELL:=/usr/bin/env bash
 | |
| # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | |
| # Makefile
 | |
| # NOTE: Do not change the contents of this file!
 | |
| # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | |
| 
 | |
| include .env
 | |
| 
 | |
| ################################
 | |
| # VARIABLES
 | |
| ################################
 | |
| 
 | |
| ARTEFACT_NAME:=${APPNAME}
 | |
| ifeq ($(OS),Windows_NT)
 | |
| ARTEFACT_NAME:=${APPNAME}.exe
 | |
| endif
 | |
| 
 | |
| ################################
 | |
| # Macros
 | |
| ################################
 | |
| 
 | |
| define create_folder_if_not_exists
 | |
| 	@if ! [ -d "$(1)" ]; then mkdir "$(1)"; fi
 | |
| endef
 | |
| 
 | |
| define create_folder_if_not_exists
 | |
| 	@touch "$(1)";
 | |
| endef
 | |
| 
 | |
| define delete_if_file_exists
 | |
| 	@if [ -f "$(1)" ]; then rm "$(1)"; fi
 | |
| endef
 | |
| 
 | |
| define delete_if_folder_exists
 | |
| 	@if [ -d "$(1)" ]; then rm -rf "$(1)"; fi
 | |
| endef
 | |
| 
 | |
| define clean_all_files
 | |
| 	@find . -type f -name "$(1)" -exec basename {} \;
 | |
| 	@find . -type f -name "$(1)" -exec rm {} \; 2> /dev/null
 | |
| endef
 | |
| 
 | |
| define clean_all_folders
 | |
| 	@find . -type d -name "$(1)" -exec basename {} \;
 | |
| 	@find . -type d -name "$(1)" -exec rm -rf {} \; 2> /dev/null
 | |
| endef
 | |
| 
 | |
| # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | |
| # TARGETS
 | |
| # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | |
| 
 | |
| ################################
 | |
| # BASIC TARGETS: setup, build, run
 | |
| ################################
 | |
| setup: check-system-requirements setup-no-checks
 | |
| setup-no-checks:
 | |
| 	@cargo update
 | |
| build: check-system-requirements build-no-checks
 | |
| build-no-checks:
 | |
| 	@$(call delete_if_file_exists,"dist/${ARTEFACT_NAME}")
 | |
| 	@#$(call delete_if_file_exists,"Cargo.lock")
 | |
| 	@cargo build --release
 | |
| 	@cp "target/release/${ARTEFACT_NAME}" "dist/"
 | |
| run-precheck:
 | |
| 	@if ! [ -f "dist/${ARTEFACT_NAME}" ]; then \
 | |
| 		echo "No artefact found! Run `make build` first"; \
 | |
| 		exit 1; \
 | |
| 	fi
 | |
| run:
 | |
| 	@make run-precheck
 | |
| 	@dist/${ARTEFACT_NAME};
 | |
| all: setup build run
 | |
| ################################
 | |
| # TARGETS: testing
 | |
| ################################
 | |
| tests: unit-tests
 | |
| unit-tests:
 | |
| 	cargo test
 | |
| ################################
 | |
| # AUXILIARY (INTERNAL TARGETS)
 | |
| ################################
 | |
| check-system-requirements:
 | |
| 	@if ! ( cargo version >> /dev/null 2> /dev/null ); then \
 | |
| 		echo "Install Rust cargo first."; \
 | |
| 		exit 1; \
 | |
| 	fi
 | |
| 	@cargo version
 | |
| ################################
 | |
| # TARGETS: clean
 | |
| ################################
 | |
| clean:
 | |
| 	@echo "All system artefacts will be force removed."
 | |
| 	@$(call clean_all_files,.DS_Store)
 | |
| 	@echo "All build artefacts will be force removed."
 | |
| 	@$(call clean_all_folders,target)
 | |
| 	@$(call delete_if_file_exists,dist/${ARTEFACT_NAME})
 | |
| 	@cargo clean
 | |
| 	@exit 0
 |