paddle_build.bat 33.2 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 44
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
taskkill /f /im op_function_generator.exe /t 2>NUL
45 46
taskkill /f /im eager_generator.exe /t 2>NUL
taskkill /f /im eager_op_function_generator.exe /t 2>NUL
47
wmic process where name="op_function_generator.exe" call terminate 2>NUL
48 49
wmic process where name="eager_generator.exe" call terminate 2>NUL
wmic process where name="eager_op_function_generator.exe" call terminate 2>NUL
50 51
wmic process where name="cvtres.exe" call terminate 2>NUL
wmic process where name="rc.exe" call terminate 2>NUL
52 53
wmic process where name="cl.exe" call terminate 2>NUL
wmic process where name="lib.exe" call terminate 2>NUL
54
wmic process where name="python.exe" call terminate 2>NUL
55

56
rem ------initialize common variable------
57
if not defined GENERATOR set GENERATOR="Visual Studio 15 2017 Win64"
58
if not defined WITH_TENSORRT set WITH_TENSORRT=ON
59 60
if not defined TENSORRT_ROOT set TENSORRT_ROOT=D:/TensorRT
if not defined WITH_GPU set WITH_GPU=ON
61 62 63
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
64
if not defined MSVC_STATIC_CRT set MSVC_STATIC_CRT=ON
65 66
if not defined WITH_PYTHON set WITH_PYTHON=ON
if not defined ON_INFER set ON_INFER=ON
67
if not defined WITH_ONNXRUNTIME set WITH_ONNXRUNTIME=OFF
68
if not defined WITH_INFERENCE_API_TEST set WITH_INFERENCE_API_TEST=ON
69
if not defined WITH_STATIC_LIB set WITH_STATIC_LIB=ON
70
if not defined WITH_TPCACHE set WITH_TPCACHE=OFF
71
if not defined WITH_CACHE set WITH_CACHE=OFF
72
if not defined WITH_SCCACHE set WITH_SCCACHE=OFF
73
if not defined WITH_UNITY_BUILD set WITH_UNITY_BUILD=OFF
74
if not defined INFERENCE_DEMO_INSTALL_DIR set INFERENCE_DEMO_INSTALL_DIR=%cache_dir:\=/%/inference_demo
75
if not defined LOG_LEVEL set LOG_LEVEL=normal
76
if not defined PRECISION_TEST set PRECISION_TEST=OFF
77
if not defined NIGHTLY_MODE set NIGHTLY_MODE=OFF
78
if not defined retry_times set retry_times=1
79
if not defined PYTHON_ROOT set PYTHON_ROOT=C:\Python37
80
if not defined BUILD_DIR set BUILD_DIR=build
S
Sing_chan 已提交
81 82 83 84
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

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

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

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

94
rem ------initialize the python environment------
95 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

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

rem -------Caching strategy 1: keep build directory for incremental compilation-----------
114 115 116 117 118 119 120
rmdir %BUILD_DIR%\python /s/q
rmdir %BUILD_DIR%\paddle\third_party\externalError /s/q
rem rmdir %BUILD_DIR%\paddle\fluid\pybind /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
121

122
if "%WITH_CACHE%"=="OFF" (
123
    rmdir %BUILD_DIR% /s/q
124 125 126
    goto :mkbuild
)

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

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

148 149 150 151 152 153 154
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
155
    rmdir %BUILD_DIR% /s/q
156 157 158
    goto :mkbuild
)

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

175

176
rem -------Caching strategy 2: sccache decorate compiler-----------
177
if not defined SCCACHE_ROOT set SCCACHE_ROOT=D:\sccache
178
if "%WITH_SCCACHE%"=="ON" (
179
    cmd /C sccache -V || call :install_sccache
180
    sccache --stop-server 2> NUL
181
    del %SCCACHE_ROOT%\sccache_log.txt
182 183

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

    :: 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

199 200 201 202
    sccache --start-server
    sccache -z
    goto :CASE_%1
) else (
203
    del %PYTHON_ROOT%\sccache.exe 2> NUL
204 205
    goto :CASE_%1
)
206

207 208 209 210
: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')"
211
xcopy sccache.exe %PYTHON_ROOT%\ /Y
212
del sccache.exe
213 214
goto:eof
rem -------Caching strategy 2: End --------------------------------
215 216 217

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

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

236 237 238
call :cmake || goto cmake_error
call :build || goto build_error
call :test_whl_pacakage || goto test_whl_pacakage_error
239
call :test_unit || goto test_unit_error
240 241
goto:success

