Re: How to generate symbols list on GNU Arm Embedded Toolchain

Bill Deegan <[email protected]>
Newsgroups gmane.comp.programming.tools.scons.user
Message-ID <CAEyG4CFirzjX7m9EP4wqQLzmx9eBkDe68D_dSJJ9U9XgZiLtgg@mail.gmail.com>
Can it read a compilation database (ala clang/cmake/ninja/etc)?

On Tue, Aug 4, 2020 at 5:32 AM Marco Pastorelli <[email protected]>
wrote:

> Hi Hans,
>
> Yes, I spent some time with “CDT build output parser” trying also the
> various options like “heuristics” but when I check the parser log file I
> always find some unresolved name or include.
> So quite often on medium/large projects I get files with a wrong code
> highlight.
>
> I guess an effective solution can be the generation of symbols directly
> from the compiler, this way there’s no need to rely on IDE features.
>
> I feel I’m not far, but I need some help to preserve the include
> hierarchy… any suggestions?
>
> Thanks!
> Marco
>
> On Sat, 1 Aug 2020 at 15:15, Hans-Christian Wild <[email protected]>
> wrote:
>
>> Have you tried using the CDT build output parser? I would assume it's in
>> there by default. SCons is verbose by default (echos all build commands),
>> so this should be enough for the parser to pick up all includes, defines
>> etc. automatically.
>>
>> -Hans
>>
>> On Sat, Aug 1, 2020 at 10:36 AM Marco Pastorelli <[email protected]>
>> wrote:
>>
>>> Hi Bill,
>>>
>>> I'm using MCUXpresso, it's an Eclipse-based IDE provided by NXP
>>>
>>> Thanks!
>>> Marco
>>>
>>> On Fri, 31 Jul 2020 at 18:35, Bill Deegan <[email protected]>
>>> wrote:
>>>
>>>> Which IDE are you using?
>>>>
>>>> On Fri, Jul 31, 2020 at 7:52 AM Marco Pastorelli <[email protected]>
>>>> wrote:
>>>>
>>>>> Hi all!
>>>>>
>>>>> I’m using SCons to build an Arm Cortex-M7 project based on GNU Arm
>>>>> Embedded Toolchain.
>>>>> Other than compiling the project, I’d like to generate the list of
>>>>> symbols to import from my IDE to get an accurate code highlighting.
>>>>> I wrote some code to generate the list of header files included in the
>>>>> projects, then I’m trying to get the symbol form every header file.
>>>>> The main issue I’m facing is that the include hierarchy is not
>>>>> preserved, so for example I got errors from freertos because FreeRTOS.h
>>>>> must appear in source files before include task.h.
>>>>>
>>>>> Does anybody know how to fix this problem or a different method to
>>>>> generate the symbols list?
>>>>>
>>>>> Thanks! Below a snippet of my code
>>>>> Marco
>>>>>
>>>>>
>>>>> def generate_include_list(env, target, source):
>>>>>     """create a file to store include paths in GNU style, to be loaded
>>>>> with @"""
>>>>>     paths = []
>>>>>     for p in env['CPPPATH']:
>>>>>         path = Path(p)
>>>>>         try:
>>>>>             path.is_dir()
>>>>>             paths.append(str(path))
>>>>>         except OSError:
>>>>>             pass
>>>>>     with open('include.list', 'w') as fileout:
>>>>>         for path in paths:
>>>>>             fileout.write(' -I ' + path.replace('\\', '/'))
>>>>>
>>>>>
>>>>> def cleanup_header_list(env, target, source):
>>>>>     """get rid of the toolchain comments, we only need a list of real
>>>>> file paths"""
>>>>>     with open('tmp_header_file.list', 'r') as filein:
>>>>>         lines = []
>>>>>         for line in filein:
>>>>>             path = Path(line.strip())
>>>>>             try:
>>>>>                 path.is_file()
>>>>>                 lines.append(str(path))
>>>>>             except OSError:
>>>>>                 pass
>>>>>     lines.reverse()
>>>>>     with open('header_file.list', 'w') as fileout:
>>>>>         for line in reversed(lines):
>>>>>             fileout.write(line.replace('\\', '/') + '\n')
>>>>>
>>>>>
>>>>> # get the list of the header files (except toolchain header files)
>>>>> # in case also the toolchain header files are needed, use the option -M
>>>>> env.Command(
>>>>>     target='tmp_header_file.list',
>>>>>     source='',
>>>>>     action=[generate_include_list, '$CC -H -MM src/main.c
>>>>> @include.list $CCFLAGS > $TARGET', cleanup_header_list]
>>>>> )
>>>>>
>>>>>
>>>>> # from all the header files get the symbols
>>>>> env.Command(
>>>>>     target='symbol.list',
>>>>>     source='',
>>>>>     action=['type header_file.list', '$CC -E -dM @include.list
>>>>> $CCFLAGS @header_file.list > $TARGET']
>>>>> )
>>>>> _______________________________________________
>>>>> Scons-users mailing list
>>>>> [email protected]
>>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>>
>>>> _______________________________________________
>>>> Scons-users mailing list
>>>> [email protected]
>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>
>>> _______________________________________________
>>> Scons-users mailing list
>>> [email protected]
>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>
>> _______________________________________________
>> Scons-users mailing list
>> [email protected]
>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>
> _______________________________________________
> Scons-users mailing list
> [email protected]
> https://pairlist4.pair.net/mailman/listinfo/scons-users
>

_______________________________________________
Scons-users mailing list
[email protected]
https://pairlist4.pair.net/mailman/listinfo/scons-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.