BUILD_PROFILE  ?= debug
CARGO_CMD      ?= build
WINDOWS_TARGET ?= x86_64-pc-windows-gnu
UNIX_TARGET    ?= x86_64-unknown-linux-gnu

WINDOWS_ARTIFACT = ./target/$(WINDOWS_TARGET)/$(BUILD_PROFILE)/$(ARTIFACT).exe
UNIX_ARTIFACT    = ./target/$(UNIX_TARGET)/$(BUILD_PROFILE)/$(ARTIFACT)

define cp_artifact
	$(if $(findstring build,$(CARGO_CMD)),	
	@mkdir -p $(dir $(1))
	@cp $(1) $(2)
	)
endef

define cargo_windows_default
	$(if $(findstring upgrade,$(CARGO_CMD)),	
	cargo $(CARGO_CMD) --$(BUILD_PROFILE),

	cargo $(CARGO_CMD) --$(BUILD_PROFILE) --target=$(WINDOWS_TARGET)
	$(call cp_artifact,$(WINDOWS_ARTIFACT), ../../../bin/$(ARTIFACT).exe)
	)
endef

define cargo_unix_default
	$(if $(findstring upgrade,$(CARGO_CMD)),	
	cargo $(CARGO_CMD) --$(BUILD_PROFILE),

	cargo $(CARGO_CMD) --$(BUILD_PROFILE) --target=$(UNIX_TARGET)
	$(call cp_artifact,$(UNIX_ARTIFACT), ../../../bin/$(ARTIFACT))
	)
endef

# Run `cargo install cargo-edit --locked`to support upgrade
# Windows build requires "rustup target add x86_64-pc-windows-gnu" and "sudo apt-get install mingw-w64"