NetBSD/compat
mrg cf4dd8937a remove the xfree86 reachover makefiles and the vast majority of
the support in the rest of the source tree.

X11 sets could use some cleaning up perhaps (just deletion, as
we've never really marked the old X11R6 as obsolete for native
xorg using platforms so far either.)
2015-07-23 08:03:24 +00:00
..
amd64/i386 Support building the xorg X11 libraries under MKCOMPAT. 2015-06-24 22:20:24 +00:00
arm Make clang happy by adding -mfpu=none to -mfloat-abi=soft 2015-07-05 20:19:29 +00:00
dirshack Implement build_install in src/lib/Makefile, which traverses the 2012-08-17 16:22:27 +00:00
mips64 Support building the xorg X11 libraries under MKCOMPAT. 2015-06-24 22:20:24 +00:00
powerpc64/powerpc Support building the xorg X11 libraries under MKCOMPAT. 2015-06-24 22:20:24 +00:00
riscv64/rv32 Support building the xorg X11 libraries under MKCOMPAT. 2015-06-24 22:20:24 +00:00
sparc64/sparc Support building the xorg X11 libraries under MKCOMPAT. 2015-06-24 22:20:24 +00:00
Makefile Implement build_install in src/lib/Makefile, which traverses the 2012-08-17 16:22:27 +00:00
Makefile.compat Revert last, it breaks the tricks xsrc uses. 2012-08-23 21:21:14 +00:00
README Fix typos; wording. 2012-03-29 18:35:11 +00:00
archdirs.mk Only support oabi for earm* 2015-05-27 15:35:23 +00:00
compatsubdir.mk remove the xfree86 reachover makefiles and the vast majority of 2015-07-23 08:03:24 +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.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