zephyr/cmake/bintools/bintools_template.cmake
Anas Nashif 47a673f2f4 build: generate symbols file
Optional way for generating symbols file using binutils. This file will
be generated on demand for tests which will then be parsed by twister to
create an accurate test plan from the listed testcase/suites.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2022-07-11 11:56:39 +02:00

174 lines
10 KiB
CMake

# This template file can be used as a starting point for implementing support
# for additional tools for reading and/or conversion of elf files.
#
# Although GNU bintools is used as name, then the template can be used to
# support other tools.
#
# Overview of bintools used commands:
# - memusage : Tool for reporting target memory usage
# (if linker support memusage reporting leave this property empty)
# - disassembly : Tool for disassemble the target
# - elfconvert : Tool for converting from elf into another format.
# - readelf : Tool for elf file processing
# - strip : Tool for symbol stripping
# - symbols : Tool for listing symbols in a binary
#
# Each tool will have the following minimum properties:
# - <tool>_command : Name of executable to call
# - <tool>_flag : Flags that must always be used with this command
# - <tool>_flag_infile : Flag to use when specifying the file to process
# - <tool>_flag_outfile : Flag to use to specify the result of the processing.
#
# each tool might require more flags depending on its use, as example:
# - elfconvert_flag_section_remove : Flag to use when specifying sections to remove
# - readelf_flags_headers : Flag to use to specify headers should be displayed
#
# If a given tool / flag / feature is not supported, then keep the property empty.
# As bintools_template.cmake default has empty flags, then it is sufficient to
# only set those flags that a given set of tools support.
#
# Commands will default echo a message if called, but no command has been defined.
# This is done, so that unexpected calls to non-implemented command can be easily detected.
# To disable the message, simply silence the command with:
# set_property(TARGET bintools PROPERTY <command>_command ${CMAKE_COMMAND} -E echo "")
#
# The bintools properties are made generic so that implementing support for an
# additional native tool should be as easy as possible.
# However, there might be tools and/or use cases where the current property
# scheme does not cover the exact needs. For those use-cases it is possible
# to implement the call to a native tool inside a CMake script.
# For example, to call a custom script for elfconvert command, one can specify:
# set_property(TARGET bintools PROPERTY elfconvert_command ${CMAKE_COMMAND})
# set_property(TARGET bintools PROPERTY elfconvert_flag "")
# set_property(TARGET bintools PROPERTY elfconvert_flag_final -P custom_elfconvert.cmake)
# set_property(TARGET bintools PROPERTY elfconvert_flag_strip_all "-DSTRIP_ALL=True")
# set_property(TARGET bintools PROPERTY elfconvert_flag_infile "-DINFILE=")
# set_property(TARGET bintools PROPERTY elfconvert_flag_outfile "-DOUT_FILE=")
#
#
# bintools property overview of all commands:
#
# Command:
# - memusage : Name of command to execute
# Note: For gcc compilers this command is not used,
# instead a linker flag is used for this)
# memusage_flag : Flags that must always be applied when calling memusage command
# memusage_flag_final : Flags that must always be applied last at the memusage command
# memusage_flag_infile: Flag for specifying the input file
# memusage_byproducts : Byproducts (files) generated when calling memusage
#
#
# - elfconvert : Name of command for elf file conversion.
# For GNU binary utilities this is objcopy
# elfconvert_formats : Formats supported by this command.
# elfconvert_flag : Flags that must always be applied when calling elfconvert command
# elfconvert_flag_final : Flags that must always be applied last at the elfconvert command
# elfconvert_flag_strip_all : Flag that is used for stripping all symbols when converting
# elfconvert_flag_strip_debug : Flag that is used to strip debug symbols when converting
# elfconvert_flag_intarget : Flag for specifying target used for infile
# elfconvert_flag_outtarget : Flag for specifying target to use for converted file.
# Target value must be one of those listed described by: elfconvert_formats
# elfconvert_flag_section_remove: Flag for specifying that following section must be removed
# elfconvert_flag_section_only : Flag for specifying that only the following section should be kept
# elfconvert_flag_section_rename: Flag for specifying that following section must be renamed
# elfconvert_flag_gapfill : Flag for specifying the value to fill in gaps between sections
# elfconvert_flag_srec_len : Flag for specifying maximum length of Srecord values
# elfconvert_flag_infile : Flag for specifying the input file
# elfconvert_flag_outfile : Flag for specifying the output file
# For tools that prints to standard out, this should be ">" to indicate redirection
#
#
# - disassembly : Name of command for disassembly of files
# For GNU binary utilities this is objdump
# disassembly_flag : Flags that must always be applied when calling disassembly command
# disassembly_flag_final : Flags that must always be applied last at the disassembly command
# disassembly_flag_inline_source : Flag to use to display source code mixed with disassembly
# disassembly_flag_all : Flag to use for disassemble everything, including zeroes
# disassembly_flag_infile : Flag for specifying the input file
# disassembly_flag_outfile : Flag for specifying the output file
# For tools that prints to standard out, this should be ">" to indicate redirection
#
#
# - readelf : Name of command for reading elf files.
# For GNU binary utilities this is readelf
# readelf_flag : Flags that must always be applied when calling readelf command
# readelf_flag_final : Flags that must always be applied last at the readelf command
# readelf_flag_headers : Flag to use for specifying ELF headers should be read
# readelf_flag_infile : Flag for specifying the input file
# readelf_flag_outfile : Flag for specifying the output file
# For tools that prints to standard out, this should be ">" to indicate redirection
#
#
# - strip: Name of command for stripping symbols
# For GNU binary utilities this is strip
# strip_flag : Flags that must always be applied when calling strip command
# strip_flag_final : Flags that must always be applied last at the strip command
# strip_flag_all : Flag for removing all symbols
# strip_flag_debug : Flag for removing debug symbols
# strip_flag_dwo : Flag for removing dwarf sections
# strip_flag_infile : Flag for specifying the input file
# strip_flag_outfile : Flag for specifying the output file
#
# - symbols : Name of command for printing out symbols
# For GNU binary utilities this is nm
# symbols_command : empty
# symbols_final : empty
# symbols_infile : ELF file name
# symbols_outfile : output file
set(COMMAND_NOT_SUPPORTED "command not supported on bintools: ")
# If memusage is supported as post-build command, set memusage_type to: command
# and this value to the command to execute in the form: <command> <arguments>
# Note: If memusage is supported during linking, please use:
# set_property(TARGET linker ... ) found in cmake/linker/linker_flags.cmake instead
set_property(TARGET bintools PROPERTY memusage_command "")
set_property(TARGET bintools PROPERTY memusage_flag "")
set_property(TARGET bintools PROPERTY memusage_flag_final "")
set_property(TARGET bintools PROPERTY memusage_byproducts "")
# disassembly command to use for generation of list file.
set_property(TARGET bintools PROPERTY disassembly_command ${CMAKE_COMMAND} -E echo "disassembly ${COMMAND_NOT_SUPPORTED} ${BINTOOLS}")
set_property(TARGET bintools PROPERTY disassembly_flag "")
set_property(TARGET bintools PROPERTY disassembly_flag_final "")
set_property(TARGET bintools PROPERTY disassembly_flag_inline_source "")
set_property(TARGET bintools PROPERTY disassembly_flag_infile "")
set_property(TARGET bintools PROPERTY disassembly_flag_outfile "")
# elfconvert to use for transforming an elf file into another format, such as intel hex, s-rec, binary, etc.
set_property(TARGET bintools PROPERTY elfconvert_command ${CMAKE_COMMAND} -E echo "elfconvert ${COMMAND_NOT_SUPPORTED} ${BINTOOLS}")
set_property(TARGET bintools PROPERTY elfconvert_formats "")
set_property(TARGET bintools PROPERTY elfconvert_flag "")
set_property(TARGET bintools PROPERTY elfconvert_flag_final "")
set_property(TARGET bintools PROPERTY elfconvert_flag_outtarget "")
set_property(TARGET bintools PROPERTY elfconvert_flag_section_remove "")
set_property(TARGET bintools PROPERTY elfconvert_flag_gapfill "")
set_property(TARGET bintools PROPERTY elfconvert_flag_infile "")
set_property(TARGET bintools PROPERTY elfconvert_flag_outfile "")
# readelf for processing of elf files.
set_property(TARGET bintools PROPERTY readelf_command ${CMAKE_COMMAND} -E echo "readelf ${COMMAND_NOT_SUPPORTED} ${BINTOOLS}")
set_property(TARGET bintools PROPERTY readelf_flag "")
set_property(TARGET bintools PROPERTY readelf_flag_final "")
set_property(TARGET bintools PROPERTY readelf_flag_headers "")
set_property(TARGET bintools PROPERTY readelf_flag_infile "")
set_property(TARGET bintools PROPERTY readelf_flag_outfile "")
# strip command for stripping symbols
set_property(TARGET bintools PROPERTY strip_command ${CMAKE_COMMAND} -E echo "strip ${COMMAND_NOT_SUPPORTED} ${BINTOOLS}")
set_property(TARGET bintools PROPERTY strip_flag "")
set_property(TARGET bintools PROPERTY strip_flag_final "")
set_property(TARGET bintools PROPERTY strip_flag_all "")
set_property(TARGET bintools PROPERTY strip_flag_debug "")
set_property(TARGET bintools PROPERTY strip_flag_dwo "")
set_property(TARGET bintools PROPERTY strip_flag_infile "")
set_property(TARGET bintools PROPERTY strip_flag_outfile "")
# list symbols in a binary
set_property(TARGET bintools PROPERTY symbols_command ${CMAKE_NM})
set_property(TARGET bintools PROPERTY symbols_flag "")
set_property(TARGET bintools PROPERTY symbols_final "")
set_property(TARGET bintools PROPERTY symbols_infile "")
set_property(TARGET bintools PROPERTY symbols_outfile ">;" )