paddle_build.bat 38.0 KB
Newer Older
1
@ECHO OFF
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
rem Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
rem
rem Licensed under the Apache License, Version 2.0 (the "License");
rem you may not use this file except in compliance with the License.
rem You may obtain a copy of the License at
rem
rem     http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing, software
rem distributed under the License is distributed on an "AS IS" BASIS,
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rem See the License for the specific language governing permissions and
rem limitations under the License.

rem =================================================
rem       Paddle CI Task On Windows Platform
rem =================================================

20
@ECHO ON
21
setlocal enabledelayedexpansion
22

23
rem -------clean up environment-----------
24
set work_dir=%cd%
Z
Zhou Wei 已提交
25
if not defined cache_dir set cache_dir=%work_dir:Paddle=cache%
26 27 28
if not exist %cache_dir%\tools (
    git clone https://github.com/zhouwei25/tools.git %cache_dir%\tools
)
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
taskkill /f /im cmake.exe /t 2>NUL
taskkill /f /im ninja.exe /t 2>NUL
taskkill /f /im MSBuild.exe /t 2>NUL
taskkill /f /im cl.exe /t 2>NUL
taskkill /f /im lib.exe /t 2>NUL
taskkill /f /im link.exe /t 2>NUL
taskkill /f /im vctip.exe /t 2>NUL
taskkill /f /im cvtres.exe /t 2>NUL
taskkill /f /im rc.exe /t 2>NUL
taskkill /f /im mspdbsrv.exe /t 2>NUL
taskkill /f /im csc.exe /t 2>NUL
taskkill /f /im python.exe /t 2>NUL
taskkill /f /im nvcc.exe /t 2>NUL
taskkill /f /im cicc.exe /t 2>NUL
taskkill /f /im ptxas.exe /t 2>NUL
taskkill /f /im op_function_generator.exe /t 2>NUL
45 46
taskkill /f /im eager_generator.exe /t 2>NUL
taskkill /f /im eager_op_function_generator.exe /t 2>NUL
47
wmic process where name="op_function_generator.exe" call terminate 2>NUL
48 49
wmic process where name="eager_generator.exe" call terminate 2>NUL
wmic process where name="eager_op_function_generator.exe" call terminate 2>NUL
50 51
wmic process where name="cvtres.exe" call terminate 2>NUL
wmic process where name="rc.exe" call terminate 2>NUL
52 53
wmic process where name="cl.exe" call terminate 2>NUL
wmic process where name="lib.exe" call terminate 2>NUL
54
wmic process where name="python.exe" call terminate 2>NUL
55

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

86 87 88 89 90 91 92
rem ------initialize the python environment------
set PYTHON_EXECUTABLE=%PYTHON_ROOT%\python.exe
set PATH=%PYTHON_ROOT%\Scripts;%PYTHON_ROOT%;%PATH%
if "%WITH_PYTHON%" == "ON" (
    where python
    where pip
    pip install wheel --user
93
    pip install pyyaml --user
94 95 96
    pip install -r %work_dir%\python\requirements.txt --user
    if !ERRORLEVEL! NEQ 0 (
        echo pip install requirements.txt failed!
97
        exit /b 5
98 99 100 101
    )
)

rem -------Caching strategy 1: keep build directory for incremental compilation-----------
102 103 104 105 106 107 108
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
109

110
if "%WITH_CACHE%"=="OFF" (
111
    rmdir %BUILD_DIR% /s/q
112 113 114
    goto :mkbuild
)

Z
Zhou Wei 已提交
115 116
set error_code=0
type %cache_dir%\error_code.txt
117
: set /p error_code=< %cache_dir%\error_code.txt
Z
Zhou Wei 已提交
118
if %error_code% NEQ 0 (
119
    rmdir %BUILD_DIR% /s/q
Z
Zhou Wei 已提交
120 121 122
    goto :mkbuild
)

123
setlocal enabledelayedexpansion
Z
Zhou Wei 已提交
124 125 126
git show-ref --verify --quiet refs/heads/last_pr
if %ERRORLEVEL% EQU 0 (
    git diff HEAD last_pr --stat --name-only
127
    git diff HEAD last_pr --stat --name-only | findstr "setup.py.in"
128
    if !ERRORLEVEL! EQU 0 (
129
        rmdir %BUILD_DIR% /s/q
130
    )
Z
Zhou Wei 已提交
131 132 133
    git branch -D last_pr
    git branch last_pr
) else (
134
    rmdir %BUILD_DIR% /s/q
Z
Zhou Wei 已提交
135 136 137
    git branch last_pr
)

