NetBSD/compat
mrg 3f11e25c49 build GMP, MPFR and MPC as private libraries just for GCC. don't
install the headers or librarys into the system.

someone who really cares could make them shlibs again and have them
installed into eg, /usr/lib/gcc.  not convinced it is worth it.
2011-07-21 03:13:30 +00:00
..
amd64/i386 build GMP, MPFR and MPC as private libraries just for GCC. don't 2011-07-21 03:13:30 +00:00
dirshack catch up with s/MAKEDIROBJPREFIX/MAKEOBJDIR/ changes in comments. 2011-04-17 01:29:06 +00:00
mips64 build GMP, MPFR and MPC as private libraries just for GCC. don't 2011-07-21 03:13:30 +00:00
sparc64/sparc build GMP, MPFR and MPC as private libraries just for GCC. don't 2011-07-21 03:13:30 +00:00
Makefile
Makefile.compat
README catch up with s/MAKEDIROBJPREFIX/MAKEOBJDIR/ changes in comments. 2011-04-17 01:29:06 +00:00
archdirs.mk
compatsubdir.mk if using MAKEOBJDIRPREFIX, make sure to unset it since it would override 2011-01-31 10:58:14 +00:00
m32.mk avoid adding -m32 to various variables multiple times aka, multiple inclusions. 2011-06-18 01:22:34 +00:00

README

$NetBSD: README,v 1.7 2011/04/17 01:29:06 mrg Exp $


Building multi- ABI libraries for NetBSD platforms.


src/compat has a framework to (re)build the libraries shipped with
NetBSD for a different ABI than the default for that platform.  This
allows 32-bit libraries for the amd64 and sparc64 ports, and enables
the mips64 port to support all three of old-style 32-bit ("o32"), the
new 32-bit (default, "n32", 64-bit CPU required) or the 64-bit ABI.


The basic premise is to re-set $MAKEOBJDIR to fresh subdirectory
underneath src/compat and rebuild the libraries with a different set
of options.  Each platform wanting support should create their port
subdirectory directly in src/compat, and then one subdirectory in here
for each ABI required.  e.g., src/compat/amd64/i386 is where we build
the 32-bit compat libraries for the amd64 port.  In each of these
subdirs, a small Makefile and makefile fragment should exist.  The
Makefile should set BSD_MK_COMPAT_FILE to equal the fragment, and then
include "../../compatsubdir.mk"  Eg, amd64/i386/Makefile has:

	BSD_MK_COMPAT_FILE=${.CURDIR}/bsd.i386.mk

	.include "../../compatsubdir.mk"

In the makefile fragment any changes to ABI flags are passed here
and the MLIBDIR variable must be set to the subdirectory in /usr/lib
where libraries for the ABI will be installed.  There are a couple of
helper Makefiles around.  amd64/i386/bsd.i386.mk looks like:

	LD+=			-m elf_i386
	MLIBDIR=		i386
	LIBC_MACHINE_ARCH=	${MLIBDIR}
	COMMON_MACHINE_ARCH=	${MLIBDIR}
	KVM_MACHINE_ARCH=	${MLIBDIR}
	PTHREAD_MACHINE_ARCH=	${MLIBDIR}
	BFD_MACHINE_ARCH=	${MLIBDIR}
	CSU_MACHINE_ARCH=	${MLIBDIR}
	CRYPTO_MACHINE_CPU=	${MLIBDIR}
	LDELFSO_MACHINE_CPU=	${MLIBDIR}

	.include "${NETBSDSRCDIR}/compat/m32.mk"

and the referenced m32.mk looks like:

	COPTS+=			-m32
	CPUFLAGS+=		-m32
	LDADD+=			-m32
	LDFLAGS+=		-m32
	MKDEPFLAGS+=		-m32

	.include "Makefile.compat"


compatsubdir.mk holds the list of subdirectories (the libraries and
ld.elf_so) to build with this ABI.

archdirs.mk holds the list of subdirectories for each port.

Makefile.compat has the basic framework to force the right paths for
library and ld.elf_so linkage.  It contains a hack to create subdirs
in the build that should be fixed.

dirshack/Makefile is a hack to get objdirs created timely, and should
be fixed in a better way.



mrg@eterna.com.au
december 2009