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
taskkill /f /im cmake.exe /t 2>NUL
taskkill /f /im ninja.exe /t 2>NUL
taskkill /f /im MSBuild.exe /t 2>NUL
taskkill /f /im cl.exe /t 2>NUL
taskkill /f /im lib.exe /t 2>NUL
taskkill /f /im link.exe /t 2>NUL
taskkill /f /im vctip.exe /t 2>NUL
taskkill /f /im cvtres.exe /t 2>NUL
taskkill /f /im rc.exe /t 2>NUL
taskkill /f /im mspdbsrv.exe /t 2>NUL
taskkill /f /im csc.exe /t 2>NUL
taskkill /f /im python.exe /t 2>NUL
taskkill /f /im nvcc.exe /t 2>NUL
taskkill /f /im cicc.exe /t 2>NUL
taskkill /f /im ptxas.exe /t 2>NUL
44
taskkill /f /im eager_generator.exe /t 2>NUL
45
taskkill /f /im eager_legacy_op_function_generator.exe /t 2>NUL
46
wmic process where name="eager_generator.exe" call terminate 2>NUL
47
wmic process where name="eager_legacy_op_function_generator.exe" call terminate 2>NUL
48 49
wmic process where name="cvtres.exe" call terminate 2>NUL
wmic process where name="rc.exe" call terminate 2>NUL
50 51
wmic process where name="cl.exe" call terminate 2>NUL
wmic process where name="lib.exe" call terminate 2>NUL
52
wmic process where name="python.exe" call terminate 2>NUL
53

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

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

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

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

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

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

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

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

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

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

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

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

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

177

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

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

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

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

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

211 212 213
: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
214
python -c "import wget;wget.download('https://paddle-ci.gz.bcebos.com/window_requirement/sccache.exe')"
215
xcopy sccache.exe %SCCACHE_ROOT%\ /Y
216
del sccache.exe
217 218
goto:eof
rem -------Caching strategy 2: End --------------------------------
219 220 221

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

330

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

461 462 463 464 465 466 467 468 469
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% -DPYTHON_EXECUTABLE=%PYTHON_EXECUTABLE% -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% ^
-DWITH_UNITY_BUILD=%WITH_UNITY_BUILD% -DCUDA_ARCH_NAME=%CUDA_ARCH_NAME% -DCUDA_ARCH_BIN=%CUDA_ARCH_BIN% -DCUB_PATH=%THIRD_PARTY_HOME%/cub ^
-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% -DWITH_ONNXRUNTIME=%WITH_ONNXRUNTIME% >> %work_dir%\win_cmake.sh

470
cmake .. -G %GENERATOR% -DCMAKE_BUILD_TYPE=Release -DWITH_AVX=%WITH_AVX% -DWITH_GPU=%WITH_GPU% -DWITH_MKL=%WITH_MKL% ^
471
-DWITH_TESTING=%WITH_TESTING% -DWITH_PYTHON=%WITH_PYTHON% -DPYTHON_EXECUTABLE=%PYTHON_EXECUTABLE% -DON_INFER=%ON_INFER% ^
472
-DWITH_INFERENCE_API_TEST=%WITH_INFERENCE_API_TEST% -DTHIRD_PARTY_PATH=%THIRD_PARTY_PATH% ^
473
-DINFERENCE_DEMO_INSTALL_DIR=%INFERENCE_DEMO_INSTALL_DIR% -DWITH_STATIC_LIB=%WITH_STATIC_LIB% ^
474
-DWITH_TENSORRT=%WITH_TENSORRT% -DTENSORRT_ROOT="%TENSORRT_ROOT%" -DMSVC_STATIC_CRT=%MSVC_STATIC_CRT% ^
475
-DWITH_UNITY_BUILD=%WITH_UNITY_BUILD% -DCUDA_ARCH_NAME=%CUDA_ARCH_NAME% -DCUDA_ARCH_BIN=%CUDA_ARCH_BIN% -DCUB_PATH=%THIRD_PARTY_HOME%/cub ^
S
Sing_chan 已提交
476
-DCUDA_TOOLKIT_ROOT_DIR="%CUDA_TOOLKIT_ROOT_DIR%" -DNEW_RELEASE_ALL=%NEW_RELEASE_ALL% -DNEW_RELEASE_PYPI=%NEW_RELEASE_PYPI% ^
477
-DNEW_RELEASE_JIT=%NEW_RELEASE_JIT% -DWITH_ONNXRUNTIME=%WITH_ONNXRUNTIME%
478 479 480
goto:eof

