NetBSD/compat
joerg 933525b99b Implement build_install in src/lib/Makefile, which traverses the
subdirectories and invokes dependall/install. Do this in groups
delimited by .WAIT to ensure that depending libraries can use the
installed versions and don't need to know the locations in the source
tree.

Use this new target in src/Makefile to replace most of the adhoc library
logic with two special cases, src/lib and src/compat. Adjust
sys/Makefile to include the module directory when building them. Add
some necessary .WAITs in src/lib/Makefile to reflect the dependencies
from src/Makefile and also add the rump libraries here.
2012-08-17 16:22:27 +00:00
..
amd64/i386
arm/eabi Initial MKCOMPAT support for ARM EABI. (doesn't quite work right) 2012-08-03 08:02:47 +00:00
dirshack Implement build_install in src/lib/Makefile, which traverses the 2012-08-17 16:22:27 +00:00
mips64
sparc64/sparc
Makefile Implement build_install in src/lib/Makefile, which traverses the 2012-08-17 16:22:27 +00:00
Makefile.compat
README
archdirs.mk Initial MKCOMPAT support for ARM EABI. (doesn't quite work right) 2012-08-03 08:02:47 +00:00
compatsubdir.mk Implement build_install in src/lib/Makefile, which traverses the 2012-08-17 16:22:27 +00:00
m32.mk

README

$NetBSD: README,v 1.8 2012/03/29 18:35:11 wiz 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
subdirectories, 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".  E.g., 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 subdirectories
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