paddle_build.bat 33.4 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
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 已提交
102 103 104 105
if %ERRORLEVEL% NEQ 0 (
    echo activate python virtual environment failed!
    exit /b 5
)
106

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

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

126 127 128 129 130
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
131

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

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

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

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

179

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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
309
set ON_INFER=ON
310
set WITH_PYTHON=OFF
311 312
if not defined CUDA_ARCH_NAME set CUDA_ARCH_NAME=All

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

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

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

328 329 330 331
rem "Other configurations are added here"
rem :CASE_wincheck_others
rem call ...

332

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

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

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

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

355 356 357 358 359 360
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:\=/%
361

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

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

rem ------set third_party cache dir------
379

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

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

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

421 422 423 424 425 426 427
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. 
)

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

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

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

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

rem ---------------------------------------------------------------------------------------------
:build
481
@ECHO OFF
482
echo    ========================================
483
echo    Step 2. Build Paddle ...
484 485
echo    ========================================

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

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

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

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

set build_times=1
517

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

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

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

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

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

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

604
echo Build Paddle successfully!
Z
Zhou Wei 已提交
605 606
echo 0 > %cache_dir%\error_code.txt
type %cache_dir%\error_code.txt
607

608
:: ci will collect sccache hit rate
609 610 611
if "%WITH_SCCACHE%"=="ON" (
    call :collect_sccache_hits
)
612

613 614 615
goto:eof

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

rem ---------------------------------------------------------------------------------------------
:test_whl_pacakage
623
@ECHO OFF
624 625 626
echo    ========================================
echo    Step 3. Test pip install whl package ...
echo    ========================================
627

628 629
setlocal enabledelayedexpansion

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

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

639 640
dir /s /b python\dist\*.whl > whl_file.txt
set /p PADDLE_WHL_FILE_WIN=< whl_file.txt
641

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

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

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

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

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

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

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

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

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

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

:parallel_test_base_gpu
echo    ========================================
720
echo    Running GPU unit tests in parallel way ...
721 722
echo    ========================================

Z
Zhou Wei 已提交
723 724 725 726 727 728 729
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 已提交
730

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

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

744 745 746 747 748 749
goto:eof

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

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

755 756
goto:eof

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

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

zhouweiwei2014's avatar
zhouweiwei2014 已提交
770 771 772 773 774 775 776 777 778
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
)

779
cd /d %work_dir%\paddle\fluid\inference\api\demo_ci
780
%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%"
781

782 783 784
goto:eof

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

rem ---------------------------------------------------------------------------------------------
:check_change_of_unittest
794
@ECHO OFF
795 796 797 798
echo    ========================================
echo    Step 6. Check whether deleting a unit test ...
echo    ========================================

799 800
%cache_dir%\tools\busybox64.exe bash %work_dir%\tools\windows\check_change_of_unittest.sh

801 802 803
goto:eof

:check_change_of_unittest_error
Z
Zhou Wei 已提交
804
exit /b 1
805

806 807 808 809 810 811 812
rem ---------------------------------------------------------------------------------------------
:test_inference_ut
@ECHO OFF
echo    ========================================
echo    Step 7. Testing fluid library with infer_ut for inference ...
echo    ========================================

813
cd /d %work_dir%\paddle\fluid\inference\tests\infer_ut
814
%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%"
815 816 817 818 819 820 821 822
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

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

837
:zip_cc_file_error
838 839
echo Tar inference library failed!
exit /b 1
840

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

859 860
:timestamp
setlocal enabledelayedexpansion
861
@ECHO OFF
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 889 890 891 892
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"
893
set tempTaskName=%~3
Z
zhangchunle 已提交
894
echo ipipe_log_param_Windows_%tempTaskName: =_%_Time: %cost_secs%s
895 896 897
goto:eof


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

L
LoveAn 已提交
914 915 916
goto:eof


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

ENDLOCAL