:cmake_error
Z
Zhou Wei 已提交
481
echo 7 > %cache_dir%\error_code.txt
482
type %cache_dir%\error_code.txt
483
echo Cmake failed, will exit!
Z
Zhou Wei 已提交
484
exit /b 7
485 486 487

rem ---------------------------------------------------------------------------------------------
:build
488
@ECHO OFF
489
echo    ========================================
490
echo    Step 2. Build Paddle ...
491 492
echo    ========================================

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

496
set build_times=1
497 498 499 500 501 502 503
rem MSbuild will build third_party first to improve compiler stability.
if NOT %GENERATOR% == "Ninja" (
    goto :build_tp
) else (
    goto :build_paddle
)

504
:build_tp
505
echo Build third_party the %build_times% time:
506 507 508
if %GENERATOR% == "Ninja" (
    ninja third_party
) else (
509
    MSBuild /m /p:PreferredToolArchitecture=x64 /p:Configuration=Release /verbosity:%LOG_LEVEL% third_party.vcxproj
510
)
511

512 513
if %ERRORLEVEL% NEQ 0 (
    set /a build_times=%build_times%+1  
514
    if %build_times% GEQ %retry_times% (
Z
Zhou Wei 已提交
515
        exit /b 7
516
    ) else (
517
        echo Build third_party failed, will retry!
518 519 520
        goto :build_tp
    )
)
521
echo Build third_party successfully!
522 523

set build_times=1
524

525
:build_paddle
L
LoveAn 已提交
526
:: reset clcache zero stats for collect PR's actual hit rate
527
rem clcache.exe -z
L
LoveAn 已提交
528

529
rem -------clean up environment again-----------
530 531 532 533 534 535 536 537 538 539 540 541 542
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
543
taskkill /f /im eager_generator.exe /t 2>NUL
544
taskkill /f /im eager_legacy_op_function_generator.exe /t 2>NUL
545
wmic process where name="eager_generator.exe" call terminate 2>NUL
546
wmic process where name="eager_legacy_op_function_generator.exe" call terminate 2>NUL
547
wmic process where name="cmake.exe" call terminate 2>NUL
548 549
wmic process where name="cvtres.exe" call terminate 2>NUL
wmic process where name="rc.exe" call terminate 2>NUL
550 551
wmic process where name="cl.exe" call terminate 2>NUL
wmic process where name="lib.exe" call terminate 2>NUL
552

553
if "%WITH_TESTING%"=="ON" (
554
    for /F "tokens=1 delims= " %%# in ('tasklist ^| findstr /i test') do taskkill /f /im %%# /t
555 556
)

557
echo Build Paddle the %build_times% time:
558
if %GENERATOR% == "Ninja" (
559
    ninja all
560
) else (
561
    MSBuild /m:%PARALLEL_PROJECT_COUNT% /p:PreferredToolArchitecture=x64 /p:TrackFileAccess=false /p:Configuration=Release /verbosity:%LOG_LEVEL% ALL_BUILD.vcxproj
562 563
)

564
if %ERRORLEVEL% NEQ 0 (
565
    set /a build_times=%build_times%+1
566
    if %build_times% GEQ %retry_times% (
Z
Zhou Wei 已提交
567
        exit /b 7
568
    ) else (
569
        echo Build Paddle failed, will retry!
570 571 572
        goto :build_paddle
    )
)
573

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

607
echo Build Paddle successfully!
Z
Zhou Wei 已提交
608 609
echo 0 > %cache_dir%\error_code.txt
type %cache_dir%\error_code.txt
610

611
:: ci will collect sccache hit rate
612 613 614
if "%WITH_SCCACHE%"=="ON" (
    call :collect_sccache_hits
)
615

616 617 618
goto:eof

:build_error
Z
Zhou Wei 已提交
619
echo 7 > %cache_dir%\error_code.txt
620
type %cache_dir%\error_code.txt
621
echo Build Paddle failed, will exit!
622
exit /b 7
623 624 625

rem ---------------------------------------------------------------------------------------------
:test_whl_pacakage
626
@ECHO OFF
627 628 629
echo    ========================================
echo    Step 3. Test pip install whl package ...
echo    ========================================
630

