paddle_build.bat 23.8 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
22

23
rem -------clean up environment-----------
24
set work_dir=%cd%
Z
Zhou Wei 已提交
25
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
taskkill /f /im op_function_generator.exe
wmic process where name="op_function_generator.exe" call terminate
31 32

rem ------initialize common variable------
33
if not defined GENERATOR set GENERATOR="Visual Studio 14 2015 Win64"
34
if not defined BRANCH set BRANCH=develop
35 36
if not defined WITH_TENSORRT set WITH_TENSORRT=ON 
if not defined TENSORRT_ROOT set TENSORRT_ROOT="D:/TensorRT"
37 38 39 40 41 42
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
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
43
if not defined WITH_STATIC_LIB set WITH_STATIC_LIB=ON
Z
Zhou Wei 已提交
44
if not defined WITH_CACHE set WITH_CACHE=OFF
45
if not defined WITH_TPCACHE set WITH_TPCACHE=ON
46
if not defined WITH_UNITY_BUILD set WITH_UNITY_BUILD=OFF
47
if not defined INFERENCE_DEMO_INSTALL_DIR set INFERENCE_DEMO_INSTALL_DIR=%cache_dir:\=/%/inference_demo
48

49
rem -------set cache build work directory-----------
50
rmdir build\python /s/q
51
del build\CMakeCache.txt
52 53 54 55

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

56 57 58 59 60
if "%WITH_CACHE%"=="OFF" (
    rmdir build /s/q
    goto :mkbuild
)

Z
Zhou Wei 已提交
61 62
set error_code=0
type %cache_dir%\error_code.txt
63
: set /p error_code=< %cache_dir%\error_code.txt
Z
Zhou Wei 已提交
64 65 66 67 68
if %error_code% NEQ 0 (
    rmdir build /s/q
    goto :mkbuild
)

69
setlocal enabledelayedexpansion
Z
Zhou Wei 已提交
70 71 72
git show-ref --verify --quiet refs/heads/last_pr
if %ERRORLEVEL% EQU 0 (
    git diff HEAD last_pr --stat --name-only
73
    git diff HEAD last_pr --stat --name-only | findstr "cmake/[a-zA-Z]*\.cmake CMakeLists.txt"
Z
Zhou Wei 已提交
74 75 76 77 78 79 80
    git branch -D last_pr
    git branch last_pr
) else (
    rmdir build /s/q
    git branch last_pr
)

Z
Zhou Wei 已提交
81
:: git diff HEAD origin/develop --stat --name-only
82
:: git diff HEAD origin/develop --stat --name-only | findstr ".cmake CMakeLists.txt paddle_build.bat"
Z
Zhou Wei 已提交
83 84 85
:: if %ERRORLEVEL% EQU 0 (
::     rmdir build /s/q
:: )
86 87 88

:mkbuild
if not exist build (
Z
Zhou Wei 已提交
89
    echo Windows build cache FALSE
Z
zhangchunle 已提交
90
    set Windows_Build_Cache=FALSE
91
    mkdir build
Z
Zhou Wei 已提交
92 93
) else (
    echo Windows build cache TRUE
Z
zhangchunle 已提交
94
    set Windows_Build_Cache=TRUE
95
)
Z
zhangchunle 已提交
96
echo ipipe_log_param_Windows_Build_Cache: %Windows_Build_Cache%
97
cd /d build
98
dir .
Z
Zhou Wei 已提交
99
dir %cache_dir%
100
dir paddle\fluid\pybind\Release
101

102
rem ------initialize the python environment------
103
if not defined PYTHON_ROOT set PYTHON_ROOT=C:\Python37
104
set PYTHON_EXECUTABLE=%PYTHON_ROOT%\python.exe
105 106
set PATH=%PYTHON_ROOT%;%PYTHON_ROOT%\Scripts;%PATH%

Z
Zhou Wei 已提交
107 108 109 110 111
rem ToDo: virtual environment can't be deleted safely, some process not exit when task is canceled
rem Now use system python environment temporarily
rem %PYTHON_EXECUTABLE% -m pip install virtualenv
rem %PYTHON_EXECUTABLE% -m virtualenv paddle_winci
rem call paddle_winci\Scripts\activate.bat
112

