Date: Tue, 16 Nov 1999 19:18:35 +0100 From: Marcel Moolenaar <marcel@scc.nl> To: Warner Losh <imp@village.org> Cc: cvs-committers@freebsd.org, cvs-all@freebsd.org Subject: Re: cvs commit: src Makefile.inc1 src/usr.bin/make Makefile Message-ID: <38319FFB.530FFCC6@scc.nl> References: <383189F7.67E89E8B@scc.nl> <38310A94.B1939A83@scc.nl> <199911151707.JAA03820@freefall.freebsd.org> <199911160533.WAA02391@harmony.village.org> <199911161544.IAA08642@harmony.village.org> <199911161714.KAA09479@harmony.village.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Warner Losh wrote:
> There are also makefiles in the
> kernel that use MACHINE, so both MACHINE and MACHINE_ARCH need to be
> defined in order for them to work correctly.
We currently have only 1 occurrence of MACHINE in /sys/boot/Makefile. I
found out (the hard way :-) that it is needed by the PC98 port. I made
it a special case (ie MACHINE_ARCH must be i386 before MACHINE is
tested). Maybe we can (mis)use MACHINE that way for other platforms as
well. I'm thinking about MIPS:
MACHINE_ARCH=mips,
MACHINE={seb|sel} /* or something like that */
That way we keep MACHINE_ARCH as clean as possible and use MACHINE for
architecture specific sub-targets...
> : I want to use TARGET_ARCH for building the cross-compiler:
[snip]
> : Currently MACHINE_ARCH is tested against `sysctl -n hw.machine_arch` and
> : if they differ then we're building a cross-compiler. This obviously
> : doesn't work if we are making the native MIPS compiler in a
> : cross-build...
>
> Yes. I put the TARGET and TARGET_ARCH in so that you know during the
> early part of the build process that you are on the host machine, but
> can switch that for later in the build process. You need to know what
> machine you are on early in the build process so you can build a
> compiler that runs on that machine, build a make, etc.
You don't actually need a variable for that. Everything that is build
with the standard compiler, includes and libraries will automaticly run
on the host. I think MACHINE_ARCH will mainly be used to select platform
specific (sub)directories or platform specific binaries/libraries.
> When cross
> compiling you can't use the host's libraries. However, there is a
> twist in this. Some programs, like fortune, builds programs that need
> to run in the host environment to create the programs that run in the
> target environment.
Correct. These little `gadgets' need to be build as tools, before the
actual cross-build is started. There's basicly one `gadget' that's
messing things up: genassym.c
We can't cross-build a kernel, because genassym.c needs to be build with
the targets includes and must be build with the cross-compiler for it to
properly have the offsets, but we need to run it on the host, during
kernel building :-(
> I don't think the above is going to work. gcc, and friends, have
> three levels here. host, target, and build. If you want to support
> three levels, maybe you need to go this route (eg if I'm building
> linux mips binaries to produce dec alpha osf1 code on my i386 freebsd
> box, host is i386-freebsd, target is dec-alpha-osf and build is
> linux-mips). With only two variables, you are going to only have host
> and target.
As I said, the host need not be specified, because it's not important.
gcc doesn't really care if I'm cross-building a cross-compiler. It just
needs to know on what platform the compiler is going to be run (ie
MACHINE_ARCH in my case) and what output it should generate (TARGET_ARCH
in my case).
--
Marcel Moolenaar mailto:marcel@scc.nl
SCC Internetworking & Databases http://www.scc.nl/
The FreeBSD project mailto:marcel@FreeBSD.org
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?38319FFB.530FFCC6>
