paddle_build.bat 33.0 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% -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% -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
%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 已提交
633
for /F %%i in ("%whlsize%") do echo ipipe_log_param_Windows_PR_whl_Size: %%i
634

635 636
dir /s /b python\dist\*.whl > whl_file.txt
set /p PADDLE_WHL_FILE_WIN=< whl_file.txt
637

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

647
set CUDA_VISIBLE_DEVICES=0
Z
Zhou Wei 已提交
648
python %work_dir%\paddle\scripts\installation_validate.py
649 650 651
goto:eof

:test_whl_pacakage_error
652 653
::echo 1 > %cache_dir%\error_code.txt
::type %cache_dir%\error_code.txt
Z
Zhou Wei 已提交
654
echo Test import paddle failed, will exit!
Z
Zhou Wei 已提交
655
exit /b 1
656 657

rem ---------------------------------------------------------------------------------------------
658
:test_unit
Z
Zhou Wei 已提交
659
@ECHO ON
660 661 662
echo    ========================================
echo    Step 4. Running unit tests ...
echo    ========================================
663

664
pip install requests
665
pip install -r %work_dir%\python\unittest_py\requirements.txt
666 667
if %ERRORLEVEL% NEQ 0 (
    echo pip install unittest requirements.txt failed!
668
    exit /b 5
669 670
)

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

674
set FLAGS_call_stack_level=2
675 676 677 678 679 680
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
681
dir %THIRD_PARTY_PATH:/=\%\install\onnxruntime\lib
Y
YUNSHEN XIE 已提交
682

683 684
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;^
685 686
%THIRD_PARTY_PATH:/=\%\install\mkldnn\bin;%THIRD_PARTY_PATH:/=\%\install\warpctc\bin;^
%THIRD_PARTY_PATH:/=\%\install\onnxruntime\lib;%THIRD_PARTY_PATH:/=\%\install\paddle2onnx\lib;^
687 688
%work_dir%\%BUILD_DIR%\paddle\fluid\inference;%work_dir%\%BUILD_DIR%\paddle\fluid\inference\capi_exp;^
%PATH%
689 690

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

if "%WITH_GPU%"=="ON" (
696
    call:parallel_test_base_gpu
697
) else (
698 699 700 701 702 703 704 705 706 707 708 709 710 711
    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 
712 713 714 715
)

:parallel_test_base_gpu
echo    ========================================
716
echo    Running GPU unit tests in parallel way ...
717 718
echo    ========================================

Z
Zhou Wei 已提交
719 720 721 722 723 724 725
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 已提交
726

W
Wilber 已提交
727 728
:: For hypothesis tests(mkldnn op and inference pass), we set use 'ci' profile
set HYPOTHESIS_TEST_PROFILE=ci
Y
YUNSHEN XIE 已提交
729 730 731 732 733
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% ^
734
-DWITH_UNITY_BUILD=%WITH_UNITY_BUILD% -DCUDA_ARCH_NAME=%CUDA_ARCH_NAME% -DCUB_PATH=%THIRD_PARTY_HOME%/cub ^
S
Sing_chan 已提交
735 736
-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
737

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

740 741 742 743 744 745
goto:eof

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

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

751 752
goto:eof

753
:test_unit_error
754 755
:: echo 8 > %cache_dir%\error_code.txt
:: type %cache_dir%\error_code.txt
756
echo Running unit tests failed, will exit!
757
exit /b 8
758 759 760

rem ---------------------------------------------------------------------------------------------
:test_inference
761
@ECHO OFF
762 763 764
echo    ========================================
echo    Step 5. Testing fluid library for inference ...
echo    ========================================
765

zhouweiwei2014's avatar
zhouweiwei2014 已提交
766 767 768 769 770 771 772 773 774
tree /F %cd%\paddle_inference_install_dir\paddle
%cache_dir%\tools\busybox64.exe du -h -d 0 -k %cd%\paddle_inference_install_dir\paddle\lib > 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 Size: !libsize_m!M"
    echo ipipe_log_param_Windows_Paddle_Inference_Size: !libsize_m!M
)

775
cd /d %work_dir%\paddle\fluid\inference\api\demo_ci
776
%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%"
777

778 779 780
goto:eof

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

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

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

797 798 799
goto:eof

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

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

809
cd /d %work_dir%\paddle\fluid\inference\tests\infer_ut
810
%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%"
811 812 813 814 815 816 817 818
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

819
rem ---------------------------------------------------------------------------------------------
820
:zip_cc_file
821
cd /d %work_dir%\%BUILD_DIR%
822 823 824 825 826 827 828
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
829
    echo "Windows Paddle_Inference ZIP Size: !libsize_m!M"
830 831 832
)
goto:eof

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

837 838
rem ---------------------------------------------------------------------------------------------
:zip_c_file
839
cd /d %work_dir%\%BUILD_DIR%
840 841 842 843 844 845 846 847 848 849 850 851 852 853 854
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

855 856
:timestamp
setlocal enabledelayedexpansion
857
@ECHO OFF
858 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
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"
889
set tempTaskName=%~3
Z
zhangchunle 已提交
890
echo ipipe_log_param_Windows_%tempTaskName: =_%_Time: %cost_secs%s
891 892 893
goto:eof


894 895 896 897 898 899 900 901 902
: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%"
903
    echo ipipe_log_param_sccache_Hit_Hate: 0%
L
LoveAn 已提交
904
) else (
905 906
    set /a rate=!hits!*10000/!requests!
    echo "sccache hit rate: !rate:~0,-2!.!rate:~-2!%%"
907
    echo ipipe_log_param_sccache_Hit_Hate: !rate:~0,-2!.!rate:~-2!%%
L
LoveAn 已提交
908
)
909

L
LoveAn 已提交
910 911 912
goto:eof


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

ENDLOCAL