Re: [meta-arm] Removal of external-arm-toolchain?

Romain Naour <[email protected]>
Newsgroups org.yoctoproject.lists.meta-arm
Message-ID <[email protected]>
Hi all,

Le 23/01/2025 à 21:00, Denys Dmytriyenko via lists.yoctoproject.org a écrit :
> On Wed, Jan 22, 2025 at 05:32:52PM +0000, Ross Burton via lists.yoctoproject.org wrote:
>> Hi,
>>
>> It’s that time of the year where I grumble about external-arm-toolchain.  
> 
> Heh, we've had this discussion a few times in the past - I see we are coming 
> back to it again... :)
> 
> 
>> This is the recipe that lets you unpack the Arm binary GCC releases, and 
>> tell yocto to use that directory as the cross compiler.
>>
>> This time:
>>
>> 1) systemd fails to compile as the kernel headers it has don’t include 
>> SIOCGSTAMP_OLD (added in linux 5.2)
>>
>> 2) There is no real support for locales. It ships locale files but they’re 
>> generated by a separate recipe in core and those packages don’t get 
>> generated by e-a-t.  This means many of oe-core’s ptest recipes fail because 
>> of unexpected dependencies on eg locale-base-en-gb.
>>
>> 3) The virtual namespace changes that landed yesterday in core meant it 
>> needs updating.
>>
>> I’ve started work on (3) but discovered (1) and (2) whilst trying to do a 
>> test build.
>>
>> So I’m again thinking we should remove external-arm-toolchain from meta-arm. 
>> My argument for removing it:
>>
>> 1) Whilst it’s a binary release of GCC from Arm, it’s actually almost 
>> identical to upstream. Yocto can already build a newer version of upstream, 
>> which can be patched rapidly to fix bugs.
>>
>> 2) Some pieces of the binary release can be very old: the kernel headers in 
>> the 13.2 build were from linux 4.19.

I'm agree that the issue n°1, it's been a while that the ARM toolchain has not
updated their linux-headers... While systemd is probably the project that uses
the latest kernel features that requires a fairly recent version of linux-headers.

So even with the latest ARM 14.2 toolchain, users will have to switch to the
Yocto toolchain as soons as systemd is used in their system.

>>
>> 3) The binary release has limited platforms: you can only target 32-bit arm 
>> on x86-64 or aarch64 hosts, and 64-bit arm on x86-64 hosts.
>>
>> 4) Trying to force a round peg (binary toolchain) into a square hole (the 
>> implicit interface exposed by yocto’s gcc recipes) is going to be a constant 
>> battle.
>>
>> 5) Given the problems I found it appears out CI is the main user of it, and 
>> that CI coverage is explicitly minimal (disables ptest because we can’t 
>> build a target gcc either).
>>
>> My understanding is that TI were active users of the binary toolchain for 
>> customers who appreciated the speed improvement by not having to compile a 
>> cross compiler
> 
> Yes, TI used binary toolchains since the OpenEmbedded Classic days, including 
> but not limited to CodeSourcery, Linaro, and lately Arm. While support for 
> normal OE-built toolchain was always an option, the default preference for TI 
> products was to use a pre-built binary toolchain.
> 
> Though, the build speed was not the reason, at least not the main reason. 
> It was due to the technical support requirements. OE-built cross toolchain 
> was not trusted back in the day and OE is not in the business of providing 
> commercial compiler support, like CodeSourcery would, for example.
> 
> 
>> , but I don’t believe the latest releases of their product 
>> support this.
> 
> True, the maintenance and migration from one release to another was a real 
> nightmare, pretty much like you are describing above - always needing to fix 
> something. All the remaining extra TI customizations (e.g. supporting both 
> 64-bit and 32-bit external toolchains at the same time, SDK packaging, etc.) 
> were finally removed 1.5 years ago:
> https://git.yoctoproject.org/meta-arago/commit/?id=6000a07a51053b7685556246f9f5df7ef7714463
> 
> 
> That said, it appears there are some other users of external toolchain - there 
> was a person from Smile recently fixing some issues with usrmerge support. And 
> I just received a personal email from one of our customers inquiring about it 
> as well. In other words - there are other interested parties out there...

It was me probably :)

> 
> 
>>  Also this is a prime use case for sstate, in particular the 
>> public yocto state server which can be used to fetch all the native tools, 
>> not just the compiler.
> 
> This is probably a topic for another thread, but there are some issues with 
> using sstate like that - public yocto sstate server is very slow and just 
> checking what is available takes a very long time, plus cross toolchain is not 
> a native package and from my experience re-use is quite low in other distros.
> 
> 
>> So, would anyone seriously object if I sent a patch to remove the 
>> external-arm-toolchain recipe? This would only be for master, we wouldn’t 
>> retroactively remove it from the stable branches.
> 
> As one of the meta-arm-toolchain co-maintainers[1], I would not object to 
> removing external-arm-toolchain support (the Linux side) from the layer.
> 
> [1] https://git.yoctoproject.org/meta-arm/tree/meta-arm-toolchain/README.md#n99
> 
> 
> But, besides external-arm-toolchain, there are also recipes in the layer for 
> baremetal compilers, which are not proper cross- recipes, but they pretend 
> to be native- ones. That's very hacky and there are some drawbacks, while the 
> only benefit is speed, as those are also binary pre-builds. I was previously 
> suggesting replacing them with a proper baremetal multiconfig usage, like I 
> did in meta-ti for K3 platforms. And as I recall, you were interested in that 
> solution as well. If that's still the case, please let me know if you need any 
> help with that...

The projet I'm working on uses meta-ti with external-arm-toolchain since a while
(from thud to scarthgap). I wasn't aware of all the discussions about the
removal that happened previously. Using an external toolchain looks usual
especially if you come from Buildroot world :)

For a new project using a TI K3 SoC, yocto uses a multiconfig setup to build for
the ARM r5f core used by the SoC boot sequence.
So, we also uses the external-arm-toolchain to build for the r5f core (even is a
Linux toolchain is not strictly required).
An external barebetal toolchain could be used for the r5f core but the
external-arm-toolchain package only support Linux toolchains.

Removing or at least deprecating external-arm-toolchain package make it clear
that the Yocto toolchain is recommanded for new project.

Best regards,
Romain


> 
> Thanks and regards,
> Denys
> 
> 
> 
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#6344): https://lists.yoctoproject.org/g/meta-arm/message/6344
> Mute This Topic: https://lists.yoctoproject.org/mt/110756921/4417264
> Group Owner: [email protected]
> Unsubscribe: https://lists.yoctoproject.org/g/meta-arm/unsub [[email protected]]
> -=-=-=-=-=-=-=-=-=-=-=-
>
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.