[PATCH 1 of 2] scripts/build/gcc.sh: When compiling a Canadian Cross avoid using -print-multi-lib
Yann E. MORIN
yann.morin.1998@free.fr
Wed Sep 19 20:57:00 GMT 2012
David, All,
On Wednesday 19 September 2012 05:42:48 David Holsgrove wrote:
> # HG changeset patch
> # User David Holsgrove <david.holsgrove@xilinx.com>
> # Date 1348016639 -36000
> # Node ID 95abeed3a485c4d5b02e4860fc554d6841e1cc41
> # Parent 2858a24a584642e263a920b4214c815c172ed547
> scripts/build/gcc.sh: When compiling a Canadian Cross avoid using -print-multi-lib
>
> With a candian cross, attempting to ${CT_TARGET}-gcc -print-multi-lib will fail
That's right. But the fix you suggest is wrong, see below.
> As this is only for pretty log output, can safely sidestep
>
> diff -r 2858a24a5846 -r 95abeed3a485 scripts/build/cc/gcc.sh
> --- a/scripts/build/cc/gcc.sh Sun Aug 12 07:45:42 2012 -0400
> +++ b/scripts/build/cc/gcc.sh Wed Sep 19 11:03:59 2012 +1000
> @@ -460,7 +460,8 @@
> [ -z "${file}" ] || ext=".${file##*.}"
> CT_DoExecLog ALL ln -sfv "${CT_TARGET}-gcc${ext}" "${prefix}/bin/${CT_TARGET}-cc${ext}"
>
> - if [ "${CT_MULTILIB}" = "y" ]; then
> + # Skip for Canadian Build, can't run on the system and only gives pretty log output.
> + if [ "${CT_MULTILIB}" = "y" -a "${CT_CANADIAN}" != "y" ]; then
This is the part that deals with the core pass-1 and pass-2 compilers,
so they are expected to run on the build machine, so we should be able
to run them (hell, they're gonna be used later to build the C library!)
Unfortunately, that part also deals with the final compiler for bare metal,
which we indeed can not run when it's canadian.
> multilibs=( $( "${prefix}/bin/${CT_TARGET}-gcc" -print-multi-lib \
Simply doing the following:
multilibs=( $( "${CT_TARGET}-gcc" -print-multi-lib \
is not enough here, as that would call:
1- in cross-mode, and not bare-metal: only the core compiler
2- in cross-mode, and bare-metal: the final compiler
3- in canadian-mode, and not bare-metal: always the core compiler
4- in canadian-mode, and bare-metal: always the core compiler
This is not possible, because:
1- is OK
2- is OK
3- is OK
4- is wrong: we want to know the final compiler multilib support, not
the core compiler multilib support
> |tail -n +2 ) )
> if [ ${#multilibs[@]} -ne 0 ]; then
> @@ -815,7 +816,8 @@
> [ -z "${file}" ] || ext=".${file##*.}"
> CT_DoExecLog ALL ln -sfv "${CT_TARGET}-gcc${ext}" "${CT_PREFIX_DIR}/bin/${CT_TARGET}-cc${ext}"
>
> - if [ "${CT_MULTILIB}" = "y" ]; then
> + # Skip for Canadian Build, can't run on the system and only gives pretty log output.
> + if [ "${CT_MULTILIB}" = "y" -a "${CT_CANADIAN}" != "y" ]; then
Here, that's right. This is the part that deals with the final gcc for non
bare-metal. So we can only run it if its not canadian.
> multilibs=( $( "${CT_PREFIX_DIR}/bin/${CT_TARGET}-gcc" -print-multi-lib \
^^^^^^^^^^^^^^^^
There's a latent bug here --/ That should be ${prefix}
I'll fix here.
So, do we still need to print the multilib status, after all?
Could we just remove that?
Regards,
Yann E. MORIN.
--
.-----------------.--------------------.------------------.--------------------.
| Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ |
| +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
'------------------------------^-------^------------------^--------------------'
--
For unsubscribe information see http://sourceware.org/lists.html#faq
More information about the crossgcc
mailing list