152 lines
5.1 KiB
Batchfile
152 lines
5.1 KiB
Batchfile
@echo off
|
|
REM HOT-Step engine build (CUDA, native arch only)
|
|
REM Compiles ONLY for the local GPU — fast dev builds.
|
|
REM
|
|
REM Automatically finds Visual Studio / Build Tools via vswhere.
|
|
REM Automatically downloads ONNX Runtime GPU SDK for SuperSep support.
|
|
|
|
REM --- Find vcvars64.bat dynamically ---
|
|
REM vswhere ships with VS 2017+ and VS BuildTools.
|
|
REM
|
|
REM IMPORTANT: %ProgramFiles(x86)% contains parentheses which break
|
|
REM batch for-loop parsing. We write the vswhere output to a temp file
|
|
REM and read from that instead.
|
|
|
|
set "VSWHERE=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe"
|
|
if not exist "%VSWHERE%" (
|
|
echo ERROR: vswhere.exe not found. Is Visual Studio or Build Tools installed?
|
|
exit /b 1
|
|
)
|
|
|
|
set "VCVARS_TMP=%TEMP%\vcvars_path.txt"
|
|
"%VSWHERE%" -latest -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -find "VC\Auxiliary\Build\vcvars64.bat" > "%VCVARS_TMP%" 2>nul
|
|
|
|
set "VCVARS="
|
|
for /f "usebackq tokens=*" %%i in ("%VCVARS_TMP%") do set "VCVARS=%%i"
|
|
del "%VCVARS_TMP%" 2>nul
|
|
|
|
if not defined VCVARS (
|
|
echo ERROR: Could not find vcvars64.bat via vswhere.
|
|
echo Install the "Desktop development with C++" workload.
|
|
exit /b 1
|
|
)
|
|
|
|
REM Skip vcvars if already sourced (prevents PATH overflow on repeated runs)
|
|
if defined VSCMD_VER (
|
|
echo Using cached VS environment ^(VSCMD_VER=%VSCMD_VER%^)
|
|
) else (
|
|
echo Using: %VCVARS%
|
|
call "%VCVARS%"
|
|
)
|
|
|
|
REM ── ONNX Runtime GPU SDK (for SuperSep stem separation) ────────────
|
|
REM Auto-downloads from Microsoft's GitHub Releases if not present.
|
|
REM Users can skip this by setting ONNXRUNTIME_ROOT env var.
|
|
|
|
set "ORT_VERSION=1.25.1"
|
|
set "ORT_DIR=%~dp0deps\onnxruntime"
|
|
set "ORT_MARKER=%ORT_DIR%\include\onnxruntime_cxx_api.h"
|
|
|
|
if defined ONNXRUNTIME_ROOT (
|
|
echo [ORT] Using ONNXRUNTIME_ROOT=%ONNXRUNTIME_ROOT%
|
|
goto :cudnn
|
|
)
|
|
|
|
if exist "%ORT_MARKER%" (
|
|
echo [ORT] Found at %ORT_DIR%
|
|
goto :cudnn
|
|
)
|
|
|
|
echo.
|
|
echo [ORT] ONNX Runtime GPU SDK not found. Downloading v%ORT_VERSION%...
|
|
echo [ORT] (one-time download for SuperSep stem separation)
|
|
echo.
|
|
|
|
set "ORT_ZIP=%TEMP%\onnxruntime-win-x64-gpu-%ORT_VERSION%.zip"
|
|
set "ORT_URL=https://github.com/microsoft/onnxruntime/releases/download/v%ORT_VERSION%/onnxruntime-win-x64-gpu-%ORT_VERSION%.zip"
|
|
|
|
echo [ORT] Downloading from %ORT_URL%
|
|
curl -L -o "%ORT_ZIP%" "%ORT_URL%"
|
|
if errorlevel 1 (
|
|
echo [ORT] WARNING: Download failed. Building without SuperSep support.
|
|
goto :build
|
|
)
|
|
|
|
echo [ORT] Extracting...
|
|
mkdir "%~dp0deps" 2>nul
|
|
powershell -NoProfile -Command "Expand-Archive -Path '%ORT_ZIP%' -DestinationPath '%~dp0deps' -Force"
|
|
if errorlevel 1 (
|
|
echo [ORT] WARNING: Extraction failed. Building without SuperSep support.
|
|
goto :build
|
|
)
|
|
|
|
REM Rename extracted folder (it has version in the name)
|
|
if exist "%~dp0deps\onnxruntime-win-x64-gpu-%ORT_VERSION%" (
|
|
ren "%~dp0deps\onnxruntime-win-x64-gpu-%ORT_VERSION%" onnxruntime
|
|
)
|
|
|
|
del "%ORT_ZIP%" 2>nul
|
|
|
|
if exist "%ORT_MARKER%" (
|
|
echo [ORT] Successfully installed to %ORT_DIR%
|
|
) else (
|
|
echo [ORT] WARNING: Installation may have failed. Check %ORT_DIR%
|
|
)
|
|
|
|
REM ── cuDNN 9 (required for ONNX Runtime CUDA EP) ────────────────────
|
|
:cudnn
|
|
REM ORT GPU needs cudnn64_9.dll which isn't bundled. We get it from
|
|
REM the nvidia-cudnn-cu12 pip package (no NVIDIA login required).
|
|
REM Only the runtime DLLs are needed — copied next to the exe.
|
|
|
|
set "CUDNN_MARKER=%~dp0build\Release\cudnn64_9.dll"
|
|
|
|
if exist "%CUDNN_MARKER%" (
|
|
echo [cuDNN] Found cudnn64_9.dll
|
|
goto :build
|
|
)
|
|
|
|
echo.
|
|
echo [cuDNN] cudnn64_9.dll not found. Installing via pip...
|
|
echo [cuDNN] (one-time download for CUDA-accelerated SuperSep)
|
|
echo.
|
|
|
|
python -m pip install --quiet nvidia-cudnn-cu12 2>nul
|
|
if errorlevel 1 (
|
|
echo [cuDNN] WARNING: pip install failed. CUDA EP will be disabled.
|
|
echo [cuDNN] To fix: pip install nvidia-cudnn-cu12
|
|
goto :build
|
|
)
|
|
|
|
REM Find the installed DLLs and copy them to build/Release
|
|
for /f "tokens=*" %%d in ('python -c "import nvidia.cudnn; import os; print(os.path.join(nvidia.cudnn.__path__[0], 'bin'))" 2^>nul') do (
|
|
if exist "%%d\cudnn64_9.dll" (
|
|
echo [cuDNN] Copying DLLs from %%d
|
|
mkdir "%~dp0build\Release" 2>nul
|
|
copy /y "%%d\cudnn*.dll" "%~dp0build\Release\" >nul 2>nul
|
|
echo [cuDNN] Done
|
|
) else (
|
|
echo [cuDNN] WARNING: Could not find cudnn64_9.dll in pip package
|
|
echo [cuDNN] path checked: %%d
|
|
)
|
|
)
|
|
|
|
:build
|
|
cd /d "%~dp0"
|
|
mkdir build 2>nul
|
|
cd build
|
|
|
|
REM Only run cmake configure if not yet configured (avoids invalidating incremental builds)
|
|
if not exist "CMakeCache.txt" (
|
|
REM HOT_STEP_CMAKE_FLAGS can be set by update.bat for auto-detected backends.
|
|
REM When unset, defaults to CUDA-only (native dev build).
|
|
if defined HOT_STEP_CMAKE_FLAGS (
|
|
cmake .. %HOT_STEP_CMAKE_FLAGS% -DGGML_CPU_ALL_VARIANTS=ON -DGGML_BACKEND_DL=ON
|
|
) else (
|
|
cmake .. -DGGML_CUDA=ON -DGGML_CUDA_GRAPHS=ON -DCMAKE_CUDA_ARCHITECTURES="75;80;86;89;90;120a" -DGGML_NATIVE=OFF -DGGML_CPU_ALL_VARIANTS=ON -DGGML_BACKEND_DL=ON
|
|
)
|
|
)
|
|
cmake --build . --config Release -j %NUMBER_OF_PROCESSORS%
|
|
|
|
cd ..
|