How to build librtemscpu.a and librtemsbsp.a in the future?

Sebastian Huber sebastian.huber at embedded-brains.de
Fri Mar 30 18:07:58 UTC 2018


----- Am 29. Mrz 2018 um 0:16 schrieb Chris Johns chrisj at rtems.org:

> On 28/03/2018 16:30, Sebastian Huber wrote:
>> On 28/03/18 02:35, Chris Johns wrote:
>>> On 27/03/2018 17:17, Sebastian Huber wrote:
>>>> On 27/03/18 01:15, Chris Johns wrote:
>>>>> On 26/03/2018 17:32, Sebastian Huber wrote:
>>>>>> On 25/03/18 05:20, Chris Johns wrote:
>>>>>>> On 24/3/18 1:27 am, Sebastian Huber wrote:
>>>>>>>> Hello,
>>>>>>>>
>>>>>>>> I tried to consolidate the cpukit Makefile.am. This ended up in the
>>>>>>>> following
>>>>>>>> problem. The content of librtemscpu.a depends on the CPU port. This is
>>>>>>>> currently
>>>>>>>> done via a non-standard
>>>>>>>>
>>>>>>>> _SUBDIRS = ../@RTEMS_CPU@
>>>>>>>>
>>>>>>>> construct.
>>>>>>> Where is this? I cannot find it.
>>>>>> https://git.rtems.org/rtems/tree/cpukit/score/cpu/Makefile.am#n1
>>>>>>
>>>>> I am confused, the link's version does not have '../'?
>>>> Sorry, I should have used copy and paste.
>>>>
>>>>> [...]
>>>>>> I am not sure how we want to proceed with the build system stuff.
>>>>> It is becoming more and more important this work starts to happen. I am
>>>>> happy to
>>>>> make the change to waf if we can attract the funding to do it.
>>>>>
>>>>> I have pushed the existing build system as far as I want to without major
>>>>> refactoring. I would like to test a recent autoconf and automake to see if we
>>>>> can move to a recent version. The recent perl issues highlights the problems we
>>>>> can expect to face if we do not change.
>>>>>
>>>>>> Should we first clean up the existing build system first?
>>>>> I have no interesting in a "clean up" or a refactor. I have played with it
>>>>> enough in recent times with the parallel build and pre-install work to know it
>>>>> is a deep pit with much gnashing of teeth, rolling of eyes, and terrible roars.
>>>> I think there are some issues left which need a clean up:
>>>>
>>>> * Use of RTEMS_RELLDFLAGS'
>>> I have not looked into this stuff. What is happening with these flags and these
>>> *.rel files?
>>>
>>> Is this some sort of component system using incremental objects ?
>> 
>> I think it is a hack to enable the use of LIBADD. It was used mainly by the
>> libcpu.
> 
> Some BSPs also have this?

There are not that many spots left to clean up:

grep -r --include='Makefile.am' RTEMS_RELLDFLAGS                                                                                                  
c/src/lib/libbsp/powerpc/beatnik/Makefile.am:network_support_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
c/src/lib/libbsp/powerpc/beatnik/Makefile.am:network_if_mve_tmp_rel_LDFLAGS  = $(RTEMS_RELLDFLAGS)
c/src/lib/libbsp/powerpc/beatnik/Makefile.am:network_if_gfe_tmp_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
c/src/lib/libbsp/powerpc/beatnik/Makefile.am:network_if_em_tmp_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
c/src/lib/libbsp/powerpc/mvme5500/Makefile.am:network_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
c/src/lib/libbsp/powerpc/mvme5500/Makefile.am:mvme5500start___OBJEXT__LDFLAGS = $(RTEMS_RELLDFLAGS)
c/src/lib/libbsp/powerpc/motorola_powerpc/Makefile.am:polledIO_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
cpukit/libfs/src/nfsclient/Makefile.am:dirutils_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
cpukit/libfs/src/nfsclient/Makefile.am:nfs_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
cpukit/libfs/src/nfsclient/Makefile.am:rpcio_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)

> 
>> 
>>>
>>>> * Command line defines
>>>>
>>> Lets leave that to the ticket on this topic.
>>>
>>>> * Host tools should be removed or moved to rtems-tools
>>> Agreed.
>>>
>>>>> The major issue we have is the time configure takes. I you play with the
>>>>> rtems-bsp-builder and the --jobs option you will get an idea. If you look at
>>>>> Joel's latest build:
>>>>>
>>>>> https://lists.rtems.org/pipermail/build/2018-March/000554.html
>>>>>
>>>>> jobs is '--jobs=6/12' which means run 6 parallel RTEMS BSP builds and use 12
>>>>> cores per build. We can do this because of the time configure takes using a
>>>>> single core. I think Joel has 24 cores on this box. This setting builds a BSP
>>>>> every 18 seconds on average which is impressive but it is a hack.
>>>> Yes, I think we need only two configure runs. One in the top-level and one in
>>>> the BSP (for the BSP options).
>>>>
>>> That would be nice. I suggest we resolve how the tree looks in the other thread
>>> before we proceed. It would provide clarity for this work and a solid direction.
>> 
>> The host tools are a blocking point for me to do anything with the configure.ac
>> files.
>> 
>> Another issue are the complicated test program Makefile.am.
> 
> What issues are you seeing?

It is a mixture of an Automake program and the classic RTEMS makefile support.