138 139 140 141 142 143 144
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
145
    rmdir %BUILD_DIR% /s/q
146 147 148 149 150 151 152 153 154 155 156

    : clear third party cache every once in a while
    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
    )
157 158 159
    goto :mkbuild
)

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

176

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

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

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

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

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

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

224
rem ------PR CI windows check for MKL/GPU----------
225
:CASE_wincheck_mkl
226
set WITH_MKL=ON
227
set WITH_GPU=ON
228
set WITH_AVX=ON
229
set MSVC_STATIC_CRT=OFF
230
set ON_INFER=OFF
S
Sing_chan 已提交
231
set WITH_TENSORRT=ON
232

233 234 235
call :cmake || goto cmake_error
call :build || goto build_error
call :test_whl_pacakage || goto test_whl_pacakage_error
236
call :test_unit || goto test_unit_error
237
:: call :test_inference || goto test_inference_error
238
:: call :check_change_of_unittest || goto check_change_of_unittest_error
239 240
goto:success

241
rem ------PR CI windows check for OPENBLAS/CPU------
242
:CASE_wincheck_openblas
243
set WITH_MKL=OFF
244
set WITH_GPU=OFF
245
set WITH_AVX=OFF
246
set MSVC_STATIC_CRT=ON
247
set retry_times=1
Z
Zhou Wei 已提交
248
set ON_INFER=OFF
249

250 251 252
call :cmake || goto cmake_error
call :build || goto build_error
call :test_whl_pacakage || goto test_whl_pacakage_error
253
call :test_unit || goto test_unit_error
Z
Zhou Wei 已提交
254
:: call :test_inference || goto test_inference_error
255
:: call :check_change_of_unittest || goto check_change_of_unittest_error
256 257
goto:success

258 259 260 261 262 263 264
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
265 266 267
set WITH_TESTING=ON
set WITH_TENSORRT=ON
set WITH_INFERENCE_API_TEST=ON
268 269 270 271

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

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

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

rem ------Build windows no-avx whl package------
:CASE_build_no_avx_whl
set WITH_AVX=OFF
set ON_INFER=OFF
set CUDA_ARCH_NAME=All
294
set retry_times=4
295 296 297 298 299 300 301 302

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
303
set ON_INFER=ON
304 305
set WITH_PYTHON=OFF
set CUDA_ARCH_NAME=All
306 307
python %work_dir%\tools\remove_grad_op_and_kernel.py
if %errorlevel% NEQ 0 exit /b 1
308 309 310

call :cmake || goto cmake_error
call :build || goto build_error
311
call :test_inference || goto test_inference_error
312
call :test_inference_ut || goto test_inference_ut_error
313 314
call :zip_cc_file || goto zip_cc_file_error
call :zip_c_file || goto zip_c_file_error
315 316
goto:success

317 318 319 320
rem "Other configurations are added here"
rem :CASE_wincheck_others
rem call ...

321

322 323
rem ---------------------------------------------------------------------------------------------
:cmake
324
@ECHO OFF
325 326 327
echo    ========================================
echo    Step 1. Cmake ...
echo    ========================================
328

S
Sing_chan 已提交
329 330
rem set vs language to english to block showIncludes, this need vs has installed English language package.
set VSLANG=1033
331
rem Configure the environment for 64-bit builds. 'DISTUTILS_USE_SDK' indicates that the user has selected the compiler.
332 333 334 335 336
echo %task_name%|findstr wincheck_inference >nul && (
    call "D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
) || (
    call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
)
337
set DISTUTILS_USE_SDK=1
338 339
rem Windows 10 Kit bin dir
set PATH=C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64;%PATH%
340 341
rem Use 64-bit ToolSet to compile
set PreferredToolArchitecture=x64
342

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

346
if not defined CUDA_TOOLKIT_ROOT_DIR set CUDA_TOOLKIT_ROOT_DIR=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2
347
set PATH=%TENSORRT_ROOT:/=\%\lib;%CUDA_TOOLKIT_ROOT_DIR%\bin;%CUDA_TOOLKIT_ROOT_DIR%\libnvvp;%PATH%
348

