GCC fails to cross-build

  • Open
  • quality assurance status badge
Details
One participant
  • Ludovic Courtès
Owner
unassigned
Submitted by
Ludovic Courtès
Severity
normal
L
L
Ludovic Courtès wrote on 6 Apr 2020 11:31
(address . bug-guix@gnu.org)
87mu7pdkom.fsf@inria.fr
Hello,

On current ‘master’ GCC fails to cross build:

Toggle snippet (10 lines)
$ guix build -e '(@ (gnu packages gcc) gcc)' --target=arm-linux-gnueabihf --no-grafts --log-file
https://ci.guix.gnu.org/log/85q2g7xyfrqyzy1kc30kzw5y58c4i1ah-gcc-7.4.0
$ guix describe
Generacio 137 Mar 31 2020 09:13:55 (nuna)
guix 011f941
repository URL: https://git.savannah.gnu.org/git/guix.git
branch: master
commit: 011f9412795c141ea05fdfa3096ab252252d7080

The log reads (slightly edited):

Toggle snippet (7 lines)
checking for -rdynamic.../tmp/guix-build-gcc-7.4.0.drv-0/gcc-7.4.0/libcc1/configure: line 10735: -T: command not found
no
configure: error:
Building GCC with plugin support requires a host that supports
-fPIC, -shared, -ldl and -rdynamic.

That’s from libcc1/configure. ‘-rdynamic’ is wrongfully determined to
not be working. This is because gcc-plugin.m4 uses this:

if test x$build = x$host; then
export_sym_check="objdump${exeext} -T"
elif test x$host = x$target; then
export_sym_check="$gcc_cv_objdump -T" # <--- here
else
export_sym_check=
fi

and for some reason $gcc_cv_objdump is empty. Its value comes from the
top-level configure.ac:

gcc_cv_objdump="$OBJDUMP_FOR_TARGET"

This would need a fix that does not apply to the cross-GCC, but here we
reach another problem: in gcc.scm we don’t distinguish between a
cross-compiler and a cross-compiled compiler because we just look at
‘%current-target-system’.

Thanks,
Ludo’.
?