paddle_build.bat 33.3 KB
Newer Older
1
@ECHO OFF
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
rem Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
rem
rem Licensed under the Apache License, Version 2.0 (the "License");
rem you may not use this file except in compliance with the License.
rem You may obtain a copy of the License at
rem
rem     http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing, software
rem distributed under the License is distributed on an "AS IS" BASIS,
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rem See the License for the specific language governing permissions and
rem limitations under the License.

rem =================================================
rem       Paddle CI Task On Windows Platform
rem =================================================

20
@ECHO ON
21
setlocal enabledelayedexpansion
22

23
rem -------clean up environment-----------
24
set work_dir=%cd%
Z
Zhou Wei 已提交
25
if not defined cache_dir set cache_dir=%work_dir:Paddle=cache%
26 27 28
if not exist %cache_dir%\tools (
    git clone https://github.com/zhouwei25/tools.git %cache_dir%\tools
)
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
taskkill /f /im cmake.exe /t 2>NUL
taskkill /f /im ninja.exe /t 2>NUL
taskkill /f /im MSBuild.exe /t 2>NUL
taskkill /f /im cl.exe /t 2>NUL
taskkill /f /im lib.exe /t 2>NUL
taskkill /f /im link.exe /t 2>NUL
taskkill /f /im vctip.exe /t 2>NUL
taskkill /f /im cvtres.exe /t 2>NUL
taskkill /f /im rc.exe /t 2>NUL
taskkill /f /im mspdbsrv.exe /t 2>NUL
taskkill /f /im csc.exe /t 2>NUL
taskkill /f /im python.exe /t 2>NUL
taskkill /f /im nvcc.exe /t 2>NUL
taskkill /f /im cicc.exe /t 2>NUL
taskkill /f /im ptxas.exe /t 2>NUL
44
taskkill /f /im eager_generator.exe /t 2>NUL
45
taskkill /f /im eager_legacy_op_function_generator.exe /t 2>NUL
46
wmic process where name="eager_generator.exe" call terminate 2>NUL
47
wmic process where name="eager_legacy_op_function_generator.exe" call terminate 2>NUL
48 49
wmic process where name="cvtres.exe" call terminate 2>NUL
wmic process where name="rc.exe" call terminate 2>NUL
50 51
wmic process where name="cl.exe" call terminate 2>NUL
wmic process where name="lib.exe" call terminate 2>NUL
52
wmic process where name="python.exe" call terminate 2>NUL
53

54
rem variable to control building process
55
if not defined GENERATOR set GENERATOR="Visual Studio 15 2017 Win64"
56
if not defined WITH_TENSORRT set WITH_TENSORRT=ON
57 58
if not defined TENSORRT_ROOT set TENSORRT_ROOT=D:/TensorRT
if not defined WITH_GPU set WITH_GPU=ON
59 60 61
if not defined WITH_MKL set WITH_MKL=ON
if not defined WITH_AVX set WITH_AVX=ON
if not defined WITH_TESTING set WITH_TESTING=ON
62
if not defined MSVC_STATIC_CRT set MSVC_STATIC_CRT=ON
63 64
if not defined WITH_PYTHON set WITH_PYTHON=ON
if not defined ON_INFER set ON_INFER=ON
65
if not defined WITH_ONNXRUNTIME set WITH_ONNXRUNTIME=OFF
66
if not defined WITH_INFERENCE_API_TEST set WITH_INFERENCE_API_TEST=ON
67
if not defined WITH_STATIC_LIB set WITH_STATIC_LIB=ON
68 69 70 71 72 73
if not defined WITH_UNITY_BUILD set WITH_UNITY_BUILD=OFF
if not defined NEW_RELEASE_ALL set NEW_RELEASE_ALL=ON
if not defined NEW_RELEASE_PYPI set NEW_RELEASE_PYPI=OFF
if not defined NEW_RELEASE_JIT set NEW_RELEASE_JIT=OFF

rem variable to control pipeline process
74
if not defined WITH_TPCACHE set WITH_TPCACHE=OFF
75
if not defined WITH_CACHE set WITH_CACHE=OFF
76
if not defined WITH_SCCACHE set WITH_SCCACHE=OFF
77
if not defined INFERENCE_DEMO_INSTALL_DIR set INFERENCE_DEMO_INSTALL_DIR=%cache_dir:\=/%/inference_demo
78
if not defined LOG_LEVEL set LOG_LEVEL=normal
79
if not defined PRECISION_TEST set PRECISION_TEST=OFF
80
if not defined NIGHTLY_MODE set NIGHTLY_MODE=OFF
81
if not defined retry_times set retry_times=1
82
if not defined PYTHON_ROOT set PYTHON_ROOT=C:\Python37
83
if not defined BUILD_DIR set BUILD_DIR=build
84
if not defined TEST_INFERENCE set TEST_INFERENCE=ON
S
Sing_chan 已提交
85

86
set task_name=%1
87
set UPLOAD_TP_FILE=OFF
88

89 90 91
set error_code=0
type %cache_dir%\error_code.txt

92 93 94
rem ------initialize set git config------
git config --global core.longpaths true

95
rem ------initialize the python environment------
96 97 98 99
set PYTHON_VENV_ROOT=%cache_dir%\python_venv
set PYTHON_EXECUTABLE=!PYTHON_VENV_ROOT!\Scripts\python.exe
%PYTHON_ROOT%\python.exe -m venv --clear !PYTHON_VENV_ROOT!
call !PYTHON_VENV_ROOT!\Scripts\activate.bat
zhouweiwei2014's avatar
zhouweiwei2014 已提交
100 101 102 103
if %ERRORLEVEL% NEQ 0 (
    echo activate python virtual environment failed!
    exit /b 5
)
104

105 106 107
if "%WITH_PYTHON%" == "ON" (
    where python
    where pip
108 109 110 111
    pip install wheel
    pip install pyyaml
    pip install wget
    pip install -r %work_dir%\python\requirements.txt
112 113
    if !ERRORLEVEL! NEQ 0 (
        echo pip install requirements.txt failed!
114
        exit /b 5
115 116 117 118
    )
)

rem -------Caching strategy 1: keep build directory for incremental compilation-----------
119 120 121 122 123
if "%WITH_CACHE%"=="OFF" (
    rmdir %BUILD_DIR% /s/q
    goto :mkbuild
)

