ads2_2022/code/rust/Makefile

98 lines
2.4 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_file_if_not_exists
@touch "$(1)";
endef
define create_folder_if_not_exists
@if ! [ -d "$(1)" ]; then mkdir "$(1)"; fi
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)
@cargo clean
@exit 0