paddle_build.bat 23.9 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
117 118
pip install --force-reinstall -r %work_dir%\python\requirements.txt --user
pip install --force-reinstall -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 126
rem pip install clcache --user
pip uninstall -y clcache
W
wanghuancoder 已提交
127
:: set USE_CLCACHE to enable clcache
128
rem set USE_CLCACHE=1
W
wanghuancoder 已提交
129
:: In some scenarios, CLCACHE_HARDLINK can save one file copy.
130
rem set CLCACHE_HARDLINK=1
W
wanghuancoder 已提交
131
:: If it takes more than 1000s to obtain the right to use the cache, an error will be reported
132
rem set CLCACHE_OBJECT_CACHE_TIMEOUT_MS=1000000
W
wanghuancoder 已提交
133
:: set maximum cache size to 20G
134
rem clcache.exe -M 21474836480
W
wanghuancoder 已提交
135

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

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
153 154

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

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

:CASE_wincheck_openblas
168 169 170

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

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

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

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

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

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

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

204 205 206 207 208 209 210 211 212 213 214 215 216 217
: 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
    )
)

218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237
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
238 239
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% ^
240
-DWITH_INFERENCE_API_TEST=%WITH_INFERENCE_API_TEST% -DTHIRD_PARTY_PATH=%THIRD_PARTY_PATH% ^
241
-DINFERENCE_DEMO_INSTALL_DIR=%INFERENCE_DEMO_INSTALL_DIR% -DWITH_STATIC_LIB=%WITH_STATIC_LIB% ^
242 243
-DWITH_TENSORRT=%WITH_TENSORRT% -DTENSORRT_ROOT=%TENSORRT_ROOT% -DMSVC_STATIC_CRT=%MSVC_STATIC_CRT% ^
-DWITH_UNITY_BUILD=%WITH_UNITY_BUILD%
244

245 246
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% ^
247
-DWITH_INFERENCE_API_TEST=%WITH_INFERENCE_API_TEST% -DTHIRD_PARTY_PATH=%THIRD_PARTY_PATH% ^
248
-DINFERENCE_DEMO_INSTALL_DIR=%INFERENCE_DEMO_INSTALL_DIR% -DWITH_STATIC_LIB=%WITH_STATIC_LIB% ^
249 250
-DWITH_TENSORRT=%WITH_TENSORRT% -DTENSORRT_ROOT=%TENSORRT_ROOT% -DMSVC_STATIC_CRT=%MSVC_STATIC_CRT% ^
-DWITH_UNITY_BUILD=%WITH_UNITY_BUILD%
251 252 253
goto:eof

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

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

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

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

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

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

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

308
:: ci will collect clcache hit rate
309
rem goto :collect_clcache_hits
310

311 312 313
goto:eof

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

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

326 327
setlocal enabledelayedexpansion

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

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

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

357

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

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

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

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

378
set FLAGS_call_stack_level=2
379 380 381 382 383 384 385
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 已提交
386 387 388 389 390 391 392 393 394
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=''
)

395 396 397
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%
398

399 400 401 402 403 404 405 406 407
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    ========================================
)

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

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

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

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

429 430 431 432 433 434
goto:eof

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

437 438
goto:eof

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

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

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

461
cd %work_dir%\paddle\fluid\inference\api\demo_ci
462
%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%
463 464 465
goto:eof

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

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

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

:check_change_of_unittest_error
Z
Zhou Wei 已提交
552
exit /b 1
553 554


555 556
:timestamp
setlocal enabledelayedexpansion
557
@ECHO OFF
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 587 588
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"
589
set tempTaskName=%~3
Z
zhangchunle 已提交
590
echo ipipe_log_param_Windows_%tempTaskName: =_%_Time: %cost_secs%s
591 592 593
goto:eof


L
LoveAn 已提交
594 595 596 597
: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 已提交
598
    echo ipipe_log_param_Clcache_Hit_Rate: 0%%
L
LoveAn 已提交
599 600 601
) else (
    set /a rate=%hits%*10000/%entries%
    echo "clcache hit rate: %rate:~0,-2%.%rate:~-2%%%"
Z
zhangchunle 已提交
602
    echo ipipe_log_param_Clcache_Hit_Hate: %rate:~0,-2%.%rate:~-2%%%
L
LoveAn 已提交
603 604 605 606
)
goto:eof


607 608 609 610 611 612 613 614 615 616 617 618 619 620 621
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
622
wmic process where name="op_function_generator.exe" call terminate 2>NUL
Z
Zhou Wei 已提交
623
taskkill /f /im python.exe  2>NUL
624 625 626 627
echo Windows CI run successfully!
exit /b 0

ENDLOCAL