keepalive/flextimer/test/flextimer_build.bat
changeset 32 5c4486441ae6
equal deleted inserted replaced
31:c16e04725da3 32:5c4486441ae6
       
     1 ::---------------------------------------------------------------------------
       
     2 :: Helper for FlexTimer building and testing
       
     3 ::
       
     4 :: Commands:
       
     5 ::
       
     6 ::  BUILD_ALL       Build component to all targets
       
     7 ::  BUILD_ERROR     Inform user about failed build
       
     8 ::  BUILD_OK        Inform user about passed build
       
     9 ::  BUILD_TRACES    Build OST traces to targets WINSCW_UDEB and ARMV5_UDEB
       
    10 ::  CHECK_EPOCROOT  Check that epocroot is set correctly
       
    11 ::  CLEAN_NOLOGS    Reallyclean component, no output to screen
       
    12 ::  DEL_CTC_REPORTS Delete old CTC reports
       
    13 ::  GEN_CMT_REPORTS Generate CMT reports
       
    14 ::  GEN_COV_REPORTS Generate and deliver Coveruty Prevent reports
       
    15 ::  GEN_CS_REPORTS  Genrete CodeScanner reports
       
    16 ::  GEN_CTC_REPORTS Generate CTC reports
       
    17 ::  GEN_IMAGE       Make flash images
       
    18 ::  GEN_SYMBOLS     Generate symbol files
       
    19 ::  INSTRUMENT_CTC  Instrument CTC++ to component's WINSCW_UDEB target
       
    20 ::  RUN_TESTS       Compile test component, run test application and check 
       
    21 ::                  test results
       
    22 ::  SCHEDULER       Execute commands from QUEUE
       
    23 ::  SHOW_HELP       Show help of the script
       
    24 ::  START_UP        Enable delayed environment expansion
       
    25 ::  TEST_FAILED     Inform user about failed tests
       
    26 ::  THE_END         Stop execution of the script
       
    27 ::
       
    28 ::---------------------------------------------------------------------------
       
    29 :: Change history:
       
    30 ::
       
    31 :: 1.0  01-Apr-2010     First version in SVN
       
    32 ::
       
    33 ::---------------------------------------------------------------------------
       
    34 
       
    35 @echo off
       
    36 setlocal
       
    37 
       
    38 set VERSION=1.0 [01/04/2010 15:08:42]
       
    39 
       
    40 :: The source path is one dir up from the BAT's location
       
    41 for /f %%i in ("%0") do set SOURCE_PATH=%%~dpi..
       
    42 
       
    43 set MAKE_PATH=%SOURCE_PATH%\group\bld.inf
       
    44 set TEST_MAKE_PATH=%SOURCE_PATH%\test\testflextimer\group\bld.inf
       
    45 
       
    46 :: Commands for the component
       
    47 set CMD_BUILD_ALL=sbs -b %MAKE_PATH%
       
    48 set CMD_BUILD_CLEAN=sbs -b %MAKE_PATH% reallyclean
       
    49 set CMD_BUILD_TRACE=sbs -b %MAKE_PATH% -c winscw_udeb.tracecompiler -c armv5_udeb.tracecompiler
       
    50 
       
    51 :: Commands for test component
       
    52 set CMD_TEST_BUILD=sbs -b %TEST_MAKE_PATH% -c winscw_udeb -c armv5
       
    53 set CMD_TEST_RUN=start /wait %EPOCROOT%epoc32\release\winscw\udeb\atsinterface.exe -dtextshell -- -testmodule testflextimer
       
    54 
       
    55 :: Commands and settings for CTC++
       
    56 set CTC_OUTFILE=MON
       
    57 set CTC_OUTPATH=.
       
    58 set CMD_CTC_BUILD=ctcwrap -i m -v -2comp sbs.bat -b %MAKE_PATH% -c winscw_udeb
       
    59 set CMD_CTC_CLEAN=sbs -b %MAKE_PATH% -c winscw_udeb reallyclean
       
    60 set CMD_CTC_GEN=ctcpost %CTC_OUTPATH%\%CTC_OUTFILE%.sym %CTC_OUTPATH%\%CTC_OUTFILE%.dat ^| ctc2html
       
    61 
       
    62 :: Command for CMT
       
    63 set CMD_CMT_GEN=dir /s /b %SOURCE_PATH%\*.cpp %SOURCE_PATH%\*.inl ^| findstr /I /V "\\test\\" ^| cmt ^| cmt2html
       
    64 
       
    65 :: Commands and settings for Coverity Prevent
       
    66 set COV_OUTPATH=coverity
       
    67 set CMD_COV_BUILD=cov-build --dir %COV_OUTPATH% sbs -b %MAKE_PATH%
       
    68 set CMD_COV_ANALYZE=cov-analyze --dir %COV_OUTPATH% --all --symbian
       
    69 set CMD_COV_DELIVER=cov-commit-defects --dir %COV_OUTPATH% --remote trwsim47 --user cadsw --password cov3rity --product flextimer --cva
       
    70 set CMD_COV_SHOW_RESULTS=start http://trwsim47:5467
       
    71 
       
    72 :: Commands for iMaker
       
    73 set CMD_IMAKE_CORE=imaker vasco_ui core USE_SYMGEN=0
       
    74 set CMD_IMAKE_ROFS2=imaker vasco_ui rofs2 USE_SYMGEN=0
       
    75 set CMD_IMAKE_ROFS3=imaker vasco_ui rofs3 USE_SYMGEN=0
       
    76 set CMD_IMAKE_UDAERASE=imaker vasco_ui udaerase USE_SYMGEN=0
       
    77 set CMD_IMAKE_CORE_SYMBOLS=imaker vasco_ui romsymbol
       
    78 set CMD_IMAKE_ROFS2_SYMBOLS=imaker vasco_ui rofs2-symbol
       
    79 set CMD_IMAKE_ROFS3_SYMBOLS=imaker vasco_ui rofs3-symbol
       
    80 
       
    81 :: Commands and settings for CodeScanner
       
    82 set CODESCANNER_PATH=cs_output
       
    83 set CMD_CODESCANNER=codescanner -t off
       
    84 
       
    85 :: Python script for checking from test logs are tests passed
       
    86 set PY_ALL_TESTS_PASSED=^
       
    87 import re,sys;^
       
    88 file = open('%EPOCROOT%/epoc32/winscw/c/logs/testframework/testreport.txt');^
       
    89 txt = '\n'.join(file);^
       
    90 reg1 = re.search('^\s*(?:Passed cases\: (\d+))$', txt, re.MULTILINE);^
       
    91 reg2 = re.search('^\s*(?:Total cases\: (\d+))$', txt, re.MULTILINE);^
       
    92 sys.exit(0 if reg1.group(1)==reg2.group(1) else 1)
       
    93 
       
    94 :: Python script for parsing test result summary from test logs
       
    95 set PY_PARSE_TEST_RESULTS=^
       
    96 import re;^
       
    97 file = open('%EPOCROOT%/epoc32/winscw/c/logs/testframework/testreport.txt');^
       
    98 txt = '\n'.join(file);^
       
    99 reg = re.findall('^\s*(.*cases\: \d+)$', txt, re.MULTILINE);^
       
   100 print '\n'.join(reg);^
       
   101 file.close()
       
   102 
       
   103 ::---------------------------------------------------------------------------
       
   104 :: Parse input
       
   105 ::---------------------------------------------------------------------------
       
   106 
       
   107 if not "%1"=="__INITIALIZED__" (
       
   108     goto START_UP
       
   109 
       
   110 ) else (
       
   111 
       
   112     if "%2"=="" (
       
   113         set QUEUE=CHECK_EPOCROOT CLEAN_NOLOGS BUILD_ALL BUILD_TRACES RUN_TESTS GEN_CMT_REPORTS GEN_CS_REPORTS
       
   114         goto SCHEDULER
       
   115 
       
   116     ) else if /i "%2"=="build" (
       
   117         set QUEUE=CHECK_EPOCROOT CLEAN_NOLOGS BUILD_ALL BUILD_TRACES
       
   118         goto SCHEDULER
       
   119 
       
   120     ) else if /i "%2"=="ctc" (
       
   121         rem - atsinterface does not work with CTC instrumentation, use consoleui instead
       
   122         rem - NOTE Emulator has to be closed manually
       
   123         set CMD_TEST_RUN=start /wait %EPOCROOT%epoc32\release\winscw\udeb\consoleui.exe -dtextshell -- -testmodule testflextimer -run all
       
   124         set QUEUE=CHECK_EPOCROOT INSTRUMENT_CTC DEL_CTC_REPORTS RUN_TESTS GEN_CTC_REPORTS
       
   125         goto SCHEDULER
       
   126 
       
   127     ) else if /i "%2"=="cov" (
       
   128         set QUEUE=CHECK_EPOCROOT CLEAN_NOLOGS GEN_COV_REPORTS
       
   129         goto SCHEDULER
       
   130 
       
   131     ) else if /i "%2"=="image" (
       
   132         set QUEUE=CHECK_EPOCROOT GEN_IMAGE GEN_SYMBOLS
       
   133         goto SCHEDULER
       
   134 
       
   135     ) else if /i "%2"=="test" (
       
   136         set QUEUE=CHECK_EPOCROOT GEN_CMT_REPORTS GEN_CS_REPORTS
       
   137         goto SCHEDULER
       
   138 
       
   139     ) else if /i "%2"=="help" goto SHOW_HELP
       
   140 )
       
   141 
       
   142 echo Illegal parameter %2
       
   143 
       
   144 goto SHOW_HELP
       
   145 
       
   146 ::---------------------------------------------------------------------------
       
   147 :START_UP
       
   148 ::---------------------------------------------------------------------------
       
   149 :: Start a command shell with delayed environment expansion
       
   150 
       
   151 cmd.exe /V:ON /C %0 __INITIALIZED__ %1
       
   152 
       
   153 goto THE_END
       
   154 
       
   155 ::---------------------------------------------------------------------------
       
   156 :SCHEDULER
       
   157 ::---------------------------------------------------------------------------
       
   158 :: Run the build commands. Eat commands from QUEUE one by one
       
   159 
       
   160 for /f "tokens=1*" %%i in ( "!QUEUE!" ) do (
       
   161     set QUEUE=%%j
       
   162     rem echo ====================================================================
       
   163     rem echo %%i
       
   164     rem echo ====================================================================
       
   165     goto %%i
       
   166 )
       
   167 
       
   168 goto BUILD_OK
       
   169 
       
   170 ::---------------------------------------------------------------------------
       
   171 :BUILD_ALL
       
   172 ::---------------------------------------------------------------------------
       
   173 
       
   174 call %CMD_BUILD_ALL%
       
   175 if not "%errorlevel%"=="0" goto BUILD_ERROR
       
   176 
       
   177 goto SCHEDULER
       
   178 
       
   179 ::---------------------------------------------------------------------------
       
   180 :BUILD_TRACES
       
   181 ::---------------------------------------------------------------------------
       
   182 
       
   183 call %CMD_BUILD_TRACE%
       
   184 if not "%errorlevel%"=="0" goto BUILD_ERROR
       
   185 
       
   186 goto SCHEDULER
       
   187 
       
   188 ::---------------------------------------------------------------------------
       
   189 :CLEAN_NOLOGS
       
   190 ::---------------------------------------------------------------------------
       
   191 :: Reallyclean FlexTimer component without showing compilation logs on screen
       
   192 
       
   193 call %CMD_BUILD_CLEAN% > NUL 2>&1
       
   194 
       
   195 goto SCHEDULER
       
   196 
       
   197 ::---------------------------------------------------------------------------
       
   198 :INSTRUMENT_CTC
       
   199 ::---------------------------------------------------------------------------
       
   200 :: Instrument FlexTimer WINSCW UDEB with CTC++
       
   201 
       
   202 :: Remove old CTC symbols
       
   203 del %CTC_OUTPATH%\%CTC_OUTFILE%.sym > NUL 2>&1
       
   204 
       
   205 :: Clean old compilation
       
   206 call %CMD_CTC_CLEAN% > NUL 2>&1
       
   207 
       
   208 :: Instrument the code
       
   209 call %CMD_CTC_BUILD%
       
   210 if not "%errorlevel%"=="0" goto BUILD_ERROR
       
   211 
       
   212 goto SCHEDULER
       
   213 
       
   214 ::---------------------------------------------------------------------------
       
   215 :DEL_CTC_REPORTS
       
   216 ::---------------------------------------------------------------------------
       
   217 :: Delete CTC generated test reports. SYM-file is deleted before 
       
   218 :: instrumenting CTC.
       
   219 
       
   220 del %CTC_OUTPATH%\%CTC_OUTFILE%.dat > NUL 2>&1
       
   221 rmdir /q /s %CTC_OUTPATH%\CTCHTML > NUL 2>&1
       
   222 
       
   223 goto SCHEDULER
       
   224 
       
   225 ::---------------------------------------------------------------------------
       
   226 :RUN_TESTS
       
   227 ::---------------------------------------------------------------------------
       
   228 
       
   229 :: Compile test component
       
   230 call %CMD_TEST_BUILD%
       
   231 if not "%errorlevel%"=="0" goto BUILD_ERROR
       
   232 
       
   233 echo Testing...
       
   234 
       
   235 :: Run test application
       
   236 %CMD_TEST_RUN%
       
   237 if not "%errorlevel%"=="0" goto TEST_FAILED
       
   238 
       
   239 :: Verify test results
       
   240 call python -c "%PY_ALL_TESTS_PASSED%"
       
   241 if not "%errorlevel%"=="0" goto TEST_FAILED
       
   242 
       
   243 goto SCHEDULER
       
   244 
       
   245 ::---------------------------------------------------------------------------
       
   246 :GEN_CTC_REPORTS
       
   247 ::---------------------------------------------------------------------------
       
   248 
       
   249 :: Generate CTC++ reports
       
   250 call %CMD_CTC_GEN% 
       
   251 if not "%errorlevel%"=="0" goto BUILD_ERROR
       
   252 
       
   253 goto SCHEDULER
       
   254 
       
   255 ::---------------------------------------------------------------------------
       
   256 :GEN_CMT_REPORTS
       
   257 ::---------------------------------------------------------------------------
       
   258 
       
   259 call %CMD_CMT_GEN%
       
   260 
       
   261 goto SCHEDULER
       
   262 
       
   263 ::---------------------------------------------------------------------------
       
   264 :GEN_COV_REPORTS
       
   265 ::---------------------------------------------------------------------------
       
   266 
       
   267 :: Delete the old results
       
   268 rmdir /q /s %COV_OUTPATH% > NUL 2>&1
       
   269 
       
   270 :: Build with Coverity Prevent
       
   271 call %CMD_COV_BUILD%
       
   272 if not "%errorlevel%"=="0" goto BUILD_ERROR
       
   273 
       
   274 :: Analyze the code
       
   275 call %CMD_COV_ANALYZE%
       
   276 if not "%errorlevel%"=="0" goto BUILD_ERROR
       
   277 
       
   278 :: Deliver the results
       
   279 call %CMD_COV_DELIVER%
       
   280 if not "%errorlevel%"=="0" goto BUILD_ERROR
       
   281 
       
   282 :: Open the results
       
   283 %CMD_COV_SHOW_RESULTS%
       
   284 
       
   285 goto SCHEDULER
       
   286 
       
   287 ::---------------------------------------------------------------------------
       
   288 :GEN_CS_REPORTS
       
   289 ::---------------------------------------------------------------------------
       
   290 
       
   291 set __CODESCANNER_LAST_DIR=
       
   292 set __CODESCANNER_PARAMETERS=
       
   293 
       
   294 :: Find all inc and src -directories that are not in codescanner results nor
       
   295 :: test code. Add '-i' parameter to every directory except the last one. (As
       
   296 :: codescanner -h states.)
       
   297 
       
   298 for /f "usebackq" %%i in (`dir /s /b %SOURCE_PATH%\src %SOURCE_PATH%\inc ^| findstr /V "\\test\\ \\%CODESCANNER_PATH%\\"`) do (
       
   299     if defined __CODESCANNER_LAST_DIR set __CODESCANNER_PARAMETERS=!__CODESCANNER_PARAMETERS! -i !__CODESCANNER_LAST_DIR!
       
   300     set __CODESCANNER_LAST_DIR=%%i
       
   301 )
       
   302 
       
   303 %CMD_CODESCANNER% %__CODESCANNER_PARAMETERS% %__CODESCANNER_LAST_DIR% %CODESCANNER_PATH%
       
   304 if not "%errorlevel%"=="0" goto BUILD_ERROR
       
   305 
       
   306 :: Open the results
       
   307 start %CODESCANNER_PATH%\problemIndex.html
       
   308 
       
   309 goto SCHEDULER
       
   310 
       
   311 ::---------------------------------------------------------------------------
       
   312 :CHECK_EPOCROOT
       
   313 ::---------------------------------------------------------------------------
       
   314 
       
   315 :: Check that the given parameter is a root dir.
       
   316 for /f %%i in ("%EPOCROOT%") do (
       
   317     if /i not "%EPOCROOT%"=="%%~di\" (
       
   318         echo EPOCROOT is invalid: %EPOCROOT%
       
   319         echo It should be a root of certain drive letter e.g. T:\
       
   320         goto BUILD_ERROR
       
   321     )
       
   322 )
       
   323 
       
   324 goto SCHEDULER
       
   325 
       
   326 ::---------------------------------------------------------------------------
       
   327 :GEN_IMAGE
       
   328 ::---------------------------------------------------------------------------
       
   329 
       
   330 :: Go to the SDK drive
       
   331 for /f %%i in ("%EPOCROOT%") do %%~di
       
   332 
       
   333 :: Make image
       
   334 call %CMD_IMAKE_CORE%
       
   335 if not "%errorlevel%"=="0" goto BUILD_ERROR
       
   336 
       
   337 call %CMD_IMAKE_ROFS2%
       
   338 if not "%errorlevel%"=="0" goto BUILD_ERROR
       
   339 
       
   340 call %CMD_IMAKE_ROFS3%
       
   341 if not "%errorlevel%"=="0" goto BUILD_ERROR
       
   342 
       
   343 call %CMD_IMAKE_UDAERASE%
       
   344 if not "%errorlevel%"=="0" goto BUILD_ERROR
       
   345 
       
   346 echo.
       
   347 echo ======================================================================
       
   348 echo IMAGES ARE READY
       
   349 echo ======================================================================
       
   350 echo.
       
   351 
       
   352 goto SCHEDULER
       
   353 
       
   354 ::---------------------------------------------------------------------------
       
   355 :GEN_SYMBOLS
       
   356 ::---------------------------------------------------------------------------
       
   357 
       
   358 :: Go to the SDK drive
       
   359 for /f %%i in ("%EPOCROOT%") do %%~di
       
   360 
       
   361 :: Generate symbols
       
   362 call %CMD_IMAKE_CORE_SYMBOLS%
       
   363 if not "%errorlevel%"=="0" goto BUILD_ERROR
       
   364 
       
   365 call %CMD_IMAKE_ROFS2_SYMBOLS%
       
   366 if not "%errorlevel%"=="0" goto BUILD_ERROR
       
   367 
       
   368 call %CMD_IMAKE_ROFS3_SYMBOLS%
       
   369 if not "%errorlevel%"=="0" goto BUILD_ERROR
       
   370 
       
   371 goto SCHEDULER
       
   372 
       
   373 ::---------------------------------------------------------------------------
       
   374 :BUILD_ERROR
       
   375 ::---------------------------------------------------------------------------
       
   376 
       
   377 echo.
       
   378 echo Build failed
       
   379 echo.
       
   380 
       
   381 goto THE_END
       
   382 
       
   383 ::---------------------------------------------------------------------------
       
   384 :BUILD_OK
       
   385 ::---------------------------------------------------------------------------
       
   386 
       
   387 echo.
       
   388 echo Build OK
       
   389 echo.
       
   390 
       
   391 goto THE_END
       
   392 
       
   393 ::---------------------------------------------------------------------------
       
   394 :TEST_FAILED
       
   395 ::---------------------------------------------------------------------------
       
   396 
       
   397 echo.
       
   398 echo Testing failed
       
   399 echo.
       
   400 
       
   401 call python -c "%PY_PARSE_TEST_RESULTS%"
       
   402 
       
   403 goto THE_END
       
   404 
       
   405 ::---------------------------------------------------------------------------
       
   406 :SHOW_HELP
       
   407 ::---------------------------------------------------------------------------
       
   408 echo.
       
   409 echo A script for building and testing FlexTimer. Version %VERSION%
       
   410 echo.
       
   411 echo Usage:
       
   412 echo    flextimer_build ^<option^>
       
   413 echo.
       
   414 echo Options:
       
   415 echo.
       
   416 echo    ^<none^>  Build component (with traces), build test component and run
       
   417 echo            tests, generate static analysis
       
   418 echo.
       
   419 echo    build   Rebuild component (with traces)
       
   420 echo.
       
   421 echo    cov     Generate and deliver Coverity Prevent report
       
   422 echo.
       
   423 echo    ctc     Instrument CTC++, build test component and run tests, 
       
   424 echo            generate test coverity reports
       
   425 echo.
       
   426 echo    image   Create CORE and ROFS1, ROFS2, ROFS3 and UDAERASE flash images
       
   427 echo.
       
   428 echo    help    Show this help
       
   429 echo.
       
   430 
       
   431 ::---------------------------------------------------------------------------
       
   432 :THE_END
       
   433 ::---------------------------------------------------------------------------
       
   434 endlocal