GCC cross- compiling: 'no rule to make target'

Kai Ruottu karuottu@freenet.hut.fi
Thu Dec 30 03:11:00 GMT 1999

Marcin Wolcendorf wrote:
>         I'm trying to compile GCC under cygwin for i386-aout target. I
> finally found out, that some directories are needed for cygwin to
> start its work (why it isn't said, that /bin /usr/bin and such dirs
> are needed, I can't even guess).

 How to build under cygwin is perhaps a subject for the 'gnu-win32' maillist.
Although I have compiled & built quite a lot stuff for cygwin & mingw32 hosts,
I have done all this under Linux, using Cygwin and Mingw32 targeted cross-tools.

>         To the point- while compiling, following message appears on the
> screen:
> "make[1]: *** No rule to make target
> '../../src/bfd/../include/aout/ar.h', needed by 'archive.lo'. Stop.
> make: *** [all-bfd] Error 2",
>  and compilation stops. What's wrong?

 If the 'ar.h' is there (in '../include/aout/'), but it cannot be found in the
Cygwin environment, perhaps trying to edit the 'bfd/Makefile' and removing the
nonsense '../../src/bfd/' away would help...

> But makefiles are made by configure, aren't they? So, 'Wo ist der Hund
> begraben?'

 Under a real Unix those long pathnames shouldn't cause troubles.

>         I compiled the same sources with gcc under Linux with no
> problems, but I need it under Win32; canadian-cross for Win32 running
> i386-aout targeted compiler under Linux failed, that's why I try to
> build it with cygwin.

 You write 'no problems' (with the sources for the i386-aout target compiler),
and next 'the i386-aout targeted compiler under Linux failed'...

 If you couldn't get a working 'i386-aout' targeted compiler under Linux, why
you think it could work under Win32?  I see this as the real problem....

 But if it failed in Canadian Cross, how it could succeed earlier?

 How did the i386-aout compiler fail?  With Canadian Cross it will be used to
compile just the same things as while building the Linux-hosted compiler, i.e.
all the 'libgcc.a', 'libobjc.a', 'libiberty.a' etc. libs for the target. When
it is in this phase, making stuff which was already made, pushing Control-C to
get it stop may be quite normal reaction. But building the same stuff with the
installed compiler and comparing the library sizes etc. to make sure they are
identical with those produced with the then uninstalled one, may help to reveal
all bugs...

 And when the Linux-hosted 'i386-aout' compiler failed, you already had the
Cygwin-to-i386-aout compiler ready (produced with your Linux-to-cygwin cross-

 Perhaps it wasn't the Linux-to-i386-aout, but your Linux-to-i586-cygwin
compiler which failed... Or your Makefile had a wrong compiler to produce

 The rules:

  *_FOR_TARGET            - tools for the i386-aout
  *_FOR_BUILD             - tools for Linux
  plain names             - tools for Cygwin
  HOST_CC                 - the same as CC_FOR_BUILD !!!!!!!
  OLDCC                   - the same as CC_FOR_TARGET !!!!!!

 Besides the last two, the toolnames in Makefile are easy to check, the
HOST_CC is really misleading...

Cheers, Kai

Want more information?  See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/
Want to unsubscribe? Send a note to crossgcc-unsubscribe@sourceware.cygnus.com

More information about the crossgcc mailing list