124 125 126 127 128
rmdir %BUILD_DIR%\python /s/q
rmdir %BUILD_DIR%\paddle_install_dir /s/q
rmdir %BUILD_DIR%\paddle_inference_install_dir /s/q
rmdir %BUILD_DIR%\paddle_inference_c_install_dir /s/q
del %BUILD_DIR%\CMakeCache.txt
129

130
: set /p error_code=< %cache_dir%\error_code.txt
Z
Zhou Wei 已提交
131
if %error_code% NEQ 0 (
132
    rmdir %BUILD_DIR% /s/q
Z
Zhou Wei 已提交
133 134 135
    goto :mkbuild
)

136
setlocal enabledelayedexpansion
Z
Zhou Wei 已提交
137 138 139
git show-ref --verify --quiet refs/heads/last_pr
if %ERRORLEVEL% EQU 0 (
    git diff HEAD last_pr --stat --name-only
140
    git diff HEAD last_pr --stat --name-only | findstr "setup.py.in"
141
    if !ERRORLEVEL! EQU 0 (
142
        rmdir %BUILD_DIR% /s/q
143
    )
Z
Zhou Wei 已提交
144 145 146
    git branch -D last_pr
    git branch last_pr
) else (
147
    rmdir %BUILD_DIR% /s/q
Z
Zhou Wei 已提交
148 149 150
    git branch last_pr
)

151 152 153 154 155 156 157
for /F %%# in ('wmic os get localdatetime^|findstr 20') do set datetime=%%#
set day_now=%datetime:~6,2%
set day_before=-1
set /p day_before=< %cache_dir%\day.txt
if %day_now% NEQ %day_before% (
    echo %day_now% > %cache_dir%\day.txt
    type %cache_dir%\day.txt
158
    rmdir %BUILD_DIR% /s/q
159 160 161
    goto :mkbuild
)

162
:mkbuild
163
if not exist %BUILD_DIR% (
Z
Zhou Wei 已提交
164
    echo Windows build cache FALSE
Z
zhangchunle 已提交
165
    set Windows_Build_Cache=FALSE
166
    mkdir %BUILD_DIR%
Z
Zhou Wei 已提交
167 168
) else (
    echo Windows build cache TRUE
Z
zhangchunle 已提交
169
    set Windows_Build_Cache=TRUE
170
)
Z
zhangchunle 已提交
171
echo ipipe_log_param_Windows_Build_Cache: %Windows_Build_Cache%
172
cd /d %BUILD_DIR%
173
dir .
Z
Zhou Wei 已提交
174
dir %cache_dir%
175 176
rem -------Caching strategy 1: End --------------------------------

177

178
rem -------Caching strategy 2: sccache decorate compiler-----------
179
if not defined SCCACHE_ROOT set SCCACHE_ROOT=D:\sccache
180
set PATH=%SCCACHE_ROOT%;%PATH%
181
if "%WITH_SCCACHE%"=="ON" (
182
    cmd /C sccache -V || call :install_sccache
183

184
    sccache --stop-server 2> NUL
185
    del %SCCACHE_ROOT%\sccache_log.txt
186 187

    :: Localy storage on windows
188 189
    if not exist %SCCACHE_ROOT% mkdir %SCCACHE_ROOT%
    set SCCACHE_DIR=%SCCACHE_ROOT%\.cache
190 191
    
    :: Sccache will shut down if a source file takes more than 10 mins to compile
zhouweiwei2014's avatar
zhouweiwei2014 已提交
192
    set SCCACHE_IDLE_TIMEOUT=0
193
    set SCCACHE_CACHE_SIZE=100G
194
    set SCCACHE_ERROR_LOG=%SCCACHE_ROOT%\sccache_log.txt
195
    set SCCACHE_LOG=quiet
196 197 198 199 200 201 202

    :: Distributed storage on windows
    set SCCACHE_ENDPOINT=s3.bj.bcebos.com
    set SCCACHE_BUCKET=paddle-windows
    set SCCACHE_S3_KEY_PREFIX=sccache/
    set SCCACHE_S3_USE_SSL=true

203 204 205 206
    sccache --start-server
    sccache -z
    goto :CASE_%1
) else (
207
    del %SCCACHE_ROOT%\sccache.exe 2> NUL
208 209
    goto :CASE_%1
)
210

211 212 213 214
:install_sccache
echo There is not sccache in this PC, will install sccache.
echo Download package from https://paddle-ci.gz.bcebos.com/window_requirement/sccache.exe
%PYTHON_ROOT%\python.exe -c "import wget;wget.download('https://paddle-ci.gz.bcebos.com/window_requirement/sccache.exe')"
215
xcopy sccache.exe %SCCACHE_ROOT%\ /Y
216
del sccache.exe
217 218
goto:eof
rem -------Caching strategy 2: End --------------------------------
219 220 221

echo "Usage: paddle_build.bat [OPTION]"
echo "OPTION:"
222 223
echo "wincheck_mkl: run Windows MKL/GPU PR CI tasks on Windows"
echo "wincheck_openbals: run Windows OPENBLAS/CPU PR CI tasks on Windows"
224 225
echo "build_avx_whl: build Windows avx whl package on Windows"
echo "build_no_avx_whl: build Windows no avx whl package on Windows"
226
echo "build_inference_lib: build Windows inference library on Windows"
227 228
exit /b 1

229
rem ------PR CI windows check for MKL/GPU----------
230
:CASE_wincheck_mkl
231
set WITH_MKL=ON
232
set WITH_GPU=ON
233
set WITH_AVX=ON
234
set MSVC_STATIC_CRT=OFF
235
set ON_INFER=ON
S
Sing_chan 已提交
236
set WITH_TENSORRT=ON
237
set WITH_INFERENCE_API_TEST=OFF
238
if not defined CUDA_ARCH_NAME set CUDA_ARCH_NAME=Auto
239

240 241 242
call :cmake || goto cmake_error
call :build || goto build_error
call :test_whl_pacakage || goto test_whl_pacakage_error
243
call :test_unit || goto test_unit_error
244
call :test_inference || goto test_inference_error
245 246
goto:success

247
rem ------PR CI windows check for OPENBLAS/CPU------
248
:CASE_wincheck_openblas
249
set WITH_MKL=OFF
250
set WITH_GPU=OFF
251
set WITH_AVX=OFF
252
set MSVC_STATIC_CRT=ON
253
set ON_INFER=ON
254
if not defined CUDA_ARCH_NAME set CUDA_ARCH_NAME=Auto
255