242
rem ------PR CI windows check for OPENBLAS/CPU------
243
:CASE_wincheck_openblas
244
set WITH_MKL=OFF
245
set WITH_GPU=OFF
246
set WITH_AVX=OFF
247
set MSVC_STATIC_CRT=ON
Z
Zhou Wei 已提交
248
set ON_INFER=OFF
249
if not defined CUDA_ARCH_NAME set CUDA_ARCH_NAME=Auto
250

251 252 253
call :cmake || goto cmake_error
call :build || goto build_error
call :test_whl_pacakage || goto test_whl_pacakage_error
254
call :test_unit || goto test_unit_error
255 256
goto:success

257 258 259 260 261 262 263
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
264 265
set WITH_TENSORRT=ON
set WITH_INFERENCE_API_TEST=ON
266
set WITH_ONNXRUNTIME=ON
267
if not defined CUDA_ARCH_NAME set CUDA_ARCH_NAME=Auto
268 269 270 271

call :cmake || goto cmake_error
call :build || goto build_error
call :test_whl_pacakage || goto test_whl_pacakage_error
272
call :test_unit || goto test_unit_error
273
::call :test_inference || goto test_inference_error
274
::call :test_inference_ut || goto test_inference_ut_error
275
::call :check_change_of_unittest || goto check_change_of_unittest_error
276 277
goto:success

278 279 280 281
rem ------Build windows avx whl package------
:CASE_build_avx_whl
set WITH_AVX=ON
set ON_INFER=OFF
282
if not defined CUDA_ARCH_NAME set CUDA_ARCH_NAME=All
283 284 285 286 287 288 289 290 291 292

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
set ON_INFER=OFF
293
if not defined CUDA_ARCH_NAME set CUDA_ARCH_NAME=All
294 295 296 297 298 299 300 301

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
302
set ON_INFER=ON
303
set WITH_PYTHON=OFF
304 305
if not defined CUDA_ARCH_NAME set CUDA_ARCH_NAME=All

306 307
python %work_dir%\tools\remove_grad_op_and_kernel.py
if %errorlevel% NEQ 0 exit /b 1
308 309 310

call :cmake || goto cmake_error
call :build || goto build_error
311 312 313 314 315
call :test_inference
if %errorlevel% NEQ 0 set error_code=%errorlevel%
call :test_inference_ut
if %errorlevel% NEQ 0 set error_code=%errorlevel%

316 317
call :zip_cc_file || goto zip_cc_file_error
call :zip_c_file || goto zip_c_file_error
318
if %error_code% NEQ 0 goto test_inference_error
319 320
goto:success

321 322 323 324
rem "Other configurations are added here"
rem :CASE_wincheck_others
rem call ...

325

326 327
rem ---------------------------------------------------------------------------------------------
:cmake
328
@ECHO OFF
329 330 331
echo    ========================================
echo    Step 1. Cmake ...
echo    ========================================
332

S
Sing_chan 已提交
333 334
rem set vs language to english to block showIncludes, this need vs has installed English language package.
set VSLANG=1033
335
rem Configure the environment for 64-bit builds. 'DISTUTILS_USE_SDK' indicates that the user has selected the compiler.
336 337 338
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%

339
set DISTUTILS_USE_SDK=1
340 341
rem Windows 10 Kit bin dir
set PATH=C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64;%PATH%
342 343
rem Use 64-bit ToolSet to compile
set PreferredToolArchitecture=x64
344

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

348 349 350 351 352 353
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:\=/%
354

355 356 357 358 359
rem install ninja if GENERATOR is Ninja
if %GENERATOR% == "Ninja" (
    pip install ninja
    if %errorlevel% NEQ 0 (
        echo pip install ninja failed!
360
        exit /b 5
361 362 363 364 365 366 367
    )
)

rem ------show summary of current GPU environment----------
cmake --version
if "%WITH_GPU%"=="ON" (
    nvcc --version
368
    nvidia-smi 2>NUL
369 370 371
)

rem ------set third_party cache dir------
372

373
if "%WITH_TPCACHE%"=="OFF" (
374
    set THIRD_PARTY_PATH=%work_dir:\=/%/%BUILD_DIR%/third_party
375 376 377
    goto :cmake_impl
)

378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396
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
    )
)

397 398 399 400 401 402 403 404 405
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" (
406
    set cuda_version=%CUDA_TOOLKIT_ROOT_DIR:~-4%
407
    set sub_dir=cuda!cuda_version:.=!
