Skip to content

Commit f5de991

Browse files
committed
build-windows.yml
1 parent fc1d804 commit f5de991

File tree

2 files changed

+451
-331
lines changed

2 files changed

+451
-331
lines changed
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
name: Build Windows CUDA 12.9 (MSVC host)
2+
3+
on:
4+
push:
5+
branches: [ master ]
6+
paths:
7+
- '.github/workflows/build-windows.yml'
8+
- 'CMakeLists.txt'
9+
- '**/*.cpp'
10+
- '**/*.cu'
11+
workflow_dispatch:
12+
13+
jobs:
14+
win-cuda-129:
15+
runs-on: windows-2022
16+
17+
steps:
18+
# 1 ─ репозиторий
19+
- uses: actions/checkout@v4
20+
with:
21+
submodules: recursive
22+
fetch-depth: 0
23+
24+
# 2 ─ Ninja
25+
- name: Install Ninja
26+
shell: pwsh
27+
run: choco install ninja -y
28+
29+
# 3 ─ кэш CUDA
30+
- name: Restore CUDA cache
31+
id: cache-cuda
32+
uses: actions/cache@v4
33+
with:
34+
path: 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9'
35+
key: cuda-12.9.1-win
36+
37+
# 4 ─ установка CUDA 12.9 (если нет кэша)
38+
- name: Install CUDA 12.9.1
39+
if: steps.cache-cuda.outputs.cache-hit != 'true'
40+
shell: pwsh
41+
run: |
42+
$url = 'https://developer.download.nvidia.com/compute/cuda/12.9.1/local_installers/cuda_12.9.1_576.57_windows.exe'
43+
$exe = "$env:RUNNER_TEMP\cuda129.exe"
44+
Invoke-WebRequest -Uri $url -OutFile $exe
45+
Start-Process $exe -ArgumentList '-s' -Wait
46+
47+
# 5 ─ конфигурация + сборка (MSVC host, статический CRT)
48+
- name: Configure & Build
49+
shell: cmd
50+
run: |
51+
rem 1) build dir
52+
mkdir build
53+
54+
rem 2) MSVC + Windows SDK
55+
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
56+
57+
rem 3) Set CUDA environment
58+
set "CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9"
59+
set "PATH=%CUDA_PATH%\bin;%CUDA_PATH%\libnvvp;%PATH%"
60+
61+
rem 4) CMake → Ninja
62+
cd build
63+
cmake .. -G Ninja ^
64+
-DCMAKE_BUILD_TYPE=Release ^
65+
-DCMAKE_TRY_COMPILE_CONFIGURATION=Release ^
66+
-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded ^
67+
-DGGML_CUDA=ON -DSD_CUDA=ON ^
68+
"-DCMAKE_CUDA_ARCHITECTURES=61;75;86;89;120"
69+
70+
rem 5) сборка основного бинарника
71+
cmake --build . --parallel
72+
73+
rem 6) сборка примера-сервера sd-server.exe
74+
cmake --build . --parallel --target sd-server
75+
76+
# 6 ─ проверить что собралось
77+
- name: List build outputs
78+
shell: pwsh
79+
run: |
80+
Write-Host "Build directory contents:"
81+
Get-ChildItem -Recurse build | Where-Object {$_.Extension -eq '.exe'} | ForEach-Object { Write-Host $_.FullName }
82+
83+
# 7 ─ собрать пакет
84+
- name: Collect runtime
85+
shell: pwsh
86+
run: |
87+
$pkg = 'package'
88+
New-Item $pkg -ItemType Directory -Force | Out-Null
89+
90+
# Найти исполняемые файлы в build
91+
$exeFiles = Get-ChildItem -Recurse build -Name "*.exe"
92+
Write-Host "Found executables: $($exeFiles -join ', ')"
93+
94+
foreach ($exe in $exeFiles) {
95+
$srcPath = Join-Path "build" $exe
96+
$fileName = Split-Path $exe -Leaf
97+
Write-Host "Copying $srcPath -> $pkg\$fileName"
98+
Copy-Item $srcPath "$pkg\$fileName"
99+
}
100+
101+
# Копировать CUDA DLL
102+
$cudaPath = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\bin"
103+
if (Test-Path $cudaPath) {
104+
robocopy $cudaPath $pkg `
105+
cudart64_*.dll cublas64_*.dll cublasLt64_*.dll curand64_*.dll
106+
} else {
107+
Write-Warning "CUDA path not found: $cudaPath"
108+
}
109+
exit 0
110+
111+
# 8 ─ zip + artifact
112+
- name: Create zip
113+
shell: pwsh
114+
run: 7z a sd-win-cuda12.9.zip package\*
115+
116+
- name: Upload artifact
117+
uses: actions/upload-artifact@v4
118+
with:
119+
name: sd-win-cuda12.9
120+
path: sd-win-cuda12.9.zip

0 commit comments

Comments
 (0)