79 lines
2.1 KiB
CMake
79 lines
2.1 KiB
CMake
|
# 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
|