| # 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() |