408
) else (
409
    set sub_dir=cpu
410
)
411
set THIRD_PARTY_HOME=%cache_dir:\=/%/third_party/%sub_dir%
412
set THIRD_PARTY_PATH=%THIRD_PARTY_HOME%/%md5%
413

414 415 416 417 418 419 420
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. 
)

421 422 423 424
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%"
425
    cd /d %THIRD_PARTY_HOME%
426 427 428 429 430 431
    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 ( 
432
            echo Get third party from bos successfully.
433
        ) else (
434
            echo Get third party failed, reason: extract failed, will build locally.
435 436 437
        )
        del %md5%.tar.gz
    ) else (
438
        echo Get third party failed, reason: download failed, will build locally.
439
    )
440
    if not exist %THIRD_PARTY_PATH% set UPLOAD_TP_FILE=ON
441
    cd /d %work_dir%\%BUILD_DIR%
442
) else (
443
    echo Found reusable third_party cache in %THIRD_PARTY_PATH%, will reuse it.
444
)
445 446

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

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

:cmake_error
Z
Zhou Wei 已提交
467
echo 7 > %cache_dir%\error_code.txt
468
type %cache_dir%\error_code.txt
469
echo Cmake failed, will exit!
Z
Zhou Wei 已提交
470
exit /b 7
471 472 473

rem ---------------------------------------------------------------------------------------------
:build
474
@ECHO OFF
475
echo    ========================================
476
echo    Step 2. Build Paddle ...
477 478
echo    ========================================

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

482
set build_times=1
483 484 485 486 487 488 489
rem MSbuild will build third_party first to improve compiler stability.
if NOT %GENERATOR% == "Ninja" (
    goto :build_tp
) else (
    goto :build_paddle
)

490
:build_tp
491
echo Build third_party the %build_times% time:
492 493 494
if %GENERATOR% == "Ninja" (
    ninja third_party
) else (
495
    MSBuild /m /p:PreferredToolArchitecture=x64 /p:Configuration=Release /verbosity:%LOG_LEVEL% third_party.vcxproj
496
)
497

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

set build_times=1
510

511
:build_paddle
L
LoveAn 已提交
512
:: reset clcache zero stats for collect PR's actual hit rate
513
rem clcache.exe -z
L
LoveAn 已提交
514

515
rem -------clean up environment again-----------
516 517 518 519 520 521 522 523 524 525 526 527 528 529
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
taskkill /f /im op_function_generator.exe /t 2>NUL
530 531
taskkill /f /im eager_generator.exe /t 2>NUL
taskkill /f /im eager_op_function_generator.exe /t 2>NUL
532
wmic process where name="op_function_generator.exe" call terminate 2>NUL
533 534 535
wmic process where name="eager_generator.exe" call terminate 2>NUL
wmic process where name="eager_op_function_generator.exe" call terminate 2>NUL
wmic process where name="cmake.exe" call terminate 2>NUL
536 537
wmic process where name="cvtres.exe" call terminate 2>NUL
wmic process where name="rc.exe" call terminate 2>NUL
538 539
wmic process where name="cl.exe" call terminate 2>NUL
wmic process where name="lib.exe" call terminate 2>NUL
540

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

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

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

562 563
if "%UPLOAD_TP_FILE%"=="ON" (
    set BCE_FILE=%cache_dir%\bce-python-sdk-0.8.33\BosClient.py
564 565 566
    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.
567
        cd /d %cache_dir%
568 569 570
        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')"
571
        cd /d %cache_dir%\bce-python-sdk-0.8.33
572 573 574 575
        %PYTHON_ROOT%\python.exe setup.py install 1>nul
        del %cache_dir%\bce-python-sdk-0.8.33.tar.gz
    )
    if !errorlevel! EQU 0 (
576
        cd /d %THIRD_PARTY_HOME%
577 578 579 580
        echo Uploading third_party: compressing ...
        tar -zcf %md5%.tar.gz %md5%
        if !errorlevel! EQU 0 (
            echo Uploading third_party: uploading ...
581
            %PYTHON_ROOT%\python.exe !BCE_FILE! %md5%.tar.gz paddle-windows/third_party/%sub_dir% 1>nul
582
            if !errorlevel! EQU 0 (
583
                echo Upload third party %md5% to bos paddle-windows/third_party/%sub_dir% successfully.
584
            ) else (
585
                echo Failed upload third party to bos, reason: upload failed.
586 587
            )
        ) else (
588
            echo Failed upload third party to bos, reason: compress failed.
589 590 591
        )
        del %md5%.tar.gz
    ) else (
592
        echo Failed upload third party to bos, reason: install bce failed.
593
    )
