:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: File Name: elf2c.bat
::
:: Description:
:: Basic batch script to convert the programmable sections of an *.elf file
:: into a basic c array. This uses objcopy and python.
::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Copyright 2019-2021 Cypress Semiconductor Corporation (an Infineon company)
:: or an affiliate of Cypress Semiconductor Corporation
::
:: Licensed under the Apache License, Version 2.0 (the "License");
:: you may not use this file except in compliance with the License.
:: You may obtain a copy of the License at
::
::      http://www.apache.org/licenses/LICENSE-2.0
::
:: Unless required by applicable law or agreed to in writing, software
:: distributed under the License is distributed on an "AS IS" BASIS,
:: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
:: See the License for the specific language governing permissions and
:: limitations under the License.
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:: Path to Elf2Bin tool
::set ELF2BIN=C:/Program Files (x86)/GNU Tools ARM Embedded/7 2018-q2-update/bin/arm-none-eabi-objcopy.exe
set ELF2BIN=%USERPROFILE%\ModusToolbox\tools_2.1\gcc-7.2.1\bin\arm-none-eabi-objcopy.exe

:: Check ELF2BIN
@if not exist "%ELF2BIN%" (
  @echo Error: %ELF2BIN% is not found, exiting
  @exit /b 1
)

:: Check python
@python --version
@if ERRORLEVEL 1 (
  @echo Error: python executable is not found, exiting
  @exit /b 1
)

:: Convert ELF to C
@call :elf2c %* || goto :error
@exit /b 0

:error
@echo Error: failed to convert ELF to C
@exit /b 1

:: This function converts ELF executable to C file
:: Additionally, it generates HEX file
:: arg#1: path to ELF file
:: arg#2: path to C file
:: arg#3: C preprocessor guard macro (optional)
:elf2c
@if "%2" == "" (
  @echo Error: expected 2 or 3 arguments: ^<path-to-elf^> ^<path-to-c^> [c-macro]
  exit /b 1
)
@set ELF_PATH=%1
@set HEX_PATH=%~dpn1.hex
@set BIN_PATH=%~dpn1.bin
@set C_PATH=%2
@set C_MACRO=%3
@if not exist "%ELF_PATH%" (
  @echo Error: %ELF_PATH% is not found, exiting
  goto :eof
)
"%ELF2BIN%" -O ihex "%ELF_PATH%" "%HEX_PATH%" || goto :eof
"%ELF2BIN%" -O binary "%ELF_PATH%" "%BIN_PATH%" || goto :eof
python "%~dp0bin2c.py" "%BIN_PATH%" "%C_PATH%" "%C_MACRO%" || goto :eof
@echo Successfully converted %ELF_PATH% to %C_PATH%
@goto :eof