> 
>> We have the optional
>> BSP-specific post-link command which transforms an .exe file (ELF) into a .ralf
>> file.
> 
> I see printing the size as wasted build time and we should remove that step. 

Yes, we definitely should not print this stuff.

> You
> can run size on any static ELF executable and get the sizes if you are
> interested and it is easy to script something to print all test executable
> sizes.
> 
> I am not sure about the post-link parts, I can see they are useful even as an
> example and I can also see the case for RTEMS stopping at a static ELF file and
> simplifying the BSP configs.
> 
> The current way the post-link is done is specific to building the samples and
> tests and any Makefile.inc support, after that the details of what needs to
> happen are not accessible. Mkaefile.inc support is to be remove so this leave
> the samples and tests. The rtems_waf tool cannot perform a post-link operation
> because nothing is captured in the pkgconfig file and adding it from the current
> Makefile fragment would be a difficult task. This is why the .pc work stalled.

Normally, an ELF file is all you need. A post link step is quite common for embedded targets, but from a host operating system point of view it is quite exotic.

> 
>> The RTEMS tester duplicates this feature somehow.
> 
> Yes it does. It has to because of the last point, the details are not openly
> available from a built or installed BSP. The RTEMS Tester's support is effective
> but not optimal.
> 
>> How would waf deal with this post-link step?
> 
> I do not know, it is something I have not considered.
> 
> The problem I see with what we currently have is not the operation itself it is
> access to the details outside of the RTEMS build system. If that can be solved
> at the BSP level as an exported controlled interface we can build eco-system
> support around it.
> 
> For waf I would look at adding a per BSP configuration in a format that can be
> exported easily. Once that information exists I would have the RTEMS tester use
> it as well. In waf you could see if a post-link operation is configured and add
> a build job based on a rule, ie a more advanced version of the current RTEMS
> tester's `target_pretest_command`. How and what requires looking at all the
> existing post-link commands to see what can be done.

Ok, so per se waf supports a post link step.

> 
> Just wondering aloud, if the BSP configuration was a pkgconfig file and not a
> makefile fragment and the RTEMS build system parsed it would that help? It could
> then be installed or an extended version with build specific details capturing
> any details we want. Pkg-config supports variables so we could have something
> like (hand made and cleaned up version installed by RTEMS):
> 
> $ cat /tmp/arm-rtems5-xilinx_zynq_zedboard.pc
> #
> # pkg-config support file for RTEMS BSP xilinx_zynq_zedboard
> #
> # Warning: This stuff is experimental and may be changed at any time.
> #
> rtems_major=5
> arch=arm
> bsp=xilinx_zynq_zedboard
> 
> arch_bsp=${arch}/${bsp}
> arch_prefix=${arch}-rtems${rtems_major}
> 
> prefix=/opt/work/rtems/bsps/5
> exec_prefix=/opt/work/rtems/bsps/5/${arch_prefix}
> libdir=${exec_prefix}/${bsp}/lib
> includedir=${exec_prefix}/${bsp}/lib/include
> 
> CFLAGS=-march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard -mtune=cortex-a9 -O2
> -g -ffunction-sections -fdata-sections
> 
> Name: arm-rtems5-xilinx_zynq_zedboard
> Version: 5.0.0
> Description: RTEMS BSP xilinx_zynq_zedboard
> Libs:
> Cflags: -qrtems -B${exec_prefix}/lib/ -B${libdir}/ --specs bsp_specs ${CFLAGS}
> 
> start_addr=0x00104000
> entry_addr=0x00104000
> 
> bin=${arch_prefix}-objdump -R -S --strip-debug -O binary @EXE@ @EXE at .bin && \
>    cat @EXE at .bin | gzip -9 > @EXE at .gz && \
>    mkimage -A arm -O rtems -T kernel -a ${start_addr} -e ${entry_addr} \
>    -n "RTEMS" -d @EXE at .gz @EXE at .img
> 
> Asking for the variable returns:
> 
> $ PKG_CONFIG_PATH=/tmp pkg-config --variable=bin arm-rtems5-xilinx_zynq_zedboard
> arm-rtems5-objdump -R -S --strip-debug -O binary @EXE@ @EXE at .bin && cat
> @EXE at .bin | gzip -9 > @EXE at .gz && mkimage -A arm -O rtems -T kernel -a
> 0x00104000 -e 0x00104000 -n "RTEMS" -d @EXE at .gz @EXE at .img
> 
> (I am not sure the gzip pipe and redirect would work but it shows the idea)
> 
> We could define and document a set of standard variables with known functions.
> 
> BSPs could provide more, for example DFT, BSP options, etc and the BSP
> documentation would list those.
> 
> Detecting a variable could be checking `--print-variables` or the empty result
> pkg-config gives.
> 
> It would really improve rtems_waf having this detail. I could remove the
> 'tweaks' support I need to have for some BSPs.
> 
> Any build system that supports pkg-config could be used.

Ok, this sounds like a good direction. I think it is acceptable if we break the existing post link support during the build system conversion if we have a suitable replacement and a proof of concept. Maintained BSPs can then easily resurrect this feature.

> 
>> Is there a standard support for a post-link step in Automake?
> 
> I do not know.
> 
>> 
>> The "make dist" is broken?
>> 
> 
> Is it used? I do not use it to make a release.

Good, then I don't have to care about this. Was it ever used? There is a lot of stuff in the Makefile.am for the make dist.


More information about the devel mailing list