diff --git a/internal/demod/gpudemod/README.md b/internal/demod/gpudemod/README.md index 266c8b8..e51c0ed 100644 --- a/internal/demod/gpudemod/README.md +++ b/internal/demod/gpudemod/README.md @@ -21,6 +21,7 @@ This is **not compiled automatically yet** in the current environment because th On a CUDA-capable dev machine with toolchain installed: 1. Compile `kernels.cu` into an object file + - helper script: `tools/build-gpudemod-kernel.ps1` 2. Link it into the `cufft` build 3. Replace `gpud_launch_freq_shift(...)` stub body with the real kernel launch 4. Validate copied-back shifted IQ against `dsp.FreqShift` diff --git a/internal/demod/gpudemod/gpudemod.go b/internal/demod/gpudemod/gpudemod.go index 2b2cd5c..56c2476 100644 --- a/internal/demod/gpudemod/gpudemod.go +++ b/internal/demod/gpudemod/gpudemod.go @@ -4,6 +4,7 @@ package gpudemod /* #cgo windows LDFLAGS: -lcufft64_12 -lcudart64_13 +#cgo windows CFLAGS: -I"C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v13.2/include" #include #include diff --git a/tools/build-gpudemod-kernel.ps1 b/tools/build-gpudemod-kernel.ps1 new file mode 100644 index 0000000..5c8a96b --- /dev/null +++ b/tools/build-gpudemod-kernel.ps1 @@ -0,0 +1,27 @@ +param( + [string]$CudaRoot = 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.2', + [string]$Source = 'internal/demod/gpudemod/kernels.cu', + [string]$OutDir = 'internal/demod/gpudemod/build' +) + +$ErrorActionPreference = 'Stop' +$repo = Split-Path -Parent $PSScriptRoot +Set-Location $repo + +$nvcc = Join-Path $CudaRoot 'bin\nvcc.exe' +if (!(Test-Path $nvcc)) { + throw "nvcc not found at $nvcc" +} + +New-Item -ItemType Directory -Force -Path $OutDir | Out-Null +$outObj = Join-Path $OutDir 'kernels.obj' + +Write-Host "Using nvcc: $nvcc" +Write-Host "Building $Source -> $outObj" + +& $nvcc -c $Source -o $outObj -I (Join-Path $CudaRoot 'include') -Xcompiler "/EHsc" +if ($LASTEXITCODE -ne 0) { + throw "nvcc failed with exit code $LASTEXITCODE" +} + +Write-Host "Built: $outObj"