349 350 351 352 353
rem install ninja if GENERATOR is Ninja
if %GENERATOR% == "Ninja" (
    pip install ninja
    if %errorlevel% NEQ 0 (
        echo pip install ninja failed!
354
        exit /b 5
355 356 357 358 359 360 361
    )
)

rem ------show summary of current GPU environment----------
cmake --version
if "%WITH_GPU%"=="ON" (
    nvcc --version
362
    nvidia-smi 2>NUL
363 364 365 366 367 368 369 370 371 372 373 374 375
)

rem ------pre install clcache and init config----------
rem pip install clcache --user
pip uninstall -y clcache
:: set USE_CLCACHE to enable clcache
rem set USE_CLCACHE=1
:: In some scenarios, CLCACHE_HARDLINK can save one file copy.
rem set CLCACHE_HARDLINK=1
:: If it takes more than 1000s to obtain the right to use the cache, an error will be reported
rem set CLCACHE_OBJECT_CACHE_TIMEOUT_MS=1000000
:: set maximum cache size to 20G
rem clcache.exe -M 21474836480
376

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

379
if "%WITH_TPCACHE%"=="OFF" (
380
    set THIRD_PARTY_PATH=%work_dir:\=/%/%BUILD_DIR%/third_party
381 382 383 384 385 386 387 388 389 390 391
    goto :cmake_impl
)

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
392 393 394 395 396 397 398 399 400
echo %task_name%|findstr build >nul && (
    set THIRD_PARTY_HOME=%cache_dir:\=/%/third_party
    set THIRD_PARTY_PATH=!THIRD_PARTY_HOME!/%md5%
    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. 
)

401
if "%WITH_GPU%"=="ON" (
402 403
    for /F %%# in ('dir /b /d "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\"') do set cuda_version=%%#
    set cuda_version=!cuda_version:~-4!
404
    set sub_dir=cuda!cuda_version:.=!
405
) else (
406
    set sub_dir=cpu
407
)
408
set THIRD_PARTY_HOME=%cache_dir:\=/%/third_party/%sub_dir%
409
set THIRD_PARTY_PATH=%THIRD_PARTY_HOME%/%md5%
410 411 412 413 414

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

:cmake_impl
437
echo cmake .. -G %GENERATOR% -DCMAKE_BUILD_TYPE=Release -DWITH_AVX=%WITH_AVX% -DWITH_GPU=%WITH_GPU% -DWITH_MKL=%WITH_MKL% ^
438
-DWITH_TESTING=%WITH_TESTING% -DWITH_PYTHON=%WITH_PYTHON% -DPYTHON_EXECUTABLE=%PYTHON_EXECUTABLE% -DON_INFER=%ON_INFER% ^
439
-DWITH_INFERENCE_API_TEST=%WITH_INFERENCE_API_TEST% -DTHIRD_PARTY_PATH=%THIRD_PARTY_PATH% ^
440
-DINFERENCE_DEMO_INSTALL_DIR=%INFERENCE_DEMO_INSTALL_DIR% -DWITH_STATIC_LIB=%WITH_STATIC_LIB% ^
441
-DWITH_TENSORRT=%WITH_TENSORRT% -DTENSORRT_ROOT="%TENSORRT_ROOT%" -DMSVC_STATIC_CRT=%MSVC_STATIC_CRT% ^
442
-DWITH_UNITY_BUILD=%WITH_UNITY_BUILD% -DCUDA_ARCH_NAME=%CUDA_ARCH_NAME% -DCUB_PATH=%THIRD_PARTY_HOME%/cub
443

