Subject: GCC fails to cross-build

From: Ludovic Courtès <[email-masked]>
Date: Mon, 06 Apr 2020 11:31:53 +0200

Hello,

On current ‘master’ GCC fails to cross build:

--8<---------------cut here---------------start------------->8---
$ 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
--8<---------------cut here---------------end--------------->8---

The log reads (slightly edited):

--8<---------------cut here---------------start------------->8---
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.
--8<---------------cut here---------------end--------------->8---

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’.