Merge branch 'bugfix/various_ldgen_fixes' into 'master'

Fix multiple ldgen issues

Closes #47

See merge request idf/esp-idf!3799
This commit is contained in:
Ivan Grokhotkov 2018-11-29 01:46:02 +08:00
commit 2c7fc07aae
4 changed files with 16 additions and 5 deletions

View file

@ -62,6 +62,8 @@ function(register_component)
set(include_type PUBLIC)
set_property(TARGET ${COMPONENT_TARGET} PROPERTY OUTPUT_NAME ${COMPONENT_NAME})
ldgen_generate_sections_info(${COMPONENT_TARGET})
else()
add_library(${COMPONENT_TARGET} INTERFACE) # header-only component
set(include_type INTERFACE)

View file

@ -22,7 +22,12 @@ function(ldgen_add_fragment_files target fragment_files)
endforeach()
set_property(TARGET ldgen APPEND PROPERTY FRAGMENT_FILES ${fragment_files_full_path})
endfunction()
# ldgen_generate_sections_info
#
# Generate sections info for specified target to be used in linker script generation
function(ldgen_generate_sections_info target)
get_filename_component(target_sections_info ${CMAKE_CURRENT_BINARY_DIR}/${target}.sections_info ABSOLUTE)
add_custom_command(

View file

@ -581,8 +581,6 @@ and names
"""
class SectionsInfo(dict):
PATH = Optional("/") + ZeroOrMore(Regex(r"[^/.]+") + Literal("/"))
__info = collections.namedtuple("__info", "filename content")
def __init__(self):
@ -591,8 +589,8 @@ class SectionsInfo(dict):
def add_sections_info(self, sections_info_file):
first_line = sections_info_file.readline()
archive = Literal("In archive").suppress() + SectionsInfo.PATH.suppress() + Fragment.ENTITY.setResultsName("archive") + Literal(":").suppress()
parser = archive
archive_path = Literal("In archive").suppress() + Regex(r"[^:]+").setResultsName("archive_path") + Literal(":").suppress()
parser = archive_path
results = None
@ -601,7 +599,8 @@ class SectionsInfo(dict):
except ParseException as p:
raise ParseException("File " + sections_info_file.name + " is not a valid sections info file. " + p.message)
self.sections[results.archive] = SectionsInfo.__info(sections_info_file.name, sections_info_file.read())
archive = os.path.basename(results.archive_path)
self.sections[archive] = SectionsInfo.__info(sections_info_file.name, sections_info_file.read())
def _get_infos_from_file(self, info):
# Object file line: '{object}: file format elf32-xtensa-le'

View file

@ -17,6 +17,8 @@
import argparse
import os
import traceback
import sys
from fragments import FragmentFileModel
from sdkconfig import SDKConfig
@ -95,6 +97,9 @@ def main():
print("linker script generation failed for %s\nERROR: %s" % (input_file.name, e.message))
# Delete the file so the entire build will fail; and not use an outdated script.
os.remove(output_file.name)
# Print traceback and exit
traceback.print_exc()
sys.exit(1)
if __name__ == "__main__":
main()