444
cmake .. -G %GENERATOR% -DCMAKE_BUILD_TYPE=Release -DWITH_AVX=%WITH_AVX% -DWITH_GPU=%WITH_GPU% -DWITH_MKL=%WITH_MKL% ^
445
-DWITH_TESTING=%WITH_TESTING% -DWITH_PYTHON=%WITH_PYTHON% -DPYTHON_EXECUTABLE=%PYTHON_EXECUTABLE% -DON_INFER=%ON_INFER% ^
446
-DWITH_INFERENCE_API_TEST=%WITH_INFERENCE_API_TEST% -DTHIRD_PARTY_PATH=%THIRD_PARTY_PATH% ^
447
-DINFERENCE_DEMO_INSTALL_DIR=%INFERENCE_DEMO_INSTALL_DIR% -DWITH_STATIC_LIB=%WITH_STATIC_LIB% ^
448
-DWITH_TENSORRT=%WITH_TENSORRT% -DTENSORRT_ROOT="%TENSORRT_ROOT%" -DMSVC_STATIC_CRT=%MSVC_STATIC_CRT% ^
449
-DWITH_UNITY_BUILD=%WITH_UNITY_BUILD% -DCUDA_ARCH_NAME=%CUDA_ARCH_NAME% -DCUB_PATH=%THIRD_PARTY_HOME%/cub
450 451 452
goto:eof

:cmake_error
Z
Zhou Wei 已提交
453
echo 7 > %cache_dir%\error_code.txt
454
type %cache_dir%\error_code.txt
455
echo Cmake failed, will exit!
Z
Zhou Wei 已提交
456
exit /b 7
457 458 459

rem ---------------------------------------------------------------------------------------------
:build
460
@ECHO OFF
461
echo    ========================================
462
echo    Step 2. Build Paddle ...
463 464
echo    ========================================

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

468
set build_times=1
469 470 471 472 473 474 475
rem MSbuild will build third_party first to improve compiler stability.
if NOT %GENERATOR% == "Ninja" (
    goto :build_tp
) else (
    goto :build_paddle
)

476
:build_tp
477
echo Build third_party the %build_times% time:
478 479 480
if %GENERATOR% == "Ninja" (
    ninja third_party
) else (
481
    MSBuild /m /p:PreferredToolArchitecture=x64 /p:Configuration=Release /verbosity:%LOG_LEVEL% third_party.vcxproj
482
)
483

484 485
if %ERRORLEVEL% NEQ 0 (
    set /a build_times=%build_times%+1  
486
    if %build_times% GEQ %retry_times% (
Z
Zhou Wei 已提交
487
        exit /b 7
488
    ) else (
489
        echo Build third_party failed, will retry!
490 491 492
        goto :build_tp
    )
)
493
echo Build third_party successfully!
494 495

set build_times=1
496

497
:build_paddle
L
LoveAn 已提交
498
:: reset clcache zero stats for collect PR's actual hit rate
499
rem clcache.exe -z
L
LoveAn 已提交
500

501
rem -------clean up environment again-----------
502 503 504 505 506 507 508 509 510 511 512 513 514 515
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
516 517
taskkill /f /im eager_generator.exe /t 2>NUL
taskkill /f /im eager_op_function_generator.exe /t 2>NUL
518
wmic process where name="op_function_generator.exe" call terminate 2>NUL
519 520 521
wmic process where name="eager_generator.exe" call terminate 2>NUL
wmic process where name="eager_op_function_generator.exe" call terminate 2>NUL
wmic process where name="cmake.exe" call terminate 2>NUL
522 523
wmic process where name="cvtres.exe" call terminate 2>NUL
wmic process where name="rc.exe" call terminate 2>NUL
524 525
wmic process where name="cl.exe" call terminate 2>NUL
wmic process where name="lib.exe" call terminate 2>NUL
526

527
if "%WITH_TESTING%"=="ON" (
528
    for /F "tokens=1 delims= " %%# in ('tasklist ^| findstr /i test') do taskkill /f /im %%# /t
529 530
)

531
echo Build Paddle the %build_times% time:
532
if %GENERATOR% == "Ninja" (
533
    ninja all
534
) else (
535
    if "%WITH_CLCACHE%"=="OFF" (
Z
Zhou Wei 已提交
536
        MSBuild /m:%PARALLEL_PROJECT_COUNT% /p:PreferredToolArchitecture=x64 /p:TrackFileAccess=false /p:Configuration=Release /verbosity:%LOG_LEVEL% ALL_BUILD.vcxproj
537
    ) else (
538
        MSBuild /m:%PARALLEL_PROJECT_COUNT% /p:PreferredToolArchitecture=x64 /p:TrackFileAccess=false /p:CLToolExe=clcache.exe /p:CLToolPath=%PYTHON_ROOT%\Scripts /p:Configuration=Release /verbosity:%LOG_LEVEL% ALL_BUILD.vcxproj
539
    )
540 541
)

