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 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
taskkill /f /im eager_generator.exe /t 2>NUL
46
taskkill /f /im eager_legacy_op_function_generator.exe /t 2>NUL
47
wmic process where name="op_function_generator.exe" call terminate 2>NUL
48
wmic process where name="eager_generator.exe" call terminate 2>NUL
49
wmic process where name="eager_legacy_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 variable to control building process
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 71 72 73 74 75
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
76
if not defined WITH_TPCACHE set WITH_TPCACHE=OFF
77
if not defined WITH_CACHE set WITH_CACHE=OFF
78
if not defined WITH_SCCACHE set WITH_SCCACHE=OFF
79
if not defined INFERENCE_DEMO_INSTALL_DIR set INFERENCE_DEMO_INSTALL_DIR=%cache_dir:\=/%/inference_demo
80
if not defined LOG_LEVEL set LOG_LEVEL=normal
81
if not defined PRECISION_TEST set PRECISION_TEST=OFF
82
if not defined NIGHTLY_MODE set NIGHTLY_MODE=OFF
83
if not defined retry_times set retry_times=1
84
if not defined PYTHON_ROOT set PYTHON_ROOT=C:\Python37
85
if not defined BUILD_DIR set BUILD_DIR=build
86
if not defined TEST_INFERENCE set TEST_INFERENCE=ON
S
Sing_chan 已提交
87

88
set task_name=%1
89
set UPLOAD_TP_FILE=OFF
90

91 92 93
set error_code=0
type %cache_dir%\error_code.txt

94 95 96
rem ------initialize set git config------
git config --global core.longpaths true

97
rem ------initialize the python environment------
98 99 100 101 102
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

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

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

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

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

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

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

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

176

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

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 245
goto:success

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

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

261 262 263 264 265 266 267
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
268 269
set WITH_TENSORRT=ON
set WITH_INFERENCE_API_TEST=ON
270
set WITH_ONNXRUNTIME=ON
271
if not defined CUDA_ARCH_NAME set CUDA_ARCH_NAME=Auto
272 273 274 275

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

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

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
296
set ON_INFER=ON
297
if not defined CUDA_ARCH_NAME set CUDA_ARCH_NAME=All
298 299 300 301 302 303 304 305

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
306
set ON_INFER=ON
307
set WITH_PYTHON=OFF
308 309
if not defined CUDA_ARCH_NAME set CUDA_ARCH_NAME=All

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

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

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

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

329

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

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

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

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

352 353 354 355 356 357
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:\=/%
358

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

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

rem ------set third_party cache dir------
376

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

382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400
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
    )
)

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

418 419 420 421 422 423 424
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. 
)

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

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

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

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

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

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

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

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

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

set build_times=1
514

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

519
rem -------clean up environment again-----------
520 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
taskkill /f /im op_function_generator.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="op_function_generator.exe" call terminate 2>NUL
537
wmic process where name="eager_generator.exe" call terminate 2>NUL
538
wmic process where name="eager_legacy_op_function_generator.exe" call terminate 2>NUL
539
wmic process where name="cmake.exe" call terminate 2>NUL
540 541
wmic process where name="cvtres.exe" call terminate 2>NUL
wmic process where name="rc.exe" call terminate 2>NUL
542 543
wmic process where name="cl.exe" call terminate 2>NUL
wmic process where name="lib.exe" call terminate 2>NUL
544

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

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

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

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

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

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

610 611 612
goto:eof

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

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

625 626
setlocal enabledelayedexpansion

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

631 632 633
%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 已提交
634
for /F %%i in ("%whlsize%") do echo ipipe_log_param_Windows_PR_whl_Size: %%i
635

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

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

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

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

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

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

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

675
set FLAGS_call_stack_level=2
676 677 678 679 680 681 682
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 已提交
683 684
pip install requests

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

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
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 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
taskkill /f /im op_function_generator.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="op_function_generator.exe" call terminate 2>NUL
939
wmic process where name="eager_generator.exe" call terminate 2>NUL
940
wmic process where name="eager_legacy_op_function_generator.exe" call terminate 2>NUL
941
wmic process where name="cvtres.exe" call terminate 2>NUL
942
wmic process where name="rc.exe" call terminate 2>NUL
943 944
wmic process where name="cl.exe" call terminate 2>NUL
wmic process where name="lib.exe" call terminate 2>NUL
945
wmic process where name="python.exe" call terminate 2>NUL
946
if "%WITH_TESTING%"=="ON" (
947
    for /F "tokens=1 delims= " %%# in ('tasklist ^| findstr /i test') do taskkill /f /im %%# /t
948
)
949 950 951 952
echo Windows CI run successfully!
exit /b 0

ENDLOCAL