rem ***************************************************************************
rem Set types
rem ***************************************************************************

set TYP_ECU=%p01%

set TYP_MCAL=%p02%

set TYP_FAMILY=
set TYP_DERIV=

for /F "tokens=1,2 delims=_" %%a in ("%TYP_MCAL%") do (
  set TYP_FAMILY=%%a
  set TYP_DERIV=%%b
)

set TYP_CC=%p03%
set TYP_TEST=%p04%
set TYP_COVER=%p05%
set TYP_CORE=%p06%
set TYP_PRJ=%p07%
set TYP_OEM=%TYP_PRJ:~0,2%
set TYP_VAR=%p08%
set TYP_BUILD=%p09%
set TYP_KEY=%p10%
set TYP_RULE=%p11%

rem set TMPDIR environment variable to system temporary direction for Tasking compiler
if "%TYP_CC%"=="TRICORE_TASKING" (
  set TMPDIR=%TEMP%
)


set TYP_NAME=%p01%%p07%_%p08%_%p09%

echo TYP_ECU           : %TYP_ECU%
echo TYP_MCAL          : %TYP_MCAL%
echo TYP_FAMILY        : %TYP_FAMILY%
echo TYP_DERIV         : %TYP_DERIV%
echo TYP_CC            : %TYP_CC%
echo TYP_TEST          : %TYP_TEST%
echo TYP_COVER         : %TYP_COVER%
echo TYP_CORE          : %TYP_CORE%
echo TYP_PRJ           : %TYP_PRJ%
echo TYP_OEM           : %TYP_OEM%
echo TYP_VAR           : %TYP_VAR%
echo TYP_BUILD         : %TYP_BUILD%
echo TYP_NAME          : %TYP_NAME%
echo TYP_KEY           : %TYP_KEY%
echo TYP_RULE          : %TYP_RULE%

rem ***************************************************************************
rem Set rules.
rem ***************************************************************************

set RULE_CLEAN=FALSE
set RULE_PREPARE=FALSE
set RULE_BUILD_C=FALSE
set RULE_FINALIZE=FALSE
set RULE_PREPROCESS=FALSE

if "%TYP_RULE%"=="all"               set RULE_CLEAN=FALSE
if "%TYP_RULE%"=="all"               set RULE_PREPARE=TRUE
if "%TYP_RULE%"=="all"               set RULE_BUILD_C=TRUE
if "%TYP_RULE%"=="all"               set RULE_FINALIZE=TRUE

if "%TYP_RULE%"=="all_developer"     set RULE_CLEAN=FALSE
if "%TYP_RULE%"=="all_developer"     set RULE_PREPARE=TRUE
if "%TYP_RULE%"=="all_developer"     set RULE_BUILD_C=TRUE
if "%TYP_RULE%"=="all_developer"     set RULE_FINALIZE=TRUE

if "%TYP_RULE%"=="rebuild"           set RULE_CLEAN=TRUE
if "%TYP_RULE%"=="rebuild"           set RULE_PREPARE=TRUE
if "%TYP_RULE%"=="rebuild"           set RULE_BUILD_C=TRUE
if "%TYP_RULE%"=="rebuild"           set RULE_FINALIZE=TRUE

if "%TYP_RULE%"=="rebuild_delivery"  set RULE_CLEAN=TRUE
if "%TYP_RULE%"=="rebuild_delivery"  set RULE_PREPARE=TRUE
if "%TYP_RULE%"=="rebuild_delivery"  set RULE_BUILD_C=TRUE
if "%TYP_RULE%"=="rebuild_delivery"  set RULE_FINALIZE=TRUE

if "%TYP_RULE%"=="rebuild_developer" set RULE_CLEAN=TRUE
if "%TYP_RULE%"=="rebuild_developer" set RULE_PREPARE=TRUE
if "%TYP_RULE%"=="rebuild_developer" set RULE_BUILD_C=TRUE
if "%TYP_RULE%"=="rebuild_developer" set RULE_FINALIZE=TRUE

if "%TYP_RULE%"=="clean"             set RULE_CLEAN=TRUE
if "%TYP_RULE%"=="clean"             set RULE_PREPARE=FALSE
if "%TYP_RULE%"=="clean"             set RULE_BUILD_C=FALSE
if "%TYP_RULE%"=="clean"             set RULE_FINALIZE=FALSE

if "%TYP_BUILD%"=="prepro" (
  set RULE_CLEAN=FALSE
  set RULE_PREPARE=TRUE
  set RULE_BUILD_C=FALSE
  set RULE_FINALIZE=FALSE
  set RULE_PREPROCESS=TRUE
)

rem ***************************************************************************
rem Set paths and params.
rem ***************************************************************************

set PATH_BACKUP=%PATH%

set GLOBAL_BASEDIR=%cd%
if "%PATH_TOOLSGENERIC%X"=="X" set PATH_TOOLSGENERIC=%GLOBAL_BASEDIR%\..\..\..\ToolsGeneric

set CTCHOME=%PATH_TOOLSGENERIC%\DynamicCodeAnalysis\Coverage\Testwell\CTC_8_2_2
set PATH=%CTCHOME%;%PATH%

set MINGWBIN=%PATH_TOOLSGENERIC%\Compilation\PcGeneric\GCC\x86_64-w64-mingw32\8.2.0\bin
set PATH=%MINGWBIN%;%PATH%

set NUMBER_OF_JOBS=%NUMBER_OF_PROCESSORS%
if not "%GNUMAKE_MAX_JOBS%X"=="X" set NUMBER_OF_JOBS=%GNUMAKE_MAX_JOBS%