542
if %ERRORLEVEL% NEQ 0 (
543
    set /a build_times=%build_times%+1
544
    if %build_times% GEQ %retry_times% (
Z
Zhou Wei 已提交
545
        exit /b 7
546
    ) else (
547
        echo Build Paddle failed, will retry!
548 549 550
        goto :build_paddle
    )
)
551

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

587
echo Build Paddle successfully!
Z
Zhou Wei 已提交
588 589
echo 0 > %cache_dir%\error_code.txt
type %cache_dir%\error_code.txt
590

591
:: ci will collect sccache hit rate
592 593 594
if "%WITH_SCCACHE%"=="ON" (
    call :collect_sccache_hits
)
595

596 597 598
goto:eof

:build_error
Z
Zhou Wei 已提交
599
echo 7 > %cache_dir%\error_code.txt
600
type %cache_dir%\error_code.txt
601
echo Build Paddle failed, will exit!
602
exit /b 7
603 604 605

rem ---------------------------------------------------------------------------------------------
:test_whl_pacakage
606
@ECHO OFF
607 608 609
echo    ========================================
echo    Step 3. Test pip install whl package ...
echo    ========================================
610

611 612
setlocal enabledelayedexpansion

613 614 615
for /F %%# in ('wmic os get localdatetime^|findstr 20') do set end=%%#
set end=%end:~4,10%
call :timestamp "%start%" "%end%" "Build"
616

617 618 619
%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 已提交
620
for /F %%i in ("%whlsize%") do echo ipipe_log_param_Windows_PR_whl_Size: %%i
621

622 623
dir /s /b python\dist\*.whl > whl_file.txt
set /p PADDLE_WHL_FILE_WIN=< whl_file.txt
624

Z
Zhou Wei 已提交
625
@ECHO ON
Z
Zhou Wei 已提交
626 627
pip uninstall -y paddlepaddle
pip uninstall -y paddlepaddle-gpu
628
pip install %PADDLE_WHL_FILE_WIN% --user
Z
Zhou Wei 已提交
629 630 631
if %ERRORLEVEL% NEQ 0 (
    call paddle_winci\Scripts\deactivate.bat 2>NUL
    echo pip install whl package failed!
Z
Zhou Wei 已提交
632
    exit /b 1
Z
Zhou Wei 已提交
633
)
634

635
set CUDA_VISIBLE_DEVICES=0
Z
Zhou Wei 已提交
636
python %work_dir%\paddle\scripts\installation_validate.py
637 638 639
goto:eof

:test_whl_pacakage_error
640 641
::echo 1 > %cache_dir%\error_code.txt
::type %cache_dir%\error_code.txt
Z
Zhou Wei 已提交
642
echo Test import paddle failed, will exit!
Z
Zhou Wei 已提交
643
exit /b 1
644 645

rem ---------------------------------------------------------------------------------------------
646
:test_unit
Z
Zhou Wei 已提交
647
@ECHO ON
648 649 650
echo    ========================================
echo    Step 4. Running unit tests ...
echo    ========================================
651

652 653 654
: set CI_SKIP_CPP_TEST if only *.py changed
git diff --name-only %BRANCH% | findstr /V "\.py" || set CI_SKIP_CPP_TEST=ON

655 656 657
pip install -r %work_dir%\python\unittest_py\requirements.txt --user
if %ERRORLEVEL% NEQ 0 (
    echo pip install unittest requirements.txt failed!
658
    exit /b 5
659 660
)

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

664
set FLAGS_call_stack_level=2
665 666 667 668 669 670 671
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 已提交
672 673
pip install requests

674 675 676
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;^
%THIRD_PARTY_PATH:/=\%\install\mkldnn\bin;%THIRD_PARTY_PATH:/=\%\install\warpctc\bin;%PATH%
677 678

if "%WITH_GPU%"=="ON" (
679
    call:parallel_test_base_gpu
680
) else (
681 682 683 684 685 686 687 688 689 690 691 692 693 694
    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 
695 696 697 698
)

:parallel_test_base_gpu
echo    ========================================
699
echo    Running GPU unit tests in parallel way ...
700 701
echo    ========================================