256 257 258
call :cmake || goto cmake_error
call :build || goto build_error
call :test_whl_pacakage || goto test_whl_pacakage_error
259
call :test_unit || goto test_unit_error
260 261
goto:success

262 263 264 265 266 267 268
rem ------PR CI windows check for unittests and inference in CUDA11-MKL-AVX----------
:CASE_wincheck_inference
set WITH_MKL=ON
set WITH_GPU=ON
set WITH_AVX=ON
set MSVC_STATIC_CRT=ON
set ON_INFER=ON
269 270
set WITH_TENSORRT=ON
set WITH_INFERENCE_API_TEST=ON
271
set WITH_ONNXRUNTIME=ON
272
if not defined CUDA_ARCH_NAME set CUDA_ARCH_NAME=Auto
273 274 275 276

call :cmake || goto cmake_error
call :build || goto build_error
call :test_whl_pacakage || goto test_whl_pacakage_error
277
call :test_unit || goto test_unit_error
278
::call :test_inference || goto test_inference_error
279
::call :test_inference_ut || goto test_inference_ut_error
280
::call :check_change_of_unittest || goto check_change_of_unittest_error
281 282
goto:success

283 284 285
rem ------Build windows avx whl package------
:CASE_build_avx_whl
set WITH_AVX=ON
286
set ON_INFER=ON
287
if not defined CUDA_ARCH_NAME set CUDA_ARCH_NAME=All
288 289 290 291 292 293 294 295 296

call :cmake || goto cmake_error
call :build || goto build_error
call :test_whl_pacakage || goto test_whl_pacakage_error
goto:success

rem ------Build windows no-avx whl package------
:CASE_build_no_avx_whl
set WITH_AVX=OFF
297
set ON_INFER=ON
298
if not defined CUDA_ARCH_NAME set CUDA_ARCH_NAME=All
299 300 301 302 303 304 305 306

call :cmake || goto cmake_error
call :build || goto build_error
call :test_whl_pacakage || goto test_whl_pacakage_error
goto:success

rem ------Build windows inference library------
:CASE_build_inference_lib
307
set ON_INFER=ON
308
set WITH_PYTHON=OFF
309 310
if not defined CUDA_ARCH_NAME set CUDA_ARCH_NAME=All

311 312
python %work_dir%\tools\remove_grad_op_and_kernel.py
if %errorlevel% NEQ 0 exit /b 1
313 314 315

call :cmake || goto cmake_error
call :build || goto build_error
316
if "%TEST_INFERENCE%"=="ON" call :test_inference
317
if %errorlevel% NEQ 0 set error_code=%errorlevel%
318
if "%TEST_INFERENCE%"=="ON" call :test_inference_ut
319 320
if %errorlevel% NEQ 0 set error_code=%errorlevel%

321 322
call :zip_cc_file || goto zip_cc_file_error
call :zip_c_file || goto zip_c_file_error
323
if %error_code% NEQ 0 goto test_inference_error
324 325
goto:success

326 327 328 329
rem "Other configurations are added here"
rem :CASE_wincheck_others
rem call ...

330

331 332
rem ---------------------------------------------------------------------------------------------
:cmake
333
@ECHO OFF
334 335 336
echo    ========================================
echo    Step 1. Cmake ...
echo    ========================================
337

S
Sing_chan 已提交
338 339
rem set vs language to english to block showIncludes, this need vs has installed English language package.
set VSLANG=1033
340
rem Configure the environment for 64-bit builds. 'DISTUTILS_USE_SDK' indicates that the user has selected the compiler.
341 342 343
if not defined vcvars64_dir set vcvars64_dir="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
call %vcvars64_dir%

344
set DISTUTILS_USE_SDK=1
345 346
rem Windows 10 Kit bin dir
set PATH=C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64;%PATH%
347 348
rem Use 64-bit ToolSet to compile
set PreferredToolArchitecture=x64
349

350 351
for /F %%# in ('wmic os get localdatetime^|findstr 20') do set start=%%#
set start=%start:~4,10%
352

353 354 355 356 357 358
if not defined CUDA_TOOLKIT_ROOT_DIR set CUDA_TOOLKIT_ROOT_DIR=C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.2
set PATH=%TENSORRT_ROOT:/=\%\lib;%CUDA_TOOLKIT_ROOT_DIR:/=\%\bin;%CUDA_TOOLKIT_ROOT_DIR:/=\%\libnvvp;%PATH%

rem CUDA_TOOLKIT_ROOT_DIR in cmake must use / rather than \
set TENSORRT_ROOT=%TENSORRT_ROOT:\=/%
set CUDA_TOOLKIT_ROOT_DIR=%CUDA_TOOLKIT_ROOT_DIR:\=/%
359

360 361 362 363 364
rem install ninja if GENERATOR is Ninja
if %GENERATOR% == "Ninja" (
    pip install ninja
    if %errorlevel% NEQ 0 (
        echo pip install ninja failed!
365
        exit /b 5
366 367 368 369 370 371 372
    )
)

rem ------show summary of current GPU environment----------
cmake --version
if "%WITH_GPU%"=="ON" (
    nvcc --version
373
    nvidia-smi 2>NUL
374 375 376
)

rem ------set third_party cache dir------
377

378
if "%WITH_TPCACHE%"=="OFF" (
379
    set THIRD_PARTY_PATH=%work_dir:\=/%/%BUILD_DIR%/third_party
380 381 382
    goto :cmake_impl
)

383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401
rem clear third party cache every ten days
for /F %%# in ('wmic os get localdatetime^|findstr 20') do set datetime=%%#
set day_now=%datetime:~6,2%
set day_before=-1
set /p day_before=< %cache_dir%\day_third_party.txt
if %day_now% NEQ %day_before% (
    echo %day_now% > %cache_dir%\day_third_party.txt
    type %cache_dir%\day_third_party.txt
    if %day_now% EQU 21 (
        rmdir %cache_dir%\third_party /s/q
    )
    if %day_now% EQU 11 (
        rmdir %cache_dir%\third_party /s/q
    )
    if %day_now% EQU 01 (
        rmdir %cache_dir%\third_party /s/q
    )
)