594
    cd /d %work_dir%\%BUILD_DIR%
595 596
)

597
echo Build Paddle successfully!
Z
Zhou Wei 已提交
598 599
echo 0 > %cache_dir%\error_code.txt
type %cache_dir%\error_code.txt
600

601
:: ci will collect sccache hit rate
602 603 604
if "%WITH_SCCACHE%"=="ON" (
    call :collect_sccache_hits
)
605

606 607 608
goto:eof

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

rem ---------------------------------------------------------------------------------------------
:test_whl_pacakage
616
@ECHO OFF
617 618 619
echo    ========================================
echo    Step 3. Test pip install whl package ...
echo    ========================================
620

621 622
setlocal enabledelayedexpansion

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

627 628 629
%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 已提交
630
for /F %%i in ("%whlsize%") do echo ipipe_log_param_Windows_PR_whl_Size: %%i
631

632 633
dir /s /b python\dist\*.whl > whl_file.txt
set /p PADDLE_WHL_FILE_WIN=< whl_file.txt
634

Z
Zhou Wei 已提交
635
@ECHO ON
Z
Zhou Wei 已提交
636 637
pip uninstall -y paddlepaddle
pip uninstall -y paddlepaddle-gpu
638
pip install %PADDLE_WHL_FILE_WIN%
Z
Zhou Wei 已提交
639 640 641
if %ERRORLEVEL% NEQ 0 (
    call paddle_winci\Scripts\deactivate.bat 2>NUL
    echo pip install whl package failed!
Z
Zhou Wei 已提交
642
    exit /b 1
Z
Zhou Wei 已提交
643
)
644

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

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

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

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

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

671
set FLAGS_call_stack_level=2
672 673 674 675 676 677 678
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

Y
YUNSHEN XIE 已提交
679 680
pip install requests

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

REM TODO: make ut find .dll in install\onnxruntime\lib
xcopy %THIRD_PARTY_PATH:/=\%\install\onnxruntime\lib\onnxruntime.dll %work_dir%\%BUILD_DIR%\paddle\fluid\inference\tests\api\ /Y
690 691

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

:parallel_test_base_gpu
echo    ========================================
712
echo    Running GPU unit tests in parallel way ...
713 714
echo    ========================================

Z
Zhou Wei 已提交
715 716 717 718 719 720 721
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 已提交
722

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

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

736 737 738 739 740 741
goto:eof

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

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

747 748
goto:eof

749
:test_unit_error
750 751
:: echo 8 > %cache_dir%\error_code.txt
:: type %cache_dir%\error_code.txt
752
echo Running unit tests failed, will exit!
753
exit /b 8
754 755 756

rem ---------------------------------------------------------------------------------------------
:test_inference
757
@ECHO OFF
758 759 760
echo    ========================================
echo    Step 5. Testing fluid library for inference ...
echo    ========================================
761

zhouweiwei2014's avatar
zhouweiwei2014 已提交
762 763 764 765 766 767 768 769 770
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
)

771
cd /d %work_dir%\paddle\fluid\inference\api\demo_ci
772
%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%"
773

774 775 776
goto:eof

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

rem ---------------------------------------------------------------------------------------------
:check_change_of_unittest
786
@ECHO OFF
787 788 789 790
echo    ========================================
echo    Step 6. Check whether deleting a unit test ...
echo    ========================================

791 792
%cache_dir%\tools\busybox64.exe bash %work_dir%\tools\windows\check_change_of_unittest.sh

793 794 795
goto:eof

:check_change_of_unittest_error
Z
Zhou Wei 已提交
796
exit /b 1
797

798 799 800 801 802 803 804
rem ---------------------------------------------------------------------------------------------
:test_inference_ut
@ECHO OFF
echo    ========================================
echo    Step 7. Testing fluid library with infer_ut for inference ...
echo    ========================================

805
cd /d %work_dir%\paddle\fluid\inference\tests\infer_ut
806
%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%"
807 808 809 810 811 812 813 814
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

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

829
:zip_cc_file_error
830 831
echo Tar inference library failed!
exit /b 1
832

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

851 852
:timestamp
setlocal enabledelayedexpansion
853
@ECHO OFF
854 855 856 857 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
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"
885
set tempTaskName=%~3
Z
zhangchunle 已提交
886
echo ipipe_log_param_Windows_%tempTaskName: =_%_Time: %cost_secs%s
887 888 889
goto:eof


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

L
LoveAn 已提交
906 907 908
goto:eof


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

ENDLOCAL