113
rem ------pre install python requirement----------
114 115
where python
where pip
Z
Zhou Wei 已提交
116
pip install wheel --user
Z
Zhou Wei 已提交
117 118
pip install -r %work_dir%\python\requirements.txt --user
pip install -r %work_dir%\python\unittest_py\requirements.txt --user
119
if %ERRORLEVEL% NEQ 0 (
Z
Zhou Wei 已提交
120 121
    echo pip install requirements.txt failed!
    exit /b 7
122
)
123

W
wanghuancoder 已提交
124
rem ------pre install clcache and init config----------
125
pip install clcache --user
W
wanghuancoder 已提交
126 127 128 129 130 131 132 133 134
:: set USE_CLCACHE to enable clcache
set USE_CLCACHE=1
:: In some scenarios, CLCACHE_HARDLINK can save one file copy.
set CLCACHE_HARDLINK=1
:: If it takes more than 1000s to obtain the right to use the cache, an error will be reported
set CLCACHE_OBJECT_CACHE_TIMEOUT_MS=1000000
:: set maximum cache size to 20G
clcache.exe -M 21474836480

135
rem ------show summary of current environment----------
136 137 138 139
cmake --version
nvcc --version
where nvidia-smi
nvidia-smi
140 141
python %work_dir%\tools\summary_env.py
%cache_dir%\tools\busybox64.exe bash %work_dir%\tools\get_cpu_info.sh
142 143 144 145 146 147 148 149 150 151

goto :CASE_%1

echo "Usage: paddle_build.bat [OPTION]"
echo "OPTION:"
echo "wincheck_mkl: run Windows MKL/GPU/UnitTest CI tasks on Windows"
echo "wincheck_openbals: run Windows OPENBLAS/CPU CI tasks on Windows"
exit /b 1

:CASE_wincheck_mkl
152 153

rem ------initialize cmake variable for mkl------
154 155
set WITH_MKL=ON
set WITH_GPU=OFF
156
set MSVC_STATIC_CRT=ON
157

158 159 160
call :cmake || goto cmake_error
call :build || goto build_error
call :test_whl_pacakage || goto test_whl_pacakage_error
161
call :test_unit || goto test_unit_error
162
call :test_inference || goto test_inference_error
163
:: call :check_change_of_unittest || goto check_change_of_unittest_error
164 165 166
goto:success

:CASE_wincheck_openblas
167 168 169

rem ------initialize cmake variable for openblas------
set WITH_MKL=ON
170
set WITH_GPU=ON
171
set MSVC_STATIC_CRT=OFF
172

173 174 175
call :cmake || goto cmake_error
call :build || goto build_error
call :test_whl_pacakage || goto test_whl_pacakage_error
176
call :test_unit || goto test_unit_error
Z
Zhou Wei 已提交
177
call :test_inference || goto test_inference_error
178
:: call :check_change_of_unittest || goto check_change_of_unittest_error
179 180
goto:success

181 182 183 184
rem "Other configurations are added here"
rem :CASE_wincheck_others
rem call ...

185 186 187 188 189
rem ---------------------------------------------------------------------------------------------
:cmake
echo    ========================================
echo    Step 1. Cmake ...
echo    ========================================
190

191
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
192

193 194
for /F %%# in ('wmic os get localdatetime^|findstr 20') do set start=%%#
set start=%start:~4,10%
195 196 197 198 199 200 201 202

@ECHO ON
if not defined CUDA_TOOLKIT_ROOT_DIR set CUDA_TOOLKIT_ROOT_DIR=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0
set PATH=%CUDA_TOOLKIT_ROOT_DIR%\bin;%CUDA_TOOLKIT_ROOT_DIR%\libnvvp;%PATH%
set CUDA_PATH=%CUDA_TOOLKIT_ROOT_DIR%

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

203 204 205 206 207 208 209 210 211 212 213 214 215 216
: clear third party cache every once in a while
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
    if %day_now% EQU 20 (
        rmdir %cache_dir%\third_party_GPU/ /s/q
        rmdir %cache_dir%\third_party/ /s/q
    )
)

