$ErrorActionPreference = 'Stop' $nvcc = (Get-Command nvcc -ErrorAction SilentlyContinue).Path if (-not $nvcc) { $nvcc = 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.2\bin\nvcc.exe' } if (-not (Test-Path $nvcc)) { Write-Host 'nvcc not found — skipping kernel build' -ForegroundColor Yellow exit 0 } $mingwRoot = 'C:\msys64\mingw64\bin' $mingwGpp = Join-Path $mingwRoot 'g++.exe' $ar = Join-Path $mingwRoot 'ar.exe' if (-not (Test-Path $mingwGpp)) { throw 'MinGW g++ not found' } if (-not (Test-Path $ar)) { throw 'MinGW ar not found' } $kernelSrc = Join-Path $PSScriptRoot '..\internal\demod\gpudemod\kernels.cu' $buildDir = Join-Path $PSScriptRoot '..\internal\demod\gpudemod\build' if (-not (Test-Path $buildDir)) { New-Item -ItemType Directory -Path $buildDir | Out-Null } $objFile = Join-Path $buildDir 'kernels.o' $libFile = Join-Path $buildDir 'libgpudemod_kernels.a' $legacyLib = Join-Path $buildDir 'gpudemod_kernels.lib' if (Test-Path $objFile) { Remove-Item $objFile -Force } if (Test-Path $libFile) { Remove-Item $libFile -Force } if (Test-Path $legacyLib) { Remove-Item $legacyLib -Force } Write-Host 'Compiling CUDA kernels with MinGW host...' -ForegroundColor Cyan & $nvcc -ccbin $mingwGpp -c $kernelSrc -o $objFile ` --compiler-options=-fno-exceptions ` -arch=sm_75 ` -gencode arch=compute_75,code=sm_75 ` -gencode arch=compute_80,code=sm_80 ` -gencode arch=compute_86,code=sm_86 ` -gencode arch=compute_87,code=sm_87 ` -gencode arch=compute_88,code=sm_88 ` -gencode arch=compute_89,code=sm_89 ` -gencode arch=compute_90,code=sm_90 if ($LASTEXITCODE -ne 0) { throw 'nvcc compilation failed' } Write-Host 'Archiving GNU-compatible CUDA kernel library...' -ForegroundColor Cyan & $ar rcs $libFile $objFile if ($LASTEXITCODE -ne 0) { throw 'ar archive failed' } Write-Host "Kernel object: $objFile" -ForegroundColor Green Write-Host "Kernel library: $libFile" -ForegroundColor Green