Subject: cross compile with Linux host fails with nbmake Illegal instruction
To: None <tech-toolchain@netbsd.org>
From: Jeremy C. Reed <reed@reedmedia.net>
List: tech-toolchain
Date: 02/05/2005 22:10:25
I am trying cross compiling of -current on a Linux host. I have
linux-kernel-headers-2.6.10, gcc3-c-3.3.4, gcc3-c++-3.3.4, bmake-20040220
(no gmake installed), binutils-2.14.0.0, and mk-files-20040214 installed.
I used HOST_CC to choose my gcc.
1)
HOST_CC=/usr/gcc3/bin/cc ./build.sh -m i386 -U tools
The above fails with:
===> No nonexistent/bin/nbmake, needs building.
===> Bootstrapping nbmake
checking for sh... /bin/sh
checking for gcc... /usr/gcc3/bin/cc
checking for C compiler default output... a.out
checking whether the C compiler works... configure: error: cannot run C
compiled programs.
If you meant to cross compile, use `--host'.
"nonexistent/bin/nbmake" seems like a typo. But then I saw it in the
build.sh. I don't understand why it didn't automatically create a
destination for the to-be-built tools nor any object OBJDIR directory.
2) Then I tried:
host_alias=i386-pc-linux-gnu HOST_CC=/usr/gcc3/bin/cc ./build.sh -m i386 -U tools
which failed with:
/usr/gcc3/bin/cc -O -D_PATH_BSHELL="/bin/sh" -D_PATH_DEFSHELLDIR="/bin"
-DHAVE_SETENV=1 -DHAVE_STRDUP=1 -DHAVE_STRERROR=1 -DHAVE_STRFTIME=1
-DHAVE_VSNPRINTF=1 -DMAKE_BOOTSTRAP
-I/home/reed/netbsd/src/tools/make/../../usr.bin/make -c
/home/reed/netbsd/src/tools/make/../../usr.bin/make/lst.lib/lstSucc.c
/usr/gcc3/bin/cc -O -o nbmake *.o
/usr/bin/ld: warning: cannot find entry symbol _start; defaulting to
08049800
./build.sh: line 1078: 17835 Illegal instruction ${runcmd} "${make}"
-m ${TOP}/share/mk obj NOSUBDIR=
ERROR: Failed to make obj in tools
*** BUILD ABORTED ***
host_alias above sets --host for the type of system for the program to run
on.
The builds were done in /tmp/nbbuild17195/ but that was promptly removed
when this build was finished.
3) So I commented out that trap that did that.
$ file /tmp/nbbuild17884/nbmake
/tmp/nbbuild17884/nbmake: ELF 32-bit LSB executable, Intel 80386, version
1 (SYSV), for GNU/Linux 2.0.0, dynamically linked (uses shared libs), not
stripped
$ /tmp/nbbuild17884/nbmake -v
Illegal instruction
(Well I know -v doesn't do anything other than print out unknown option
and Usage statement.)
4) So I set USETOOLS=never and it still did the build of tools/make (and
failed at end).
Any ideas?
How do I get it to not cross-compile (even though I don't see why that
matters) for the tools?
(Please CC me on replies.)
Thank you,
Jeremy C. Reed
BSD News, BSD tutorials, BSD links
http://www.bsdnewsletter.com/