paddle_build.bat 38.1 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
set FLAGS_use_curand=True
666 667 668 669 670 671 672
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 已提交
673 674
pip install requests

675 676 677
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%
678 679

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

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

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

W
Wilber 已提交
711 712
:: For hypothesis tests(mkldnn op and inference pass), we set use 'ci' profile
set HYPOTHESIS_TEST_PROFILE=ci
Y
YUNSHEN XIE 已提交
713 714 715 716 717 718
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
719

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

722 723 724 725 726 727
goto:eof

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

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

733 734
goto:eof

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

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

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

757
cd /d %work_dir%\paddle\fluid\inference\api\demo_ci
758
%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%
759 760 761
goto:eof

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

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

774
cd /d %work_dir%\%BUILD_DIR%
775 776
echo set -e>  check_change_of_unittest.sh
echo set +x>> check_change_of_unittest.sh
777 778 779 780 781 782
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
783
echo set -x>> check_change_of_unittest.sh
784 785 786 787 788
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
789
echo spec_path=$(pwd)/UNITTEST_PR.spec>>  check_change_of_unittest.sh
790
echo ctest -N ^| awk -F ':' '{print $2}' ^| sed '/^^$/d' ^| sed '$d' ^> ${spec_path}>>  check_change_of_unittest.sh
791 792
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 已提交
793
echo echo ipipe_log_param_Windows_1_Card_TestCases_Count: $num>> check_change_of_unittest.sh
794 795 796 797
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
798 799
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
800 801 802 803 804 805 806
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
807
echo git checkout -f $BRANCH >>  check_change_of_unittest.sh
Z
Zhou Wei 已提交
808 809
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% ^
810 811
-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 已提交
812
-DWITH_TENSORRT=%WITH_TENSORRT% -DTENSORRT_ROOT="%TENSORRT_ROOT%" -DMSVC_STATIC_CRT=%MSVC_STATIC_CRT% ^
813
-DWITH_UNITY_BUILD=%WITH_UNITY_BUILD% -DCUDA_ARCH_NAME=%CUDA_ARCH_NAME%  >>  check_change_of_unittest.sh
814 815 816 817 818
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
819
echo spec_path=$(pwd)/UNITTEST_DEV.spec>>  check_change_of_unittest.sh
820
echo ctest -N ^| awk -F ':' '{print $2}' ^| sed '/^^$/d' ^| sed '$d' ^> ${spec_path}>>  check_change_of_unittest.sh
821
echo unittest_spec_diff=`python $(pwd)/../tools/diff_unittest.py $(pwd)/UNITTEST_DEV.spec $(pwd)/UNITTEST_PR.spec`>>  check_change_of_unittest.sh
822 823
echo if [ "$unittest_spec_diff" ^!= "" ]; then>>  check_change_of_unittest.sh
echo     set +x>> check_change_of_unittest.sh
824
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
825 826
echo     set -x>> check_change_of_unittest.sh
echo     if [ "$approval_line" ^!= "" ]; then>>  check_change_of_unittest.sh
827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842
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
843
echo git checkout -f origin_pr >>  check_change_of_unittest.sh
844
%cache_dir%\tools\busybox64.exe bash check_change_of_unittest.sh
845 846 847
goto:eof

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

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

857
cd /d %work_dir%\paddle\fluid\inference\tests\infer_ut
858 859 860 861 862 863 864 865 866
%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

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

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

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

903 904
:timestamp
setlocal enabledelayedexpansion
905
@ECHO OFF
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 936
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"
937
set tempTaskName=%~3
Z
zhangchunle 已提交
938
echo ipipe_log_param_Windows_%tempTaskName: =_%_Time: %cost_secs%s
939 940 941
goto:eof


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

L
LoveAn 已提交
958 959 960
goto:eof


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

ENDLOCAL