zephyr/cmake/bintools/armclang/elfconvert_command.cmake

55 lines
1.7 KiB
CMake

# For armclang the elfconvert command is made into a script.
# Reason for that is because not a single command covers all use cases,
# and it must therefore be possible to call individual commands, depending
# on the arguments used.
cmake_minimum_required(VERSION 3.20.0)
# Handle stripping
if (STRIP_DEBUG OR STRIP_ALL)
set(obj_copy_target_output "--elf")
if(STRIP_ALL)
set(obj_copy_strip "--strip=all")
elseif(STRIP_DEBUG)
set(obj_copy_strip "--strip=debug")
endif()
endif()
# Unknown support of --srec-len in arm-ds
# Handle Input and Output target types
if(DEFINED OUTTARGET)
if(${OUTTARGET} STREQUAL "srec")
set(obj_copy_target_output "--m32")
elseif(${OUTTARGET} STREQUAL "ihex")
set(obj_copy_target_output "--i32combined")
elseif(${OUTTARGET} STREQUAL "binary")
set(obj_copy_target_output "--bincombined")
if(GAP_FILL)
set(obj_copy_gap_fill "--bincombined_padding=1,${GAP_FILL}")
endif()
endif()
endif()
if(DEFINED ONLY_SECTION AND "${OUTTARGET}" STREQUAL "binary")
set(obj_copy_target_output "--bin")
set(outfile_dir .dir)
string(REGEX REPLACE "^[\.]" "" only_section_clean "${ONLY_SECTION}")
endif()
# Note: fromelf is a little special regarding bin output, as each section gets
# its own file. This means that when only a specific section is required
# then that section must be moved to correct location.
execute_process(
COMMAND ${FROMELF}
${obj_copy_strip}
${obj_copy_gap_fill} ${obj_copy_target_output}
--output ${OUTFILE}${outfile_dir} ${INFILE}
)
if(DEFINED ONLY_SECTION AND "${OUTTARGET}" STREQUAL "binary")
execute_process(
COMMAND ${CMAKE_COMMAND} -E copy
${OUTFILE}${outfile_dir}/${only_section_clean} ${OUTFILE}
)
endif()