Subject: Re: Cross-build question.
To: Frederick Bruckman <>
From: Greywolf <>
List: current-users
Date: 02/04/2003 16:53:26
[FB: Subject: Re: Cross-build question.
[FB: On Tue, 4 Feb 2003, Simon J. Gerraty wrote:
[FB: > I put:
[FB: >
[FB: > .if ${MACHINE_ARCH} == "sparc"
[FB: > DEFCOPTS=-O2 -msupersparc
[FB: > .endif
[FB: >
[FB: > in /etc/mk.conf and it does the right thing - for kernel builds
[FB: > at least.  The same trick should work for other bits of the build.
[FB: ${DEFCOPTS} doesn't work for other parts of the build, only ${COPTS}.
[FB: I have something like this in "/etc/mk.conf":
[FB:     HOST_CFLAGS?=          -O2 -march=k6
[FB:     .if     ${MACHINE} == "i386"
[FB:     COPTS?=                -O2 -mcpu=k6
[FB:     .elif   ${MACHINE} == "mac68k"
[FB:     COPTS?=                -O2 -m68020-40
[FB:     .endif
[FB: So, the tools get built with "-O2 -march=k6", the i386 release gets
[FB: built with "-O2 -mcpu=k6", and so on. Note the question mark '?'!
[FB: Without that, you're likely to break the INSTALL* kernels.
[FB: Frederick

Simon, Frederick,

I thank you both very much for your efforts.  I must be missing something
here, like my brain, because when I go to build the tools explicitly,
mk.conf never picks up the MKTOOLS=no.

Here's what I have at the top of my mk.conf:
# Force for i386

HOST_CFLAGS?=   -O2 -march=k6

.if     ${MACHINE} == "i386"
.ifdef KERNEL
COPTS?=         -O2 -mcpu=k6
COPTS?=         -O3 -mcpu=k6
.endif  # !kernel-i386
.elif   ${MACHINE} == "sparc"
.ifdef KERNEL
COPTS?=         -O2 -mv8 -mcpu=supersparc
COPTS?=         -O3 -mv8 -mcpu=supersparc
.endif  # !kernel-sparc
.endif  # mach-select

Now, I know that KERNEL isn't (necessarily) defined/passed on to a makefile,
although I can drop it into a config file if I need to (I'm just looking
for a nice way to achieve this...).

And never mind that my COPTS might be asking for trouble with -O3 -- the
important part is the cpu-specific flags, here.

Here's what I (effectively) end up running:

export TOOLDIR
export SHELL
PATH=/usr/src/tools/tools.NetBSD-1.6M-sparc/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/X11/bin:/usr/X11/sbin:/root/bin:/usr/src; -O /export/obj/sparc -D /export/build/sparc tools


And here's what I end up getting:

[objdirs get made]
[cleandir runs]
dependall ===> host-mkdep
rm -f host-mkdep
CC=cc CFLAGS=-O3\ -mcpu=supersparc\ -mv8 LDFLAGS=  /usr/src/tools/host-mkdep/configure --cache-file=config.cache
configure: creating cache config.cache
checking for sh... /bin/sh
checking for mawk... no
checking for gawk... no
checking for nawk... no
checking for awk... awk
checking for gcc... cc
checking for C compiler default output... configure: error: C compiler cannot create executables
*** Error code 77

nbmake: stopped in /usr/src/tools/host-mkdep
*** Error code 1

nbmake: stopped in /usr/src/tools/host-mkdep
*** Error code 1

nbmake: stopped in /usr/src/tools

ERROR: failed to make tools

As you can see, the flags I want applied only during a cross-build are not
getting enabled during the cross-build!

[not to mention, I keep getting this directory called

"^Jnbmake: stopped in /usr/src/bin/nbmake-sparc"

[yes, that's a LF in there.]]

Go figure.

NetBSD: I Wanna Be Sedated!