Z
Zhou Wei 已提交
702 703 704 705 706 707 708
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 已提交
709

W
Wilber 已提交
710 711
:: For hypothesis tests(mkldnn op and inference pass), we set use 'ci' profile
set HYPOTHESIS_TEST_PROFILE=ci
Y
YUNSHEN XIE 已提交
712 713 714 715 716 717
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% ^
-DWITH_UNITY_BUILD=%WITH_UNITY_BUILD% -DCUDA_ARCH_NAME=%CUDA_ARCH_NAME% >> %work_dir%\win_cmake.sh
718

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

721 722 723 724 725 726
goto:eof

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

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

732 733
goto:eof

734
:test_unit_error
735 736
:: echo 8 > %cache_dir%\error_code.txt
:: type %cache_dir%\error_code.txt
737
echo Running unit tests failed, will exit!
738
exit /b 8
739 740 741

rem ---------------------------------------------------------------------------------------------
:test_inference
742
@ECHO OFF
743 744 745
echo    ========================================
echo    Step 5. Testing fluid library for inference ...
echo    ========================================
746

zhouweiwei2014's avatar
zhouweiwei2014 已提交
747 748 749 750 751 752 753 754 755
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
)

756
cd /d %work_dir%\paddle\fluid\inference\api\demo_ci
757
%cache_dir%\tools\busybox64.exe bash run.sh %work_dir:\=/% %WITH_MKL% %WITH_GPU% %cache_dir:\=/%/inference_demo %WITH_TENSORRT% %TENSORRT_ROOT% %MSVC_STATIC_CRT%
758 759 760
goto:eof

:test_inference_error
761 762
::echo 1 > %cache_dir%\error_code.txt
::type %cache_dir%\error_code.txt
763
echo Testing fluid library for inference failed!
Z
Zhou Wei 已提交
764
exit /b 1
765 766 767

rem ---------------------------------------------------------------------------------------------
:check_change_of_unittest
768
@ECHO OFF
769 770 771 772
echo    ========================================
echo    Step 6. Check whether deleting a unit test ...
echo    ========================================

