Making World For amd64

Roland Smith rsmith at xs4all.nl
Thu Jun 26 21:52:48 UTC 2008


On Thu, Jun 26, 2008 at 11:19:15PM +0200, Erik Trulsson wrote:
> On Thu, Jun 26, 2008 at 03:51:40PM -0500, Tim Daneliuk wrote:
> > Kris Kennaway wrote:
> > > Tim Daneliuk wrote:
> > >> Kris Kennaway wrote:
> > >>> Tim Daneliuk wrote:
> > >>>> Is there anything special one has to do when doing a make world
> > >>>> intended for 64-bit FreeBSD or is it sufficient to build the 64-bit
> > >>>> kernel and make world as everywhere else?
> > >>> The same as everywhere else.
> > >>>
> > >>> Kris
> > >>
> > >> So, I take it that this means that all the userspace programs, ports,
> > >> packages, utilities, etc. do *not* take advantage of the 64-bit
> > >> extensions.  That is, only the kernel gets the benefit of the
> > >> wider word.  Is that correct?
> > >>
> > > 
> > > No, everything is 100% native.
> > > 
> > > Kris
> > > 
> > 
> > OK, these may be really stupid questions but:
> > 
> > 1) How does make world know whether to build 32-bit or 64-bit binaries?
> 
> It will build for whatever system you have installed.

The system Makefile calls 'uname -p' to get the system's processor
architecture. 

> If you are running a 32-bit system it will make 32-bit binaries, and if
> you are running a 64-bit system it will make 64-bit binaries.

By default, amd64 also builds 32-bit libraries (/usr/lib32), unless you
set WITHOUT_LIB32=true in /etc/src.conf. 

> > 2) Can a binary from a 32-bit FreeBSD system be run unmodified on the
> >   64-bit system?
> 
> Assuming the 32-bit system is 'i386' and the 64-bit system is 'amd64' then
> you are supposed to be able to do so 

You will need a kernel (such as GENERIC) built with 'options COMPAT_IA32'.

>(but I don't know how well it works in
> practice).  Otherwise no.  (Running a i386 binary on a sparc64 system won't
> work.)

You will also need all the libraries that the application depends on in
32-bit versions. Either by copying them from a 32-bit system (built from
the same source version) or by doing a cross-build.

There was a thread some time ago (not sure if it was in -questions or
-amd64) about using a 32-bit jail on amd64. That might be of interest.

> > 3) If I reboot with 32-bit or 64-bit kernels, does the system magically
> >    somehow make the userland stuff work natively at the word width?
> >    If so, how?
> 
> If you have installed the amd64 variant of FreeBSD (for example) then
> all binaries (userland and kernel alike) will have been compiled for
> the amd64 architecture (and thus 64-bit.)  If you are running the i386
> variant then all binaries will have been compiled for i386 (and thus
> 32-bit.)

You can have both 32-bit and 64-bit systems on one machine, provided you
put them on separate slices/partitions. Obviously you cannot have both a
32-bit and a 64-bit version of e.g. /bin/sh on one partition.

Roland
-- 
R.F.Smith                                   http://www.xs4all.nl/~rsmith/
[plain text _non-HTML_ PGP/GnuPG encrypted/signed email much appreciated]
pgp: 1A2B 477F 9970 BA3C 2914  B7CE 1277 EFB0 C321 A725 (KeyID: C321A725)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-questions/attachments/20080626/2e8af662/attachment.pgp


More information about the freebsd-questions mailing list