https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71001

            Bug ID: 71001
           Summary: cross build native: fixincludes searches host path on
                    build system
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: other
          Assignee: unassigned at gcc dot gnu.org
          Reporter: daniel.c.klauer at web dot de
  Target Milestone: ---

Created attachment 38437
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=38437&action=edit
example to reproduce the problem

Hello,

I have encountered an issue when cross-compiling a native gcc for
i686-w64-mingw32 on a GNU/Linux system. The build tries to access a host path
on the build system, which makes no sense when cross-compiling.

In this case it is "/mingw/include", which is supposed to exist on
i686-w64-mingw32 but of course not on the GNU/Linux that's used as build
system,
thus the build fails (perhaps luckily even -- if it was a more common path like
/usr/include, I imagine the problem would go unnoticed).

$ uname -m -o
x86_64 GNU/Linux
$ ../gcc-6.1.0/configure \
        --build=x86_64-pc-linux-gnu \
        --host=i686-w64-mingw32 \
        --target=i686-w64-mingw32 \
        --prefix=/usr \
        --enable-languages=c \
        --with-gmp="$sysroot"/usr \
        --with-mpfr="$sysroot"/usr \
        --with-mpc="$sysroot"/usr
...
$ make
...
The directory that should contain system headers does not exist:
  /mingw/include
Makefile:2907: recipe for target 'stmp-fixinc' failed
...

It appears that using --with-sysroot to specify a i686-w64-mingw32 sysroot
fixes it, but it also encodes the sysroot path into the newly built compiler
for use at runtime, which I don't want since it is a build-system-specific
path. And this isn't building a cross-compiler anyways (which is where
--with-sysroot makes sense).

So I looked at --with-build-sysroot instead. If I understood correctly,
--with-build-sysroot is meant for specifying the target sysroot for use during
the gcc build process only, and not later at runtime. But the fixincludes step
does not respect --with-build-sysroot.

Maybe fixincludes should use --with-build-sysroot if that's set, and be
disabled
otherwise (when cross-compiling and no sysroot is given).

I found an old posting about this issue here, though it wasn't answered:
        https://gcc.gnu.org/ml/gcc-help/2006-04/msg00191.html

Reply via email to