402 403 404 405 406 407 408 409 410
echo set -ex > cache.sh
echo md5_content=$(cat %work_dir:\=/%/cmake/external/*.cmake  ^|md5sum ^| awk '{print $1}') >> cache.sh
echo echo ${md5_content}^>md5.txt >> cache.sh

%cache_dir%\tools\busybox64.exe cat cache.sh
%cache_dir%\tools\busybox64.exe bash cache.sh

set /p md5=< md5.txt
if "%WITH_GPU%"=="ON" (
411
    set cuda_version=%CUDA_TOOLKIT_ROOT_DIR:~-4%
412
    set sub_dir=cuda!cuda_version:.=!
413
) else (
414
    set sub_dir=cpu
415
)
416
set THIRD_PARTY_HOME=%cache_dir:\=/%/third_party/%sub_dir%
417
set THIRD_PARTY_PATH=%THIRD_PARTY_HOME%/%md5%
418

419 420 421 422 423 424 425
echo %task_name%|findstr build >nul && (
    echo %task_name% is a whl-build task, will only reuse local third_party cache.
    goto :cmake_impl
) || ( 
    echo %task_name% is a PR-CI-Windows task, will try to reuse bos and local third_party cache both. 
)

426 427 428 429
if not exist %THIRD_PARTY_PATH% (
    echo There is no usable third_party cache in %THIRD_PARTY_PATH%, will download from bos.
    pip install wget
    if not exist %THIRD_PARTY_HOME% mkdir "%THIRD_PARTY_HOME%"
430
    cd /d %THIRD_PARTY_HOME%
431 432 433 434 435 436
    echo Getting third party: downloading ...
    %PYTHON_ROOT%\python.exe -c "import wget;wget.download('https://paddle-windows.bj.bcebos.com/third_party/%sub_dir%/%md5%.tar.gz')" 2>nul
    if !ERRORLEVEL! EQU 0 (
        echo Getting third party: extracting ...
        tar -xf %md5%.tar.gz
        if !ERRORLEVEL! EQU 0 ( 
437
            echo Get third party from bos successfully.
438
        ) else (
439
            echo Get third party failed, reason: extract failed, will build locally.
440 441 442
        )
        del %md5%.tar.gz
    ) else (
443
        echo Get third party failed, reason: download failed, will build locally.
444
    )
445
    if not exist %THIRD_PARTY_PATH% set UPLOAD_TP_FILE=ON
446
    cd /d %work_dir%\%BUILD_DIR%
447
) else (
448
    echo Found reusable third_party cache in %THIRD_PARTY_PATH%, will reuse it.
449
)
450 451

:cmake_impl
452
echo cmake .. -G %GENERATOR% -DCMAKE_BUILD_TYPE=Release -DWITH_AVX=%WITH_AVX% -DWITH_GPU=%WITH_GPU% -DWITH_MKL=%WITH_MKL% ^
453
-DWITH_TESTING=%WITH_TESTING% -DWITH_PYTHON=%WITH_PYTHON% -DPYTHON_EXECUTABLE=%PYTHON_EXECUTABLE% -DON_INFER=%ON_INFER% ^
454
-DWITH_INFERENCE_API_TEST=%WITH_INFERENCE_API_TEST% -DTHIRD_PARTY_PATH=%THIRD_PARTY_PATH% ^
455
-DINFERENCE_DEMO_INSTALL_DIR=%INFERENCE_DEMO_INSTALL_DIR% -DWITH_STATIC_LIB=%WITH_STATIC_LIB% ^
456
-DWITH_TENSORRT=%WITH_TENSORRT% -DTENSORRT_ROOT="%TENSORRT_ROOT%" -DMSVC_STATIC_CRT=%MSVC_STATIC_CRT% ^
457
-DWITH_UNITY_BUILD=%WITH_UNITY_BUILD% -DCUDA_ARCH_NAME=%CUDA_ARCH_NAME% -DCUDA_ARCH_BIN=%CUDA_ARCH_BIN% -DCUB_PATH=%THIRD_PARTY_HOME%/cub ^
S
Sing_chan 已提交
458
-DCUDA_TOOLKIT_ROOT_DIR="%CUDA_TOOLKIT_ROOT_DIR%" -DNEW_RELEASE_ALL=%NEW_RELEASE_ALL% -DNEW_RELEASE_PYPI=%NEW_RELEASE_PYPI% ^
459
-DNEW_RELEASE_JIT=%NEW_RELEASE_JIT% -DWITH_ONNXRUNTIME=%WITH_ONNXRUNTIME%
460

461
cmake .. -G %GENERATOR% -DCMAKE_BUILD_TYPE=Release -DWITH_AVX=%WITH_AVX% -DWITH_GPU=%WITH_GPU% -DWITH_MKL=%WITH_MKL% ^
462
-DWITH_TESTING=%WITH_TESTING% -DWITH_PYTHON=%WITH_PYTHON% -DPYTHON_EXECUTABLE=%PYTHON_EXECUTABLE% -DON_INFER=%ON_INFER% ^
463
-DWITH_INFERENCE_API_TEST=%WITH_INFERENCE_API_TEST% -DTHIRD_PARTY_PATH=%THIRD_PARTY_PATH% ^
464
-DINFERENCE_DEMO_INSTALL_DIR=%INFERENCE_DEMO_INSTALL_DIR% -DWITH_STATIC_LIB=%WITH_STATIC_LIB% ^
465
-DWITH_TENSORRT=%WITH_TENSORRT% -DTENSORRT_ROOT="%TENSORRT_ROOT%" -DMSVC_STATIC_CRT=%MSVC_STATIC_CRT% ^
466
-DWITH_UNITY_BUILD=%WITH_UNITY_BUILD% -DCUDA_ARCH_NAME=%CUDA_ARCH_NAME% -DCUDA_ARCH_BIN=%CUDA_ARCH_BIN% -DCUB_PATH=%THIRD_PARTY_HOME%/cub ^
S
Sing_chan 已提交
467
-DCUDA_TOOLKIT_ROOT_DIR="%CUDA_TOOLKIT_ROOT_DIR%" -DNEW_RELEASE_ALL=%NEW_RELEASE_ALL% -DNEW_RELEASE_PYPI=%NEW_RELEASE_PYPI% ^
468
-DNEW_RELEASE_JIT=%NEW_RELEASE_JIT% -DWITH_ONNXRUNTIME=%WITH_ONNXRUNTIME%
469 470 471
goto:eof

:cmake_error
Z
Zhou Wei 已提交
472
echo 7 > %cache_dir%\error_code.txt
473
type %cache_dir%\error_code.txt
474
echo Cmake failed, will exit!
Z
Zhou Wei 已提交
475
exit /b 7
476 477 478

rem ---------------------------------------------------------------------------------------------
:build
479
@ECHO OFF
480
echo    ========================================
481
echo    Step 2. Build Paddle ...
482 483
echo    ========================================

484
for /F %%# in ('wmic cpu get NumberOfLogicalProcessors^|findstr [0-9]') do set /a PARALLEL_PROJECT_COUNT=%%#*4/5
485
echo "PARALLEL PROJECT COUNT is %PARALLEL_PROJECT_COUNT%"
486

487
set build_times=1
488 489 490 491 492 493 494
rem MSbuild will build third_party first to improve compiler stability.
if NOT %GENERATOR% == "Ninja" (
    goto :build_tp
) else (
    goto :build_paddle
)

495
:build_tp
496
echo Build third_party the %build_times% time:
497 498 499
if %GENERATOR% == "Ninja" (
    ninja third_party
) else (
500
    MSBuild /m /p:PreferredToolArchitecture=x64 /p:Configuration=Release /verbosity:%LOG_LEVEL% third_party.vcxproj
501
)
502

503 504
if %ERRORLEVEL% NEQ 0 (
    set /a build_times=%build_times%+1  
505
    if %build_times% GEQ %retry_times% (
Z
Zhou Wei 已提交
506
        exit /b 7
507
    ) else (
508
        echo Build third_party failed, will retry!
509 510 511
        goto :build_tp
    )
)
512
echo Build third_party successfully!
513 514

set build_times=1
515

516
:build_paddle
L
LoveAn 已提交
517
:: reset clcache zero stats for collect PR's actual hit rate
518
rem clcache.exe -z
L
LoveAn 已提交
519

520
rem -------clean up environment again-----------
521 522 523 524 525 526 527 528 529 530 531 532 533
taskkill /f /im cmake.exe /t 2>NUL
taskkill /f /im MSBuild.exe /t 2>NUL
taskkill /f /im cl.exe /t 2>NUL
taskkill /f /im lib.exe /t 2>NUL
taskkill /f /im link.exe /t 2>NUL
taskkill /f /im vctip.exe /t 2>NUL
taskkill /f /im cvtres.exe /t 2>NUL
taskkill /f /im rc.exe /t 2>NUL
taskkill /f /im mspdbsrv.exe /t 2>NUL
taskkill /f /im csc.exe /t 2>NUL
taskkill /f /im nvcc.exe /t 2>NUL
taskkill /f /im cicc.exe /t 2>NUL
taskkill /f /im ptxas.exe /t 2>NUL
534
taskkill /f /im eager_generator.exe /t 2>NUL
535
taskkill /f /im eager_legacy_op_function_generator.exe /t 2>NUL
536
wmic process where name="eager_generator.exe" call terminate 2>NUL
537
wmic process where name="eager_legacy_op_function_generator.exe" call terminate 2>NUL
538
wmic process where name="cmake.exe" call terminate 2>NUL
539 540
wmic process where name="cvtres.exe" call terminate 2>NUL
wmic process where name="rc.exe" call terminate 2>NUL
541 542
wmic process where name="cl.exe" call terminate 2>NUL
wmic process where name="lib.exe" call terminate 2>NUL
543

544
if "%WITH_TESTING%"=="ON" (
545
    for /F "tokens=1 delims= " %%# in ('tasklist ^| findstr /i test') do taskkill /f /im %%# /t
546 547
)

548
echo Build Paddle the %build_times% time:
549
if %GENERATOR% == "Ninja" (
550
    ninja all
551
) else (
552
    MSBuild /m:%PARALLEL_PROJECT_COUNT% /p:PreferredToolArchitecture=x64 /p:TrackFileAccess=false /p:Configuration=Release /verbosity:%LOG_LEVEL% ALL_BUILD.vcxproj
553 554
)

555
if %ERRORLEVEL% NEQ 0 (
556
    set /a build_times=%build_times%+1
557
    if %build_times% GEQ %retry_times% (
Z
Zhou Wei 已提交
558
        exit /b 7
559
    ) else (
560
        echo Build Paddle failed, will retry!
561 562 563
        goto :build_paddle
    )
)
564

565 566
if "%UPLOAD_TP_FILE%"=="ON" (
    set BCE_FILE=%cache_dir%\bce-python-sdk-0.8.33\BosClient.py
567 568 569
    echo Uploading third_party: checking bce ...
    if not exist %cache_dir%\bce-python-sdk-0.8.33 (
        echo There is no bce in this PC, will install bce.
570
        cd /d %cache_dir%
571 572 573
        echo Download package from https://paddle-windows.bj.bcebos.com/bce-python-sdk-0.8.33.tar.gz
        %PYTHON_ROOT%\python.exe -c "import wget;wget.download('https://paddle-windows.bj.bcebos.com/bce-python-sdk-0.8.33.tar.gz')"
        %PYTHON_ROOT%\python.exe -c "import shutil;shutil.unpack_archive('bce-python-sdk-0.8.33.tar.gz', extract_dir='./',format='gztar')"
574
        cd /d %cache_dir%\bce-python-sdk-0.8.33
575 576 577 578
        %PYTHON_ROOT%\python.exe setup.py install 1>nul
        del %cache_dir%\bce-python-sdk-0.8.33.tar.gz
    )
    if !errorlevel! EQU 0 (
579
        cd /d %THIRD_PARTY_HOME%
580 581 582 583
        echo Uploading third_party: compressing ...
        tar -zcf %md5%.tar.gz %md5%
        if !errorlevel! EQU 0 (
            echo Uploading third_party: uploading ...
584
            %PYTHON_ROOT%\python.exe !BCE_FILE! %md5%.tar.gz paddle-windows/third_party/%sub_dir% 1>nul
585
            if !errorlevel! EQU 0 (
586
                echo Upload third party %md5% to bos paddle-windows/third_party/%sub_dir% successfully.
587
            ) else (
588
                echo Failed upload third party to bos, reason: upload failed.
589 590
            )
        ) else (
591
            echo Failed upload third party to bos, reason: compress failed.
592 593 594
        )
        del %md5%.tar.gz
    ) else (
595
        echo Failed upload third party to bos, reason: install bce failed.
596
    )
597
    cd /d %work_dir%\%BUILD_DIR%
598 599
)

600
echo Build Paddle successfully!
Z
Zhou Wei 已提交
601 602
echo 0 > %cache_dir%\error_code.txt
type %cache_dir%\error_code.txt
603

604
:: ci will collect sccache hit rate
605 606 607
if "%WITH_SCCACHE%"=="ON" (
    call :collect_sccache_hits
)
608

609 610 611
goto:eof

:build_error
Z
Zhou Wei 已提交
612
echo 7 > %cache_dir%\error_code.txt
613
type %cache_dir%\error_code.txt
614
echo Build Paddle failed, will exit!
615
exit /b 7
616 617 618

rem ---------------------------------------------------------------------------------------------
:test_whl_pacakage
619
@ECHO OFF
620 621 622
echo    ========================================
echo    Step 3. Test pip install whl package ...
echo    ========================================
623

624 625
setlocal enabledelayedexpansion

626 627 628
for /F %%# in ('wmic os get localdatetime^|findstr 20') do set end=%%#
set end=%end:~4,10%
call :timestamp "%start%" "%end%" "Build"
629

630 631 632 633
%cache_dir%\tools\busybox64.exe du -h -d 0 %cd%\paddle\fluid\pybind\libpaddle.dll > paddle_dll_size.txt
set /p paddledllsize=< paddle_dll_size.txt
for /F %%i in ("%paddledllsize%") do echo "Windows libpaddle.dll Size: %%i"

634 635 636
%cache_dir%\tools\busybox64.exe du -h -d 0 %cd%\python\dist > whl_size.txt
set /p whlsize=< whl_size.txt
for /F %%i in ("%whlsize%") do echo "Windows PR whl Size: %%i"
Z
zhangchunle 已提交
637
for /F %%i in ("%whlsize%") do echo ipipe_log_param_Windows_PR_whl_Size: %%i
638

639 640
dir /s /b python\dist\*.whl > whl_file.txt
set /p PADDLE_WHL_FILE_WIN=< whl_file.txt
641

Z
Zhou Wei 已提交
642
@ECHO ON
Z
Zhou Wei 已提交
643 644
pip uninstall -y paddlepaddle
pip uninstall -y paddlepaddle-gpu
645
pip install %PADDLE_WHL_FILE_WIN%
Z
Zhou Wei 已提交
646 647
if %ERRORLEVEL% NEQ 0 (
    echo pip install whl package failed!
Z
Zhou Wei 已提交
648
    exit /b 1
Z
Zhou Wei 已提交
649
)
650

651
set CUDA_VISIBLE_DEVICES=0
Z
Zhou Wei 已提交
652
python %work_dir%\paddle\scripts\installation_validate.py
653 654 655
goto:eof

:test_whl_pacakage_error
656 657
::echo 1 > %cache_dir%\error_code.txt
::type %cache_dir%\error_code.txt
Z
Zhou Wei 已提交
658
echo Test import paddle failed, will exit!
Z
Zhou Wei 已提交
659
exit /b 1
660 661

rem ---------------------------------------------------------------------------------------------
662
:test_unit
Z
Zhou Wei 已提交
663
@ECHO ON
664 665 666
echo    ========================================
echo    Step 4. Running unit tests ...
echo    ========================================
667

668
pip install requests
669
pip install -r %work_dir%\python\unittest_py\requirements.txt
670 671
if %ERRORLEVEL% NEQ 0 (
    echo pip install unittest requirements.txt failed!
672
    exit /b 5
673 674
)

675 676
for /F %%# in ('wmic os get localdatetime^|findstr 20') do set start=%%#
set start=%start:~4,10%
Z
Zhou Wei 已提交
677

678
set FLAGS_call_stack_level=2
679 680 681 682 683 684
dir %THIRD_PARTY_PATH:/=\%\install\openblas\lib
dir %THIRD_PARTY_PATH:/=\%\install\openblas\bin
dir %THIRD_PARTY_PATH:/=\%\install\zlib\bin
dir %THIRD_PARTY_PATH:/=\%\install\mklml\lib
dir %THIRD_PARTY_PATH:/=\%\install\mkldnn\bin
dir %THIRD_PARTY_PATH:/=\%\install\warpctc\bin
685
dir %THIRD_PARTY_PATH:/=\%\install\onnxruntime\lib
Y
YUNSHEN XIE 已提交
686

687 688
set PATH=%THIRD_PARTY_PATH:/=\%\install\openblas\lib;%THIRD_PARTY_PATH:/=\%\install\openblas\bin;^
%THIRD_PARTY_PATH:/=\%\install\zlib\bin;%THIRD_PARTY_PATH:/=\%\install\mklml\lib;^
689 690
%THIRD_PARTY_PATH:/=\%\install\mkldnn\bin;%THIRD_PARTY_PATH:/=\%\install\warpctc\bin;^
%THIRD_PARTY_PATH:/=\%\install\onnxruntime\lib;%THIRD_PARTY_PATH:/=\%\install\paddle2onnx\lib;^
691 692
%work_dir%\%BUILD_DIR%\paddle\fluid\inference;%work_dir%\%BUILD_DIR%\paddle\fluid\inference\capi_exp;^
%PATH%
693 694

REM TODO: make ut find .dll in install\onnxruntime\lib
695 696 697
if "%WITH_ONNXRUNTIME%"=="ON" (
    xcopy %THIRD_PARTY_PATH:/=\%\install\onnxruntime\lib\onnxruntime.dll %work_dir%\%BUILD_DIR%\paddle\fluid\inference\tests\api\ /Y
)
698 699

if "%WITH_GPU%"=="ON" (
700
    call:parallel_test_base_gpu
701
) else (
702 703 704 705 706 707 708 709 710 711 712 713 714 715
    call:parallel_test_base_cpu
)

set error_code=%ERRORLEVEL%

for /F %%# in ('wmic os get localdatetime^|findstr 20') do set end=%%#
set end=%end:~4,10%
call :timestamp "%start%" "%end%" "1 card TestCases Total"
call :timestamp "%start%" "%end%" "TestCases Total"

if %error_code% NEQ 0 (
    exit /b 8
) else ( 
    goto:eof 
716 717 718 719
)

:parallel_test_base_gpu
echo    ========================================
720
echo    Running GPU unit tests in parallel way ...
721 722
echo    ========================================

Z
Zhou Wei 已提交
723 724 725 726 727 728 729
setlocal enabledelayedexpansion

:: set PATH=C:\Windows\System32;C:\Program Files\NVIDIA Corporation\NVSMI;%PATH%
:: cmd /C nvidia-smi -L
:: if %errorlevel% NEQ 0 exit /b 8
:: for /F %%# in ('cmd /C nvidia-smi -L ^|find "GPU" /C') do set CUDA_DEVICE_COUNT=%%#
set CUDA_DEVICE_COUNT=1
Y
YUNSHEN XIE 已提交
730

W
Wilber 已提交
731 732
:: For hypothesis tests(mkldnn op and inference pass), we set use 'ci' profile
set HYPOTHESIS_TEST_PROFILE=ci
Y
YUNSHEN XIE 已提交
733 734 735 736 737
echo cmake .. -G %GENERATOR% -DCMAKE_BUILD_TYPE=Release -DWITH_AVX=%WITH_AVX% -DWITH_GPU=%WITH_GPU% -DWITH_MKL=%WITH_MKL% ^
-DWITH_TESTING=%WITH_TESTING% -DWITH_PYTHON=%WITH_PYTHON% -DON_INFER=%ON_INFER% ^
-DWITH_INFERENCE_API_TEST=%WITH_INFERENCE_API_TEST% -DTHIRD_PARTY_PATH=%THIRD_PARTY_PATH% ^
-DINFERENCE_DEMO_INSTALL_DIR=%INFERENCE_DEMO_INSTALL_DIR% -DWITH_STATIC_LIB=%WITH_STATIC_LIB% ^
-DWITH_TENSORRT=%WITH_TENSORRT% -DTENSORRT_ROOT="%TENSORRT_ROOT%" -DMSVC_STATIC_CRT=%MSVC_STATIC_CRT% ^
738
-DWITH_UNITY_BUILD=%WITH_UNITY_BUILD% -DCUDA_ARCH_NAME=%CUDA_ARCH_NAME% -DCUB_PATH=%THIRD_PARTY_HOME%/cub ^
S
Sing_chan 已提交
739 740
-DCUDA_TOOLKIT_ROOT_DIR="%CUDA_TOOLKIT_ROOT_DIR%" -DNEW_RELEASE_ALL=%NEW_RELEASE_ALL% -DNEW_RELEASE_PYPI=%NEW_RELEASE_PYPI% ^
-DNEW_RELEASE_JIT=%NEW_RELEASE_JIT% >> %work_dir%\win_cmake.sh
741

742
%cache_dir%\tools\busybox64.exe bash %work_dir%\tools\windows\run_unittests.sh %NIGHTLY_MODE% %PRECISION_TEST% %WITH_GPU%
Z
Zhou Wei 已提交
743

744 745 746 747 748 749
goto:eof

:parallel_test_base_cpu
echo    ========================================
echo    Running CPU unit tests in parallel way ...
echo    ========================================
750

W
Wilber 已提交
751 752
:: For hypothesis tests(mkldnn op and inference pass), we set use 'ci' profile
set HYPOTHESIS_TEST_PROFILE=ci
753
%cache_dir%\tools\busybox64.exe bash %work_dir%\tools\windows\run_unittests.sh %NIGHTLY_MODE% %PRECISION_TEST% %WITH_GPU%
754

755 756
goto:eof

757
:test_unit_error
758 759
:: echo 8 > %cache_dir%\error_code.txt
:: type %cache_dir%\error_code.txt
760
echo Running unit tests failed, will exit!
761
exit /b 8
762 763 764

rem ---------------------------------------------------------------------------------------------
:test_inference
765
@ECHO OFF
766 767 768
echo    ========================================
echo    Step 5. Testing fluid library for inference ...
echo    ========================================
769

zhouweiwei2014's avatar
zhouweiwei2014 已提交
770
tree /F %cd%\paddle_inference_install_dir\paddle
771
%cache_dir%\tools\busybox64.exe du -h -d 0 %cd%\paddle_inference_install_dir > lib_size.txt
zhouweiwei2014's avatar
zhouweiwei2014 已提交
772
set /p libsize=< lib_size.txt
773 774
for /F %%i in ("%libsize%") do echo "Windows Paddle_Inference Size: !libsize_m!M"
for /F %%i in ("%libsize%") do echo ipipe_log_param_Windows_Paddle_Inference_Size: !libsize_m!M
zhouweiwei2014's avatar
zhouweiwei2014 已提交
775

776
cd /d %work_dir%\paddle\fluid\inference\api\demo_ci
777
%cache_dir%\tools\busybox64.exe bash run.sh %work_dir:\=/% %WITH_MKL% %WITH_GPU% %cache_dir:\=/%/inference_demo %WITH_TENSORRT% %TENSORRT_ROOT% %WITH_ONNXRUNTIME% %MSVC_STATIC_CRT% "%CUDA_TOOLKIT_ROOT_DIR%"
778

779 780 781
goto:eof

:test_inference_error
782 783
::echo 1 > %cache_dir%\error_code.txt
::type %cache_dir%\error_code.txt
784 785 786
echo    ==========================================
echo    Testing inference library failed!
echo    ==========================================
Z
Zhou Wei 已提交
787
exit /b 1
788 789 790

rem ---------------------------------------------------------------------------------------------
:check_change_of_unittest
791
@ECHO OFF
792 793 794 795
echo    ========================================
echo    Step 6. Check whether deleting a unit test ...
echo    ========================================

796 797
%cache_dir%\tools\busybox64.exe bash %work_dir%\tools\windows\check_change_of_unittest.sh

798 799 800
goto:eof

:check_change_of_unittest_error
Z
Zhou Wei 已提交
801
exit /b 1
802

803 804 805 806 807 808 809
rem ---------------------------------------------------------------------------------------------
:test_inference_ut
@ECHO OFF
echo    ========================================
echo    Step 7. Testing fluid library with infer_ut for inference ...
echo    ========================================

810
cd /d %work_dir%\paddle\fluid\inference\tests\infer_ut
811
%cache_dir%\tools\busybox64.exe bash run.sh %work_dir:\=/% %WITH_MKL% %WITH_GPU% %cache_dir:\=/%/inference_demo %TENSORRT_ROOT% %WITH_ONNXRUNTIME% %MSVC_STATIC_CRT% "%CUDA_TOOLKIT_ROOT_DIR%"
812 813 814 815 816 817 818 819
goto:eof

:test_inference_ut_error
::echo 1 > %cache_dir%\error_code.txt
::type %cache_dir%\error_code.txt
echo Testing fluid library with infer_ut for inference failed!
exit /b 1

820
rem ---------------------------------------------------------------------------------------------
821
:zip_cc_file
822
cd /d %work_dir%\%BUILD_DIR%
823 824 825 826 827 828 829
tree /F %cd%\paddle_inference_install_dir\paddle
if exist paddle_inference.zip del paddle_inference.zip
python -c "import shutil;shutil.make_archive('paddle_inference', 'zip', root_dir='paddle_inference_install_dir')"
%cache_dir%\tools\busybox64.exe du -h -k paddle_inference.zip > lib_size.txt
set /p libsize=< lib_size.txt
for /F %%i in ("%libsize%") do (
    set /a libsize_m=%%i/1024
830
    echo "Windows Paddle_Inference ZIP Size: !libsize_m!M"
831 832 833
)
goto:eof

834
:zip_cc_file_error
835 836
echo Tar inference library failed!
exit /b 1
837

838 839
rem ---------------------------------------------------------------------------------------------
:zip_c_file
840
cd /d %work_dir%\%BUILD_DIR%
841 842 843 844 845 846 847 848 849 850 851 852 853 854 855
tree /F %cd%\paddle_inference_c_install_dir\paddle
if exist paddle_inference_c.zip del paddle_inference_c.zip
python -c "import shutil;shutil.make_archive('paddle_inference_c', 'zip', root_dir='paddle_inference_c_install_dir')"
%cache_dir%\tools\busybox64.exe du -h -k paddle_inference_c.zip > lib_size.txt
set /p libsize=< lib_size.txt
for /F %%i in ("%libsize%") do (
    set /a libsize_m=%%i/1024
    echo "Windows Paddle_Inference CAPI ZIP Size: !libsize_m!M"
)
goto:eof

:zip_c_file_error
echo Tar inference capi library failed!
exit /b 1

856 857
:timestamp
setlocal enabledelayedexpansion
858
@ECHO OFF
859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889
set start=%~1
set dd=%start:~2,2%
set /a dd=100%dd%%%100
set hh=%start:~4,2%
set /a hh=100%hh%%%100
set nn=%start:~6,2%
set /a nn=100%nn%%%100
set ss=%start:~8,2%
set /a ss=100%ss%%%100
set /a start_sec=dd*86400+hh*3600+nn*60+ss
echo %start_sec%

set end=%~2
set dd=%end:~2,2%
set /a dd=100%dd%%%100
if %start:~0,2% NEQ %end:~0,2% (
    set month_day=0
    for %%i in (01 03 05 07 08 10 12) DO if %%i EQU %start:~0,2% set month_day=31
    for %%i in (04 06 09 11) DO if %%i EQU %start:~0,2% set month_day=30
    for %%i in (02) DO if %%i EQU %start:~0,2% set month_day=28
    set /a dd=%dd%+!month_day!
)
set hh=%end:~4,2%
set /a hh=100%hh%%%100
set nn=%end:~6,2%
set /a nn=100%nn%%%100
set ss=%end:~8,2%
set /a ss=100%ss%%%100
set /a end_secs=dd*86400+hh*3600+nn*60+ss
set /a cost_secs=end_secs-start_sec
echo "Windows %~3 Time: %cost_secs%s"
890
set tempTaskName=%~3
Z
zhangchunle 已提交
891
echo ipipe_log_param_Windows_%tempTaskName: =_%_Time: %cost_secs%s
892 893 894
goto:eof


895 896 897 898 899 900 901 902 903
:collect_sccache_hits
sccache -s > sccache_summary.txt
echo    ========================================
echo    sccache statistical summary ...
echo    ========================================
type sccache_summary.txt
for /f "tokens=2,3" %%i in ('type sccache_summary.txt ^| findstr "requests hits" ^| findstr /V "executed C/C++ CUDA"') do set %%i=%%j
if %requests% EQU 0 (
    echo "sccache hit rate: 0%"
904
    echo ipipe_log_param_sccache_Hit_Hate: 0%
L
LoveAn 已提交
905
) else (
906 907
    set /a rate=!hits!*10000/!requests!
    echo "sccache hit rate: !rate:~0,-2!.!rate:~-2!%%"
908
    echo ipipe_log_param_sccache_Hit_Hate: !rate:~0,-2!.!rate:~-2!%%
L
LoveAn 已提交
909
)
910

L
LoveAn 已提交
911 912 913
goto:eof


914 915 916 917 918
rem ---------------------------------------------------------------------------------------------
:success
echo    ========================================
echo    Clean up environment  at the end ...
echo    ========================================
919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935
taskkill /f /im cmake.exe /t 2>NUL
taskkill /f /im ninja.exe /t 2>NUL
taskkill /f /im MSBuild.exe /t 2>NUL
taskkill /f /im git.exe /t 2>NUL
taskkill /f /im cl.exe /t 2>NUL
taskkill /f /im lib.exe /t 2>NUL
taskkill /f /im link.exe /t 2>NUL
taskkill /f /im git-remote-https.exe /t 2>NUL
taskkill /f /im vctip.exe /t 2>NUL
taskkill /f /im cvtres.exe /t 2>NUL
taskkill /f /im rc.exe /t 2>NUL
taskkill /f /im mspdbsrv.exe /t 2>NUL
taskkill /f /im csc.exe /t 2>NUL
taskkill /f /im python.exe /t 2>NUL
taskkill /f /im nvcc.exe /t 2>NUL
taskkill /f /im cicc.exe /t 2>NUL
taskkill /f /im ptxas.exe /t 2>NUL
936
taskkill /f /im eager_generator.exe /t 2>NUL
937
taskkill /f /im eager_legacy_op_function_generator.exe /t 2>NUL
938
wmic process where name="eager_generator.exe" call terminate 2>NUL
939
wmic process where name="eager_legacy_op_function_generator.exe" call terminate 2>NUL
940
wmic process where name="cvtres.exe" call terminate 2>NUL
941
wmic process where name="rc.exe" call terminate 2>NUL
942 943
wmic process where name="cl.exe" call terminate 2>NUL
wmic process where name="lib.exe" call terminate 2>NUL
944
wmic process where name="python.exe" call terminate 2>NUL
945
if "%WITH_TESTING%"=="ON" (
946
    for /F "tokens=1 delims= " %%# in ('tasklist ^| findstr /i test') do taskkill /f /im %%# /t
947
)
948 949 950 951
echo Windows CI run successfully!
exit /b 0

ENDLOCAL