# 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: # - _command : Name of executable to call # - _flag : Flags that must always be used with this command # - _flag_infile : Flag to use when specifying the file to process # - _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 ${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_compress_debug_sections: Flag that is used to compress debug sections 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: # 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_compress_debug_sections "") 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 ">;" )