773
cd /d %work_dir%\%BUILD_DIR%
774 775
echo set -e>  check_change_of_unittest.sh
echo set +x>> check_change_of_unittest.sh
776 777 778 779 780 781
echo GITHUB_API_TOKEN=%GITHUB_API_TOKEN% >>  check_change_of_unittest.sh
echo GIT_PR_ID=%AGILE_PULL_ID% >>  check_change_of_unittest.sh
echo BRANCH=%BRANCH%>>  check_change_of_unittest.sh
echo if [ "${GITHUB_API_TOKEN}" == "" ] ^|^| [ "${GIT_PR_ID}" == "" ];then>> check_change_of_unittest.sh
echo     exit 0 >>  check_change_of_unittest.sh
echo fi>>  check_change_of_unittest.sh
782
echo set -x>> check_change_of_unittest.sh
783 784 785 786 787
echo cat ^<^<EOF>>  check_change_of_unittest.sh
echo     ============================================ >>  check_change_of_unittest.sh
echo     Generate unit tests.spec of this PR.         >>  check_change_of_unittest.sh
echo     ============================================ >>  check_change_of_unittest.sh
echo EOF>>  check_change_of_unittest.sh
788
echo spec_path=$(pwd)/UNITTEST_PR.spec>>  check_change_of_unittest.sh
789
echo ctest -N ^| awk -F ':' '{print $2}' ^| sed '/^^$/d' ^| sed '$d' ^> ${spec_path}>>  check_change_of_unittest.sh
790 791
echo num=$(awk 'END{print NR}' ${spec_path})>> check_change_of_unittest.sh
echo echo "Windows 1 card TestCases count is $num">> check_change_of_unittest.sh
Z
zhangchunle 已提交
792
echo echo ipipe_log_param_Windows_1_Card_TestCases_Count: $num>> check_change_of_unittest.sh
793 794 795 796
echo UPSTREAM_URL='https://github.com/PaddlePaddle/Paddle'>>  check_change_of_unittest.sh
echo origin_upstream_url=`git remote -v ^| awk '{print $1, $2}' ^| uniq ^| grep upstream ^| awk '{print $2}'`>>  check_change_of_unittest.sh
echo if [ "$origin_upstream_url" == "" ]; then>>  check_change_of_unittest.sh
echo     git remote add upstream $UPSTREAM_URL.git>>  check_change_of_unittest.sh
797 798
echo elif [ "$origin_upstream_url" ^!= "$UPSTREAM_URL" ] ^\>>  check_change_of_unittest.sh
echo         ^&^& [ "$origin_upstream_url" ^!= "$UPSTREAM_URL.git" ]; then>>  check_change_of_unittest.sh
799 800 801 802 803 804 805
echo     git remote remove upstream>>  check_change_of_unittest.sh
echo     git remote add upstream $UPSTREAM_URL.git>>  check_change_of_unittest.sh
echo fi>>  check_change_of_unittest.sh
echo if [ ! -e "$(pwd)/../.git/refs/remotes/upstream/$BRANCH" ]; then>>  check_change_of_unittest.sh
echo     git fetch upstream $BRANCH # develop is not fetched>>  check_change_of_unittest.sh
echo fi>>  check_change_of_unittest.sh
echo git checkout -b origin_pr >>  check_change_of_unittest.sh
806
echo git checkout -f $BRANCH >>  check_change_of_unittest.sh
Z
Zhou Wei 已提交
807 808
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% ^
809 810
-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% ^
Z
Zhou Wei 已提交
811
-DWITH_TENSORRT=%WITH_TENSORRT% -DTENSORRT_ROOT="%TENSORRT_ROOT%" -DMSVC_STATIC_CRT=%MSVC_STATIC_CRT% ^
812
-DWITH_UNITY_BUILD=%WITH_UNITY_BUILD% -DCUDA_ARCH_NAME=%CUDA_ARCH_NAME%  >>  check_change_of_unittest.sh
813 814 815 816 817
echo cat ^<^<EOF>>  check_change_of_unittest.sh
echo     ============================================       >>  check_change_of_unittest.sh
echo     Generate unit tests.spec of develop.               >>  check_change_of_unittest.sh
echo     ============================================       >>  check_change_of_unittest.sh
echo EOF>>  check_change_of_unittest.sh
818
echo spec_path=$(pwd)/UNITTEST_DEV.spec>>  check_change_of_unittest.sh
819
echo ctest -N ^| awk -F ':' '{print $2}' ^| sed '/^^$/d' ^| sed '$d' ^> ${spec_path}>>  check_change_of_unittest.sh
820
echo unittest_spec_diff=`python $(pwd)/../tools/diff_unittest.py $(pwd)/UNITTEST_DEV.spec $(pwd)/UNITTEST_PR.spec`>>  check_change_of_unittest.sh
821 822
echo if [ "$unittest_spec_diff" ^!= "" ]; then>>  check_change_of_unittest.sh
echo     set +x>> check_change_of_unittest.sh
823
echo     approval_line=`curl -H "Authorization: token ${GITHUB_API_TOKEN}" https://api.github.com/repos/PaddlePaddle/Paddle/pulls/${GIT_PR_ID}/reviews?per_page=10000`>>  check_change_of_unittest.sh
824 825
echo     set -x>> check_change_of_unittest.sh
echo     if [ "$approval_line" ^!= "" ]; then>>  check_change_of_unittest.sh
826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841
echo         APPROVALS=`echo ${approval_line} ^|python $(pwd)/../tools/check_pr_approval.py 1 22165420 52485244 6836917`>>  check_change_of_unittest.sh
echo         echo "current pr ${GIT_PR_ID} got approvals: ${APPROVALS}">>  check_change_of_unittest.sh
echo         if [ "${APPROVALS}" == "FALSE" ]; then>>  check_change_of_unittest.sh
echo             echo "************************************"                >>  check_change_of_unittest.sh
echo             echo -e "It is forbidden to disable or delete the unit-test.\n"        >>  check_change_of_unittest.sh
echo             echo -e "If you must delete it temporarily, please add it to[https://github.com/PaddlePaddle/Paddle/wiki/Temporarily-disabled-Unit-Test]."     >>  check_change_of_unittest.sh
echo             echo -e "Then you must have one RD (kolinwei(recommended) or zhouwei25) approval for the deletion of unit-test. \n"                 >>  check_change_of_unittest.sh
echo             echo -e "If you have any problems about deleting unit-test, please read the specification [https://github.com/PaddlePaddle/Paddle/wiki/Deleting-unit-test-is-forbidden]. \n"   >>  check_change_of_unittest.sh
echo             echo -e "Following unit-tests are deleted in this PR: \n ${unittest_spec_diff} \n"     >>  check_change_of_unittest.sh
echo             echo "************************************"                >>  check_change_of_unittest.sh
echo             exit 1 >>  check_change_of_unittest.sh
echo          fi>>  check_change_of_unittest.sh
echo     else>>  check_change_of_unittest.sh
echo          exit 1 >>  check_change_of_unittest.sh
echo     fi>>  check_change_of_unittest.sh
echo fi>>  check_change_of_unittest.sh
842
echo git checkout -f origin_pr >>  check_change_of_unittest.sh
843
%cache_dir%\tools\busybox64.exe bash check_change_of_unittest.sh
844 845 846
goto:eof

