[Buildroot] [RFC] external toolchain scanner

Hollis Blanchard hollis_blanchard at mentor.com
Mon Jan 9 23:07:49 UTC 2017


On 12/19/2016 12:07 PM, Hollis Blanchard wrote:
> On 12/08/2016 01:02 PM, Yann E. MORIN wrote:
>> Well, finding the correct syseroot is not trivial: you need to know the
>> CFLAGS that are to be used, because they directly influence what sysroot
>> gcc will be searching for.
>>
>> ...
>>      # host/opt/ext-toolchain/bin/mips-img-linux-gnu-gcc -print-multi-lib
>>      mipsel-r2-hard-uclibc/lib;@muclibc at mips32r2@mabi=32 at EL
>>      mips-r2-hard-nan2008-uclibc/lib;@muclibc at mips32r2@mabi=32 at EB@mnan=2008
>>      mipsel-r2-hard-nan2008-uclibc/lib;@muclibc at mips32r2@mabi=32 at EL@mnan=2008
>>
>> Yes, that's 65 different ways to use a specific sysroot. The last three
>> lines mean:
>>
>>      when these flags flags are in use,              then use this sysroot
>>      -muclibc -mips32r2 -mabi=32 -EL                 mipsel-r2-hard-uclibc/lib
>>      -muclibc -mips32r2 -mabi=32 -EB -mnan=2008      mips-r2-hard-nan2008-uclibc/lib
>>      -muclibc -mips32r2 -mabi=32 -EL -mnan=2008      mipsel-r2-hard-nan2008-uclibc/lib
>>
>> The last two are pretty obvious: big vs. little endian. But when you
>> look at the antepenultimate line, you'll see that it differs only by not
>> specifying the way to treat NaNs.
>>
>> So, without the actual CFLAGS, you can't find the sysroot...
>>
>> And you can't know the actual CFLAGS untill you actually have a
>> Buildroot .config file.
>>
>> But you need the sysroot...
>>
>
> A few thoughts:
>
> 1. I can't escape the observation that what I have is actually useful 
> for my limited case of a 1:1 target:sysroot relationship. Given that 
> it works with Linaro's free downloadable toolchains, which I believe 
> are popular, I suspect it could help many people.
>
> 2. What options exactly determine the CFLAGS? If not a lot of 
> processing is involved, those options could also be fed into the 
> scanner for it to calculate CFLAGS independently, i.e.
>
>   * .config -> scanner -> combined.config
>   * combined.config -> make -> output/*
>
>
> 3. Currently, the only user input for this script is the target 
> architecture tuple, from which it tries to figure out the sysroot.
> 3.1. Perhaps that should be flipped: the user could instead be 
> required to input the sysroot, from which the target architecture 
> could be determined?
> 3.2. Perhaps the user could be required to input both the architecture 
> /and/ sysroot. That would be an optional prompt if multiple sysroots 
> are preset. Just like with the multiarch prompting that's done today, 
> it could look like this:
> aurora:buildroot$ ./support/scripts/scan-ext-toolchain \
> > host/opt/ext-toolchain/bin/mips-img-linux-gnu-gcc
> Toolchain supports multiple targets. Please choose one of the following:
>    aarch64-linux-gnu
>    arm-none-eabi
>    arm-none-linux-gnueabi
>
> aurora:buildroot$ ./support/scripts/scan-ext-toolchain \
> > -t arm-none-linux-gnueabi \
> > host/opt/ext-toolchain/bin/mips-img-linux-gnu-gcc
> Multiple sysroots available for target arm-none-linux-gnueabi. Please choose one of the following:
>    mipsel-r2-hard-uclibc
>    mips-r2-hard-nan2008-uclibc
>    mipsel-r2-hard-nan2008-uclibc
>
> aurora:buildroot$ ./support/scripts/scan-ext-toolchain \
> > -t arm-none-linux-gnueabi \
> > -s mipsel-r2-hard-uclibc \
> > host/opt/ext-toolchain/bin/mips-img-linux-gnu-gcc
> BR2_TOOLCHAIN_EXTERNAL=y
> BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_16=y
> ...
> (I have no idea is this is feasible, just trying to figure out the 
> right approach before I go digging.)
Ping.

Hollis Blanchard <hollis_blanchard at mentor.com>
Mentor Graphics Emulation Division

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20170109/f5eb165b/attachment.html>


More information about the buildroot mailing list