SHELL:=/bin/bash

.PHONY: help build clean clone-rvt copy-configuration-file development-server docs install-deps make-runtime pull-rvt-container-image release test

help:
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'

build: ## Build application
	@cargo build

build-non-incremental: clean ## Build application after cleaning first
	@cargo build

build-safepkt-container-image: ## Build SafePKT docker image
	@/bin/bash -c 'source ./provisioning/install.sh && build_safepkt_backend_image'

clean: ## Remove artifacts generated by cargo on build
	@cargo clean

clone-rvt: ## Clone rust verification tools
	source ./provisioning/install.sh && clone_rvt

copy-configuration-file: ## Copy default configuration file
	@/bin/bash -c 'source ./provisioning/install.sh && copy_configuration_file'

development-server: build release ## Run release
	killall safepkt-backend; ./target/release/safepkt-backend >> ./log/backend.log 2>&1 &

pull-rvt-container-image: ## Pull RVT container image
	source ./provisioning/install.sh && pull_rvt_image

make-runtime: ## Make runtime and simd emulation, see https://github.com/project-oak/rust-verification-tools/issues/131#issuecomment-858638159
	source ./provisioning/install.sh && make_runtime_simd_emulation

docs: ## Generate documentation
	@cargo doc --lib

install-deps: ## Install cargo
	@curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

release: ## Release application
	@cargo build --release --color always

test: ## Test application
	@cargo test