:check_change_of_unittest_error
Z
Zhou Wei 已提交
847
exit /b 1
848

849 850 851 852 853 854 855
rem ---------------------------------------------------------------------------------------------
:test_inference_ut
@ECHO OFF
echo    ========================================
echo    Step 7. Testing fluid library with infer_ut for inference ...
echo    ========================================

856
cd /d %work_dir%\paddle\fluid\inference\tests\infer_ut
857 858 859 860 861 862 863 864 865
%cache_dir%\tools\busybox64.exe bash run.sh %work_dir:\=/% %WITH_MKL% %WITH_GPU% %cache_dir:\=/%/inference_demo %TENSORRT_ROOT% %MSVC_STATIC_CRT%
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

866
rem ---------------------------------------------------------------------------------------------
867
:zip_cc_file
868
cd /d %work_dir%\%BUILD_DIR%
869 870 871 872 873 874 875
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
876
    echo "Windows Paddle_Inference ZIP Size: !libsize_m!M"
877 878 879
)
goto:eof

880
:zip_cc_file_error
881 882
echo Tar inference library failed!
exit /b 1
883

884 885
rem ---------------------------------------------------------------------------------------------
:zip_c_file
886
cd /d %work_dir%\%BUILD_DIR%
887 888 889 890 891 892 893 894 895 896 897 898 899 900 901
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

902 903
:timestamp
setlocal enabledelayedexpansion
904
@ECHO OFF
905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935
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"
936
set tempTaskName=%~3
Z
zhangchunle 已提交
937
echo ipipe_log_param_Windows_%tempTaskName: =_%_Time: %cost_secs%s
938 939 940
goto:eof


941 942 943 944 945 946 947 948 949
: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%"
950
    echo ipipe_log_param_sccache_Hit_Hate: 0%
L
LoveAn 已提交
951
) else (
952 953
    set /a rate=!hits!*10000/!requests!
    echo "sccache hit rate: !rate:~0,-2!.!rate:~-2!%%"
954
    echo ipipe_log_param_sccache_Hit_Hate: !rate:~0,-2!.!rate:~-2!%%
L
LoveAn 已提交
955
)
956

L
LoveAn 已提交
957 958 959
goto:eof


960 961 962 963 964
rem ---------------------------------------------------------------------------------------------
:success
echo    ========================================
echo    Clean up environment  at the end ...
echo    ========================================
965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982
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
983 984
taskkill /f /im eager_generator.exe /t 2>NUL
taskkill /f /im eager_op_function_generator.exe /t 2>NUL
985
wmic process where name="op_function_generator.exe" call terminate 2>NUL
986 987
wmic process where name="eager_generator.exe" call terminate 2>NUL
wmic process where name="eager_op_function_generator.exe" call terminate 2>NUL
988
wmic process where name="cvtres.exe" call terminate 2>NUL
989
wmic process where name="rc.exe" call terminate 2>NUL
990 991
wmic process where name="cl.exe" call terminate 2>NUL
wmic process where name="lib.exe" call terminate 2>NUL
992
wmic process where name="python.exe" call terminate 2>NUL
993
if "%WITH_TESTING%"=="ON" (
994
    for /F "tokens=1 delims= " %%# in ('tasklist ^| findstr /i test') do taskkill /f /im %%# /t
995
)
996 997 998 999
echo Windows CI run successfully!
exit /b 0

ENDLOCAL