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 123
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
124

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

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
dir paddle\fluid\pybind\Release
176 177
rem -------Caching strategy 1: End --------------------------------

178

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

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

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

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

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

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

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

239 240 241
call :cmake || goto cmake_error
call :build || goto build_error
call :test_whl_pacakage || goto test_whl_pacakage_error
242
call :test_unit || goto test_unit_error
243 244
goto:success

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

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

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

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

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

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

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

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

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

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

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

328

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

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

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

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

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

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

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

rem ------set third_party cache dir------
375

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

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

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

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

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

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

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

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

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

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

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

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

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

set build_times=1
513

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

518
rem -------clean up environment again-----------
519 520 521 522 523 524 525 526 527 528 529 530 531 532
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
533
taskkill /f /im eager_generator.exe /t 2>NUL
534
taskkill /f /im eager_legacy_op_function_generator.exe /t 2>NUL
535
wmic process where name="op_function_generator.exe" call terminate 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 644
if %ERRORLEVEL% NEQ 0 (
    call paddle_winci\Scripts\deactivate.bat 2>NUL
    echo pip install whl package failed!
Z
Zhou Wei 已提交
645
    exit /b 1
Z
Zhou Wei 已提交
646
)
647

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

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

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

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 681
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 已提交
682 683
pip install requests

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

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
693 694

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

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

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

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

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

739 740 741 742 743 744
goto:eof

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

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

750 751
goto:eof

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

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

zhouweiwei2014's avatar
zhouweiwei2014 已提交
765 766 767 768 769 770 771 772 773
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
)

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

777 778 779
goto:eof

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

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

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

796 797 798
goto:eof

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

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

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

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

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

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

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


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

L
LoveAn 已提交
909 910 911
goto:eof


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

ENDLOCAL