CURDIR := $(shell pwd)

# support replace docker by using `DOCKER=podman make`
DOCKER ?= docker

CC=clang
CXX=clang++

searchlib:
	# debug mode
	cargo build -p tici-search-lib
	# release mode
	#cargo build -p tici-search-lib --release

build:
	# Ensure the default targets can be built successfully
	cargo build --features "openssl-vendored failpoints"

dev: fmt check build
	# Ensure the integration tests can be built successfully
	cargo build -p tici_integration_tests --all-targets

release:
	cargo build --features "openssl-vendored" --release

unset-override:
	@# unset first in case of any previous overrides
	@if rustup override list | grep `pwd` > /dev/null; then rustup override unset; fi

pre-format: unset-override
	@rustup component add rustfmt
	@cargo install --force --locked --version=2.0.1 -q cargo-sort

pre-format-fast: unset-override
	@rustup component add rustfmt
	@cargo install --version=2.0.1 -q cargo-sort

format: pre-format
	@cargo fmt
	@cargo sort -w ./Cargo.toml components/*/Cargo.toml >/dev/null

fmt: pre-format-fast
	@cargo fmt
	@cargo sort -w ./Cargo.toml components/*/Cargo.toml >/dev/null

pre-clippy: unset-override
	@rustup component add clippy

clippy: pre-clippy
	@./tests/scripts/clippy-all

ci-prepare-it:
	@./tests/scripts/it-prepare.sh

ci-run-it:
	@./tests/scripts/it-run.sh

ci-e2e:
	@./tests/scripts/e2e-run.sh

ci-ut:
	@./tests/scripts/ut-run.sh

# Build the test image for CI
build-test-image:
	$(DOCKER) build -f ci/Dockerfile -t tici-test-tiflashbase .

# Run the integration tests in the test image
it:
	$(DOCKER) run --rm -v $(CURDIR):/tici tici-test-tiflashbase tici/tests/scripts/it

# Run the unit tests in the test image
ut:
	$(DOCKER) run --rm -v $(CURDIR):/tici tici-test-tiflashbase tici/tests/scripts/ut

e2e:
	$(DOCKER) run --rm -v $(CURDIR):/tici \
		-e TIUP_MIRROR_NIGHTLY -e TIUP_MIRROR_FTS -e E2E_TEST_RUNNER_ARGS \
		tici-test-tiflashbase tici/tests/scripts/e2e

check:
	cargo fmt -- --check
	cargo clippy --features "openssl-vendored" --all-targets --all -- -Dwarnings -A clippy::needless_lifetimes -A dead_code
	cargo check -p tici_shard -p tici-search-lib --benches --features="bench"