set GNUMAKE=%PATH_TOOLSGENERIC%\Utilities\CommonDomain\make\make.exe SHELL=cmd
if not exist %GNUMAKE% echo make.exe not found. Please check PATH_TOOLSGENERIC=%PATH_TOOLSGENERIC%

set GNUMAKEPARAMS=TYP_ECU=%TYP_ECU% TYP_MCAL=%TYP_MCAL% TYP_CC=%TYP_CC% TYP_TEST=%TYP_TEST% TYP_COVER=%TYP_COVER% TYP_OEM=%TYP_OEM% TYP_PRJ=%TYP_PRJ% TYP_VAR=%TYP_VAR% TYP_BUILD=%TYP_BUILD% TYP_NAME=%TYP_NAME% TYP_KEY=%TYP_KEY% TYP_RULE=%TYP_RULE%

rem ***************************************************************************
rem Echo the build parameters.
rem ***************************************************************************

echo.
echo GLOBAL_BASEDIR    : %GLOBAL_BASEDIR%
echo RULE_CLEAN        : %RULE_CLEAN%
echo RULE_PREPARE      : %RULE_PREPARE%
echo RULE_PREPROCESS   : %RULE_PREPROCESS%
echo RULE_BUILD_C      : %RULE_BUILD_C%
echo RULE_FINALIZE     : %RULE_FINALIZE%
echo GNUMAKE           : %GNUMAKE%
echo GNUMAKEPARAMS     : %GNUMAKEPARAMS%

rem ***************************************************************************
rem Execute the build rules.
rem ***************************************************************************

if "%RULE_CLEAN%"=="TRUE" (
  echo The rule SingleCore_Clean with jobs 1 is:
  echo %GNUMAKE% %GNUMAKEPARAMS% --jobs=1 -k -f %GLOBAL_BASEDIR%\..\Make\Make_000.gmk SingleCore_Clean
  echo.
  %GNUMAKE% %GNUMAKEPARAMS% --jobs=1 -k -f %GLOBAL_BASEDIR%\..\Make\Make_000.gmk SingleCore_Clean
)

if "%RULE_PREPARE%"=="TRUE" (
  echo +++ making tmp and bin directories (moved to within Make.bat)
  if not exist ..\Tmp                     mkdir ..\Tmp
  if not exist ..\Tmp\%TYP_NAME%          mkdir ..\Tmp\%TYP_NAME%
  if not exist ..\Tmp\%TYP_NAME%\err      mkdir ..\Tmp\%TYP_NAME%\err
  if not exist ..\Tmp\%TYP_NAME%\obj      mkdir ..\Tmp\%TYP_NAME%\obj
  if not exist ..\Tmp\%TYP_NAME%\lst      mkdir ..\Tmp\%TYP_NAME%\lst
  if not exist ..\Tmp\%TYP_NAME%\qac      mkdir ..\Tmp\%TYP_NAME%\qac
  if not exist ..\Tmp\%TYP_NAME%\prepro   mkdir ..\Tmp\%TYP_NAME%\prepro
  if not exist ..\Bin                     mkdir ..\Bin
  if not exist ..\Bin\%TYP_NAME%          mkdir ..\Bin\%TYP_NAME%
  echo The rule SingleCore_Prepare with jobs 1 is:
  echo %GNUMAKE% %GNUMAKEPARAMS% --jobs=1 -k -f %GLOBAL_BASEDIR%\..\Make\Make_000.gmk SingleCore_Prepare
  echo.
  %GNUMAKE% %GNUMAKEPARAMS% --jobs=1 -k -f %GLOBAL_BASEDIR%\..\Make\Make_000.gmk SingleCore_Prepare
)

if "%RULE_PREPROCESS%"=="TRUE" (
  echo The rule MultiCore_Build_PREPROCESS with jobs %NUMBER_OF_JOBS% is:
  echo %GNUMAKE% %GNUMAKEPARAMS% --jobs=%NUMBER_OF_JOBS% -k -f %GLOBAL_BASEDIR%\..\Make\Make_000.gmk MultiCore_Build_PREPROCESS
  echo.
  %GNUMAKE% %GNUMAKEPARAMS% --jobs=%NUMBER_OF_JOBS% -k -f %GLOBAL_BASEDIR%\..\Make\Make_000.gmk MultiCore_Build_PREPROCESS
)

if "%RULE_BUILD_C%"=="TRUE" (
  echo The rule MultiCore_Build_C with jobs %NUMBER_OF_JOBS% is:
  echo %GNUMAKE% %GNUMAKEPARAMS% --jobs=%NUMBER_OF_JOBS% -k -f %GLOBAL_BASEDIR%\..\Make\Make_000.gmk MultiCore_Build_C
  echo.
  %GNUMAKE% %GNUMAKEPARAMS% --jobs=%NUMBER_OF_JOBS% -k -f %GLOBAL_BASEDIR%\..\Make\Make_000.gmk MultiCore_Build_C
)

if "%RULE_FINALIZE%"=="TRUE" (
  echo The rule SingleCore_Finalize with jobs 1 is:
  echo %GNUMAKE% %GNUMAKEPARAMS% --jobs=1 -k -f %GLOBAL_BASEDIR%\..\Make\Make_000.gmk SingleCore_Finalize
  echo.
  %GNUMAKE% %GNUMAKEPARAMS% --jobs=1 -k -f %GLOBAL_BASEDIR%\..\Make\Make_000.gmk SingleCore_Finalize
)

echo.

set PATH=%PATH_BACKUP%

echo Get elapsed time...

for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
   set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
)


set /A elapsed=end-start

set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
if %mm% lss 10 set mm=0%mm%
if %ss% lss 10 set ss=0%ss%
if %cc% lss 10 set cc=0%cc%

echo Build Duration: %hh%:%mm%:%ss%,%cc%

echo.

echo Build finished