217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236
if "%WITH_TPCACHE%"=="OFF" (
    set THIRD_PARTY_PATH=%work_dir:\=/%/build/third_party
    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
if "%WITH_GPU%"=="ON" (
    set THIRD_PARTY_PATH=%cache_dir:\=/%/third_party_GPU/%md5%
) else (
    set THIRD_PARTY_PATH=%cache_dir:\=/%/third_party/%md5%
)

:cmake_impl
237 238
echo cmake .. -G %GENERATOR% -DWITH_AVX=%WITH_AVX% -DWITH_GPU=%WITH_GPU% -DWITH_MKL=%WITH_MKL% ^
-DWITH_TESTING=%WITH_TESTING% -DWITH_PYTHON=%WITH_PYTHON% -DPYTHON_EXECUTABLE=%PYTHON_EXECUTABLE% -DON_INFER=%ON_INFER% ^
239
-DWITH_INFERENCE_API_TEST=%WITH_INFERENCE_API_TEST% -DTHIRD_PARTY_PATH=%THIRD_PARTY_PATH% ^
240
-DINFERENCE_DEMO_INSTALL_DIR=%INFERENCE_DEMO_INSTALL_DIR% -DWITH_STATIC_LIB=%WITH_STATIC_LIB% ^
241 242
-DWITH_TENSORRT=%WITH_TENSORRT% -DTENSORRT_ROOT=%TENSORRT_ROOT% -DMSVC_STATIC_CRT=%MSVC_STATIC_CRT% ^
-DWITH_UNITY_BUILD=%WITH_UNITY_BUILD%
243

244 245
cmake .. -G %GENERATOR% -DWITH_AVX=%WITH_AVX% -DWITH_GPU=%WITH_GPU% -DWITH_MKL=%WITH_MKL% ^
-DWITH_TESTING=%WITH_TESTING% -DWITH_PYTHON=%WITH_PYTHON% -DPYTHON_EXECUTABLE=%PYTHON_EXECUTABLE% -DON_INFER=%ON_INFER% ^
246
-DWITH_INFERENCE_API_TEST=%WITH_INFERENCE_API_TEST% -DTHIRD_PARTY_PATH=%THIRD_PARTY_PATH% ^
247
-DINFERENCE_DEMO_INSTALL_DIR=%INFERENCE_DEMO_INSTALL_DIR% -DWITH_STATIC_LIB=%WITH_STATIC_LIB% ^
248 249
-DWITH_TENSORRT=%WITH_TENSORRT% -DTENSORRT_ROOT=%TENSORRT_ROOT% -DMSVC_STATIC_CRT=%MSVC_STATIC_CRT% ^
-DWITH_UNITY_BUILD=%WITH_UNITY_BUILD%
250 251 252
goto:eof

:cmake_error
Z
Zhou Wei 已提交
253
echo 7 > %cache_dir%\error_code.txt
254
type %cache_dir%\error_code.txt
255
echo Cmake failed, will exit!
Z
Zhou Wei 已提交
256
exit /b 7
257 258 259

rem ---------------------------------------------------------------------------------------------
:build
260
@ECHO OFF
261 262 263 264
echo    ========================================
echo    Step 2. Buile Paddle ...
echo    ========================================

265
for /F %%# in ('wmic cpu get NumberOfLogicalProcessors^|findstr [0-9]') do set /a PARALLEL_PROJECT_COUNT=%%#*9/10
266
set build_times=1
267
:build_tp
268
echo Build third_party the %build_times% time:
Z
Zhou Wei 已提交
269
msbuild /m /p:Configuration=Release /verbosity:quiet third_party.vcxproj
270 271
if %ERRORLEVEL% NEQ 0 (
    set /a build_times=%build_times%+1  
272
    if %build_times% GTR 2 (
Z
Zhou Wei 已提交
273
        exit /b 7
274
    ) else (
275
        echo Build third_party failed, will retry!
276 277 278
        goto :build_tp
    )
)
279
echo Build third_party successfully!
280 281 282

set build_times=1
:build_paddle
L
LoveAn 已提交
283 284 285
:: reset clcache zero stats for collect PR's actual hit rate
clcache.exe -z

286
echo Build Paddle the %build_times% time:
Z
Zhou Wei 已提交
287
if "%WITH_CLCACHE%"=="OFF" (
288
    msbuild /m:%PARALLEL_PROJECT_COUNT% /p:Configuration=Release /verbosity:normal paddle.sln
289
) else (
290
    msbuild /m:%PARALLEL_PROJECT_COUNT% /p:TrackFileAccess=false /p:CLToolExe=clcache.exe /p:CLToolPath=%PYTHON_ROOT%\Scripts /p:Configuration=Release /verbosity:normal paddle.sln
291 292
)

293
if %ERRORLEVEL% NEQ 0 (
294
    set /a build_times=%build_times%+1
295
    if %build_times% GTR 1 (
Z
Zhou Wei 已提交
296
        exit /b 7
297
    ) else (
298
        echo Build Paddle failed, will retry!
299 300 301
        goto :build_paddle
    )
)
302

303
echo Build Paddle successfully!
Z
Zhou Wei 已提交
304 305
echo 0 > %cache_dir%\error_code.txt
type %cache_dir%\error_code.txt
306

307 308 309
:: ci will collect clcache hit rate
goto :collect_clcache_hits

310 311 312
goto:eof

:build_error
Z
Zhou Wei 已提交
313
echo 7 > %cache_dir%\error_code.txt
314
type %cache_dir%\error_code.txt
315
echo Build Paddle failed, will exit!
316
exit /b 7
317 318 319

rem ---------------------------------------------------------------------------------------------
:test_whl_pacakage
320
@ECHO OFF
321 322 323
echo    ========================================
echo    Step 3. Test pip install whl package ...
echo    ========================================
324

325 326
setlocal enabledelayedexpansion

327 328 329
for /F %%# in ('wmic os get localdatetime^|findstr 20') do set end=%%#
set end=%end:~4,10%
call :timestamp "%start%" "%end%" "Build"
330
tree /F %cd%\paddle_inference_install_dir\paddle
331
%cache_dir%\tools\busybox64.exe du -h -d 0 -k %cd%\paddle_inference_install_dir\paddle\lib > lib_size.txt
332
set /p libsize=< lib_size.txt
333

334 335 336
for /F %%i in ("%libsize%") do (
    set /a libsize_m=%%i/1024
    echo "Windows Paddle_Inference Size: !libsize_m!M"
Z
zhangchunle 已提交
337
    echo ipipe_log_param_Windows_Paddle_Inference_Size: !libsize_m!M
338
)
339 340 341
%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 已提交
342
for /F %%i in ("%whlsize%") do echo ipipe_log_param_Windows_PR_whl_Size: %%i
343 344
dir /s /b python\dist\*.whl > whl_file.txt
set /p PADDLE_WHL_FILE_WIN=< whl_file.txt
345

Z
Zhou Wei 已提交
346
@ECHO ON
Z
Zhou Wei 已提交
347 348 349 350 351 352
pip uninstall -y paddlepaddle
pip uninstall -y paddlepaddle-gpu
pip install -U %PADDLE_WHL_FILE_WIN% --user
if %ERRORLEVEL% NEQ 0 (
    call paddle_winci\Scripts\deactivate.bat 2>NUL
    echo pip install whl package failed!
Z
Zhou Wei 已提交
353
    exit /b 1
Z
Zhou Wei 已提交
354
)
355

356
set CUDA_VISIBLE_DEVICES=0
Z
Zhou Wei 已提交
357
python %work_dir%\paddle\scripts\installation_validate.py
358 359 360
goto:eof

:test_whl_pacakage_error
361 362
::echo 1 > %cache_dir%\error_code.txt
::type %cache_dir%\error_code.txt
Z
Zhou Wei 已提交
363
echo Test import paddle failed, will exit!
Z
Zhou Wei 已提交
364
exit /b 1
365 366

rem ---------------------------------------------------------------------------------------------
367
:test_unit
Z
Zhou Wei 已提交
368
@ECHO ON
369 370 371
echo    ========================================
echo    Step 4. Running unit tests ...
echo    ========================================
372

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

376
set FLAGS_call_stack_level=2
377 378 379 380 381 382 383
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 已提交
384 385 386 387 388 389 390 391 392
pip install requests
python %work_dir%\tools\get_quick_disable_lt.py > Output
if %errorlevel%==0 (
    set /p disable_ut_quickly=<Output
    DEL Output
    ) else (
    set disable_ut_quickly=''
)

393 394 395
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%
396

397 398 399 400 401 402 403 404 405
if "%NIGHTLY_MODE%"=="ON" (
    set nightly_label="()"
    ) else (
    set nightly_label="(RUN_TYPE=NIGHTLY^|RUN_TYPE=DIST:NIGHTLY^|RUN_TYPE=EXCLUSIVE:NIGHTLY)"
    echo    ========================================
    echo    "Unittests with nightly labels  are only run at night"
    echo    ========================================
)

406 407 408 409 410 411 412 413
if "%WITH_GPU%"=="ON" (
    goto:parallel_test_base_gpu
) else (
    goto:parallel_test_base_cpu
)

:parallel_test_base_gpu
echo    ========================================
Z
Zhou Wei 已提交
414
echo    Running GPU unit tests...
415 416
echo    ========================================

Z
Zhou Wei 已提交
417 418 419 420 421 422 423
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
424

425
%cache_dir%\tools\busybox64.exe bash %work_dir%\tools\windows\run_unittests.sh %NIGHTLY_MODE%
Z
Zhou Wei 已提交
426

427 428 429 430 431 432
goto:eof

:parallel_test_base_cpu
echo    ========================================
echo    Running CPU unit tests in parallel way ...
echo    ========================================
433
ctest.exe -E "(%disable_ut_quickly%)" -LE %nightly_label% --output-on-failure -C Release -j 8 --repeat until-pass:4 after-timeout:4
434

435 436
goto:eof

437
:test_unit_error
438 439
:: echo 8 > %cache_dir%\error_code.txt
:: type %cache_dir%\error_code.txt
Z
Zhou Wei 已提交
440 441
for /F %%# in ('wmic os get localdatetime^|findstr 20') do set end=%%#
set end=%end:~4,10%
442
call :timestamp "%start%" "%end%" "1 card TestCases Total"
Z
Zhou Wei 已提交
443
call :timestamp "%start%" "%end%" "TestCases Total"
444
echo Running unit tests failed, will exit!
445
exit /b 8
446 447 448

rem ---------------------------------------------------------------------------------------------
:test_inference
449
@ECHO OFF
450 451 452
echo    ========================================
echo    Step 5. Testing fluid library for inference ...
echo    ========================================
453

454 455
for /F %%# in ('wmic os get localdatetime^|findstr 20') do set end=%%#
set end=%end:~4,10%
456
call :timestamp "%start%" "%end%" "1 card TestCases Total"
457
call :timestamp "%start%" "%end%" "TestCases Total"
458

459
cd %work_dir%\paddle\fluid\inference\api\demo_ci
460
%cache_dir%\tools\busybox64.exe bash run.sh %work_dir:\=/% %WITH_MKL% %WITH_GPU% %cache_dir:\=/%/inference_demo %TENSORRT_ROOT%/include %TENSORRT_ROOT%/lib %MSVC_STATIC_CRT%
461 462 463
goto:eof

:test_inference_error
464 465
::echo 1 > %cache_dir%\error_code.txt
::type %cache_dir%\error_code.txt
466
echo Testing fluid library for inference failed!
Z
Zhou Wei 已提交
467
exit /b 1
468 469 470

rem ---------------------------------------------------------------------------------------------
:check_change_of_unittest
471
@ECHO OFF
472 473 474 475 476
echo    ========================================
echo    Step 6. Check whether deleting a unit test ...
echo    ========================================

cd /d %work_dir%\build
477 478
echo set -e>  check_change_of_unittest.sh
echo set +x>> check_change_of_unittest.sh
479 480 481 482 483 484
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
485
echo set -x>> check_change_of_unittest.sh
486 487 488 489 490
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
491
echo spec_path=$(pwd)/UNITTEST_PR.spec>>  check_change_of_unittest.sh
492
echo ctest -N ^| awk -F ':' '{print $2}' ^| sed '/^^$/d' ^| sed '$d' ^> ${spec_path}>>  check_change_of_unittest.sh
493 494
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 已提交
495
echo echo ipipe_log_param_Windows_1_Card_TestCases_Count: $num>> check_change_of_unittest.sh
496 497 498 499
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
500 501
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
502 503 504 505 506 507 508
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
509
echo git checkout -f $BRANCH >>  check_change_of_unittest.sh
510 511
echo cmake .. -G %GENERATOR% -DWITH_AVX=%WITH_AVX% -DWITH_GPU=%WITH_GPU% -DWITH_MKL=%WITH_MKL% ^
-DWITH_TESTING=%WITH_TESTING% -DWITH_PYTHON=%WITH_PYTHON% -DPYTHON_EXECUTABLE=%PYTHON_EXECUTABLE% -DON_INFER=%ON_INFER% ^
512 513
-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% ^
514 515
-DWITH_TENSORRT=%WITH_TENSORRT% -DTENSORRT_ROOT=%TENSORRT_ROOT% -DMSVC_STATIC_CRT=%MSVC_STATIC_CRT% ^
-DWITH_UNITY_BUILD=%WITH_UNITY_BUILD% >>  check_change_of_unittest.sh
516 517 518 519 520
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
521
echo spec_path=$(pwd)/UNITTEST_DEV.spec>>  check_change_of_unittest.sh
522
echo ctest -N ^| awk -F ':' '{print $2}' ^| sed '/^^$/d' ^| sed '$d' ^> ${spec_path}>>  check_change_of_unittest.sh
523
echo unittest_spec_diff=`python $(pwd)/../tools/diff_unittest.py $(pwd)/UNITTEST_DEV.spec $(pwd)/UNITTEST_PR.spec`>>  check_change_of_unittest.sh
524 525
echo if [ "$unittest_spec_diff" ^!= "" ]; then>>  check_change_of_unittest.sh
echo     set +x>> check_change_of_unittest.sh
526
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
527 528
echo     set -x>> check_change_of_unittest.sh
echo     if [ "$approval_line" ^!= "" ]; then>>  check_change_of_unittest.sh
529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544
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
545
echo git checkout -f origin_pr >>  check_change_of_unittest.sh
546
%cache_dir%\tools\busybox64.exe bash check_change_of_unittest.sh
547 548 549
goto:eof

:check_change_of_unittest_error
Z
Zhou Wei 已提交
550
exit /b 1
551 552


553 554
:timestamp
setlocal enabledelayedexpansion
555
@ECHO OFF
556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586
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"
587
set tempTaskName=%~3
Z
zhangchunle 已提交
588
echo ipipe_log_param_Windows_%tempTaskName: =_%_Time: %cost_secs%s
589 590 591
goto:eof


L
LoveAn 已提交
592 593 594 595
:collect_clcache_hits
for /f "tokens=2,4" %%i in ('clcache.exe -s ^| findstr "entries hits"') do set %%i=%%j
if %hits% EQU 0 (
    echo "clcache hit rate: 0%%"
Z
zhangchunle 已提交
596
    echo ipipe_log_param_Clcache_Hit_Rate: 0%%
L
LoveAn 已提交
597 598 599
) else (
    set /a rate=%hits%*10000/%entries%
    echo "clcache hit rate: %rate:~0,-2%.%rate:~-2%%%"
Z
zhangchunle 已提交
600
    echo ipipe_log_param_Clcache_Hit_Hate: %rate:~0,-2%.%rate:~-2%%%
L
LoveAn 已提交
601 602 603 604
)
goto:eof


605 606 607 608 609 610 611 612 613 614 615 616 617 618 619
rem ---------------------------------------------------------------------------------------------
:success
echo    ========================================
echo    Clean up environment  at the end ...
echo    ========================================
taskkill /f /im cmake.exe  2>NUL
taskkill /f /im msbuild.exe 2>NUL
taskkill /f /im git.exe 2>NUL
taskkill /f /im cl.exe 2>NUL
taskkill /f /im lib.exe 2>NUL
taskkill /f /im link.exe 2>NUL
taskkill /f /im git-remote-https.exe 2>NUL
taskkill /f /im vctip.exe 2>NUL
taskkill /f /im cvtres.exe 2>NUL
taskkill /f /im rc.exe 2>NUL
620
wmic process where name="op_function_generator.exe" call terminate 2>NUL
Z
Zhou Wei 已提交
621
taskkill /f /im python.exe  2>NUL
622 623 624 625
echo Windows CI run successfully!
exit /b 0

ENDLOCAL