POWERSHELL ?= powershell.exe
BUILD_SCRIPT := .\scripts\build_windows.ps1
BUILD_CMD := .\scripts\build_windows.cmd
THIS_MAKEFILE := $(lastword $(MAKEFILE_LIST))

PRESET ?= windows-cuda-release
TARGET ?= audiocpp_cli
JOBS ?=
VS_INSTALL ?=
NATIVE_CPU ?=

.PHONY: all build configure cpu cpu-release cuda cuda-debug cuda-release clean presets help

all: cuda

build:
	$(POWERSHELL) -NoProfile -ExecutionPolicy Bypass -File "$(BUILD_SCRIPT)" -Preset "$(PRESET)" $(if $(TARGET),-Target "$(TARGET)",) $(if $(JOBS),-Jobs "$(JOBS)",) $(if $(NATIVE_CPU),-NativeCpu "$(NATIVE_CPU)",) $(if $(VS_INSTALL),-VsInstall "$(VS_INSTALL)",)

configure:
	$(POWERSHELL) -NoProfile -ExecutionPolicy Bypass -File "$(BUILD_SCRIPT)" -Preset "$(PRESET)" -ConfigureOnly $(if $(NATIVE_CPU),-NativeCpu "$(NATIVE_CPU)",) $(if $(VS_INSTALL),-VsInstall "$(VS_INSTALL)",)

cpu:
	$(MAKE) -f "$(THIS_MAKEFILE)" build PRESET=windows-cpu-release

cpu-release:
	$(MAKE) -f "$(THIS_MAKEFILE)" build PRESET=windows-cpu-release

cuda:
	$(MAKE) -f "$(THIS_MAKEFILE)" build PRESET=windows-cuda-release

cuda-debug:
	$(MAKE) -f "$(THIS_MAKEFILE)" build PRESET=windows-cuda-debug

cuda-release:
	$(MAKE) -f "$(THIS_MAKEFILE)" build PRESET=windows-cuda-release

clean:
	$(POWERSHELL) -NoProfile -ExecutionPolicy Bypass -File "$(BUILD_SCRIPT)" -Preset "$(PRESET)" -Clean $(if $(VS_INSTALL),-VsInstall "$(VS_INSTALL)",)

presets:
	cmake --list-presets

help:
	@echo audio.cpp Windows build targets:
	@echo   make -f Makefile.windows                  CUDA Release build of audiocpp_cli
	@echo   make -f Makefile.windows cpu              CPU Release build of audiocpp_cli
	@echo   make -f Makefile.windows cuda             CUDA Release build of audiocpp_cli
	@echo   make -f Makefile.windows cuda-debug       CUDA Debug build with /O2 /Zi
	@echo   make -f Makefile.windows build TARGET=name  Build one target from the selected Windows preset
	@echo   make -f Makefile.windows presets          List available CMake presets
	@echo   $(BUILD_CMD)            Same build from cmd.exe without make
	@echo.
	@echo Examples:
	@echo   make -f Makefile.windows cpu JOBS=8
	@echo   make -f Makefile.windows cuda JOBS=8
	@echo   make -f Makefile.windows cuda NATIVE_CPU=OFF JOBS=8
	@echo   make -f Makefile.windows cuda-debug TARGET=audiocpp_cli JOBS=8
	@echo   make -f Makefile.windows cuda VS_INSTALL="C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools"
