zephyr/cmake/bintools/arcmwdt/elfconvert_command.cmake

79 lines
2.1 KiB
CMake
Raw Normal View History

# For MWDT 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.
# Handle stripping
if (STRIP_DEBUG OR STRIP_ALL)
if(STRIP_ALL)
set(obj_copy_strip "-qs")
elseif(STRIP_DEBUG)
set(obj_copy_strip "-ql")
endif()
execute_process(
COMMAND ${STRIP} ${obj_copy_strip}
${INFILE} ${FILEOUT})
endif()
# no support of --srec-len in mwdt
# Handle Input and Output target types
if(DEFINED OUTTARGET)
set(obj_copy_target_output "")
set(obj_copy_gap_fill "")
if(GAP_FILL)
set(obj_copy_gap_fill "-f;${GAP_FILL}")
endif()
# only mwdt's elf2hex supports gap fill
if(${OUTTARGET} STREQUAL "srec")
set(obj_copy_target_output "-m")
elseif(${OUTTARGET} STREQUAL "ihex")
set(obj_copy_target_output "-I")
elseif(${OUTTARGET} STREQUAL "binary")
set(obj_copy_target_output "-B")
endif()
execute_process(
COMMAND ${ELF2HEX} ${obj_copy_gap_fill} ${obj_copy_target_output}
-o ${OUTFILE} ${INFILE}
)
endif()
# Handle sections, if any
# 1. Section only selection(s)
set(obj_copy_sections_only "")
if(DEFINED ONLY_SECTION)
# There could be more than one, so need to check all args.
foreach(n RANGE ${CMAKE_ARGC})
foreach(argument ${CMAKE_ARGV${n}})
if(${argument} MATCHES "-DONLY_SECTION=(.*)")
list(APPEND obj_copy_sections_only "-sn;${CMAKE_MATCH_1}")
endif()
endforeach()
endforeach()
execute_process(
COMMAND ${ELF2BIN} -q ${obj_copy_sections_only}
${INFILE} ${OUTFILE}
)
endif()
# no support of rename sections in mwdt, here just use arc-elf32-objcopy temporarily
set(obj_copy_sections_rename "")
if(DEFINED RENAME_SECTION)
foreach(n RANGE ${CMAKE_ARGC})
foreach(argument ${CMAKE_ARGV${n}})
if(${argument} MATCHES "-DRENAME_SECTION=(.*)")
list(APPEND obj_copy_sections_rename "--rename-section;${CMAKE_MATCH_1}")
endif()
endforeach()
endforeach()
execute_process(
COMMAND ${OBJCOPY} ${obj_copy_sections_rename}
${INFILE} ${OUTFILE}
)
endif()
# no support of remove sections