PKG_VERSION = $(patsubst "%",%, $(word 3, $(shell grep version ./crates/veryl/Cargo.toml)))
BUILD_DATE = $(shell date +"%Y-%m-%d")
GIT_REVISION = $(shell git log -1 --format="%h")
CHANNEL ?=
VERSION = $(PKG_VERSION)$(CHANNEL) ($(GIT_REVISION) $(BUILD_DATE))
ZIP_NAME = veryl
BIN_NAMES = veryl veryl-ls

export VERSION

.PHONY: all test clean lint release_lnx release_win release_mac

all:
	cargo build

test:
	cargo test

clean:
	cargo clean

lint:
	cargo fmt --check
	cargo clippy -- -D warnings

release_lnx:
	cargo build --locked --release --target=x86_64-unknown-linux-musl $(addprefix --bin , ${BIN_NAMES})
	cargo build --locked --release --target=x86_64-unknown-linux-musl --manifest-path ./support/sourcemap-resolver/Cargo.toml
	zip -j ${ZIP_NAME}-x86_64-linux.zip $(addprefix target/x86_64-unknown-linux-musl/release/, ${BIN_NAMES}) \
		                                ./support/sourcemap-resolver/target/x86_64-unknown-linux-musl/release/sourcemap-resolver

release_lnx_aarch64:
	cargo build --locked --release --target=aarch64-unknown-linux-musl $(addprefix --bin , ${BIN_NAMES})
	cargo build --locked --release --target=aarch64-unknown-linux-musl --manifest-path ./support/sourcemap-resolver/Cargo.toml
	zip -j ${ZIP_NAME}-aarch64-linux.zip $(addprefix target/aarch64-unknown-linux-musl/release/, ${BIN_NAMES}) \
		                                ./support/sourcemap-resolver/target/aarch64-unknown-linux-musl/release/sourcemap-resolver

release_win:
	cargo build --locked --release --target=x86_64-pc-windows-msvc $(addprefix --bin , ${BIN_NAMES})
	cargo build --locked --release --target=x86_64-pc-windows-msvc --manifest-path ./support/sourcemap-resolver/Cargo.toml
	mv -v $(addsuffix .exe, $(addprefix target/x86_64-pc-windows-msvc/release/, ${BIN_NAMES})) ./
	mv -v ./support/sourcemap-resolver/target/x86_64-pc-windows-msvc/release/sourcemap-resolver.exe ./
	7z a ${ZIP_NAME}-x86_64-windows.zip $(addsuffix .exe, ${BIN_NAMES}) sourcemap-resolver.exe

release_win_aarch64:
	cargo build --locked --release --target=aarch64-pc-windows-msvc $(addprefix --bin , ${BIN_NAMES})
	cargo build --locked --release --target=aarch64-pc-windows-msvc --manifest-path ./support/sourcemap-resolver/Cargo.toml
	mv -v $(addsuffix .exe, $(addprefix target/aarch64-pc-windows-msvc/release/, ${BIN_NAMES})) ./
	mv -v ./support/sourcemap-resolver/target/aarch64-pc-windows-msvc/release/sourcemap-resolver.exe ./
	7z a ${ZIP_NAME}-aarch64-windows.zip $(addsuffix .exe, ${BIN_NAMES}) sourcemap-resolver.exe

release_mac:
	cargo build --locked --release --target=x86_64-apple-darwin  $(addprefix --bin , ${BIN_NAMES})
	cargo build --locked --release --target=aarch64-apple-darwin $(addprefix --bin , ${BIN_NAMES})
	cargo build --locked --release --target=x86_64-apple-darwin  --manifest-path ./support/sourcemap-resolver/Cargo.toml
	cargo build --locked --release --target=aarch64-apple-darwin --manifest-path ./support/sourcemap-resolver/Cargo.toml
	zip -j ${ZIP_NAME}-x86_64-mac.zip $(addprefix target/x86_64-apple-darwin/release/, ${BIN_NAMES}) \
		                              ./support/sourcemap-resolver/target/x86_64-apple-darwin/release/sourcemap-resolver
	zip -j ${ZIP_NAME}-aarch64-mac.zip $(addprefix target/aarch64-apple-darwin/release/, ${BIN_NAMES}) \
		                               ./support/sourcemap-resolver/target/aarch64-apple-darwin/release/sourcemap-resolver

release_version:
	echo "$(VERSION)" > version

release_rpm:
	mkdir -p target
	cargo rpm build
	cp target/x86_64-unknown-linux-musl/release/rpmbuild/RPMS/x86_64/* ./

watch:
	cargo watch -i crates/parser/src/generated -x test -x bench

install:
	verylup install local
	cargo install --profile release-verylup --path crates/mdbook

gen_sv:
	cargo run --bin veryl -- build

gen_ir:
	cargo run --bin veryl -- dump --ir

fmt_veryl:
	cargo run --bin veryl -- fmt

flamegraph:
	cargo bench --bench benchmark -- --profile-time=5