631 632
setlocal enabledelayedexpansion

633 634 635
for /F %%# in ('wmic os get localdatetime^|findstr 20') do set end=%%#
set end=%end:~4,10%
call :timestamp "%start%" "%end%" "Build"
636

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

641 642 643
%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 已提交
644
for /F %%i in ("%whlsize%") do echo ipipe_log_param_Windows_PR_whl_Size: %%i
645

646 647
dir /s /b python\dist\*.whl > whl_file.txt
set /p PADDLE_WHL_FILE_WIN=< whl_file.txt
648

Z
Zhou Wei 已提交
649
@ECHO ON
Z
Zhou Wei 已提交
650 651
pip uninstall -y paddlepaddle
pip uninstall -y paddlepaddle-gpu
652
pip install %PADDLE_WHL_FILE_WIN%
Z
Zhou Wei 已提交
653 654
if %ERRORLEVEL% NEQ 0 (
    echo pip install whl package failed!
Z
Zhou Wei 已提交
655
    exit /b 1
Z
Zhou Wei 已提交
656
)
657

658
set CUDA_VISIBLE_DEVICES=0
Z
Zhou Wei 已提交
659
python %work_dir%\paddle\scripts\installation_validate.py
660 661 662
goto:eof

:test_whl_pacakage_error
663 664
::echo 1 > %cache_dir%\error_code.txt
::type %cache_dir%\error_code.txt
Z
Zhou Wei 已提交
665
echo Test import paddle failed, will exit!
Z
Zhou Wei 已提交
666
exit /b 1
667 668

rem ---------------------------------------------------------------------------------------------
669
:test_unit
Z
Zhou Wei 已提交
670
@ECHO ON
671 672 673
echo    ========================================
echo    Step 4. Running unit tests ...
echo    ========================================
674

675
pip install -r %work_dir%\python\unittest_py\requirements.txt
676 677
if %ERRORLEVEL% NEQ 0 (
    echo pip install unittest requirements.txt failed!
678
    exit /b 5
679 680
)

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

684
set FLAGS_call_stack_level=2
685
set FLAGS_set_to_1d=False
686 687 688 689 690 691
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
692
dir %THIRD_PARTY_PATH:/=\%\install\onnxruntime\lib
Y
YUNSHEN XIE 已提交
693

694 695
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;^
696 697
%THIRD_PARTY_PATH:/=\%\install\mkldnn\bin;%THIRD_PARTY_PATH:/=\%\install\warpctc\bin;^
%THIRD_PARTY_PATH:/=\%\install\onnxruntime\lib;%THIRD_PARTY_PATH:/=\%\install\paddle2onnx\lib;^
698
%work_dir%\%BUILD_DIR%\paddle\fluid\inference;%work_dir%\%BUILD_DIR%\paddle\fluid\inference\capi_exp;%work_dir%\%BUILD_DIR%\paddle\ir;^
699
%PATH%
700 701

REM TODO: make ut find .dll in install\onnxruntime\lib
702 703 704
if "%WITH_ONNXRUNTIME%"=="ON" (
    xcopy %THIRD_PARTY_PATH:/=\%\install\onnxruntime\lib\onnxruntime.dll %work_dir%\%BUILD_DIR%\paddle\fluid\inference\tests\api\ /Y
)
705 706

if "%WITH_GPU%"=="ON" (
707
    call:parallel_test_base_gpu
708
) else (
709 710 711 712 713 714 715 716 717 718 719 720 721 722
    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 
723 724 725 726
)

:parallel_test_base_gpu
echo    ========================================
727
echo    Running GPU unit tests in parallel way ...
728 729
echo    ========================================

Z
Zhou Wei 已提交
730 731 732 733 734 735 736
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 已提交
737

W
Wilber 已提交
738 739
:: For hypothesis tests(mkldnn op and inference pass), we set use 'ci' profile
set HYPOTHESIS_TEST_PROFILE=ci
740

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

743 744 745 746 747 748
goto:eof

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

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

754 755
goto:eof

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

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

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

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

778 779 780
goto:eof

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

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

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

797 798 799
goto:eof

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

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

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

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

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

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

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

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

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

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


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

L
LoveAn 已提交
910 911 912
goto:eof


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

ENDLOCAL