2009-12-13 20:58:27 +03:00
|
|
|
$NetBSD: README,v 1.5 2009/12/13 17:58:27 snj Exp $
|
2008-10-26 10:38:27 +03:00
|
|
|
|
|
|
|
|
2009-12-13 12:27:57 +03:00
|
|
|
Building multi- ABI libraries for NetBSD platforms.
|
2008-10-26 10:38:27 +03:00
|
|
|
|
|
|
|
|
2009-12-13 12:27:57 +03:00
|
|
|
src/compat has a framework to (re)build the libraries shipped with
|
|
|
|
NetBSD for a different ABI than the default for that platform. This
|
2009-12-13 20:58:27 +03:00
|
|
|
allows 32-bit libraries for the amd64 and sparc64 ports, and enables
|
2009-12-13 12:27:57 +03:00
|
|
|
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.
|
2008-10-26 10:38:27 +03:00
|
|
|
|
|
|
|
|
2009-12-13 12:27:57 +03:00
|
|
|
The basic premise is to re-set $MAKEOBJDIRPREFIX 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
|
2009-12-13 20:58:27 +03:00
|
|
|
the 32-bit compat libraries for the amd64 port. In each of these
|
2009-12-13 12:27:57 +03:00
|
|
|
subdirs, a small Makefile and makefile fragment should exist. The
|
|
|
|
Makefile should set BSD_MK_COMPAT_FILE to equal the fragment, and then
|
|
|
|
include "../../Makefile.common". Eg, amd64/i386/Makefile has:
|
2008-10-26 10:38:27 +03:00
|
|
|
|
2009-12-13 12:27:57 +03:00
|
|
|
BSD_MK_COMPAT_FILE=${.CURDIR}/bsd.i386.mk
|
2008-10-26 10:38:27 +03:00
|
|
|
|
2009-12-13 12:27:57 +03:00
|
|
|
.include "../../Makefile.common"
|
2008-10-26 10:38:27 +03:00
|
|
|
|
2009-12-13 12:27:57 +03:00
|
|
|
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
|
2009-12-13 20:58:27 +03:00
|
|
|
helper Makefiles around. amd64/i386/bsd.i386.mk looks like:
|
2008-10-26 10:38:27 +03:00
|
|
|
|
2009-12-13 12:27:57 +03:00
|
|
|
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}
|
2008-10-26 10:38:27 +03:00
|
|
|
|
2009-12-13 12:27:57 +03:00
|
|
|
.include "${NETBSDSRCDIR}/compat/Makefile.m32"
|
|
|
|
|
|
|
|
and the referenced Makefile.m32 looks like:
|
|
|
|
|
|
|
|
COPTS+= -m32
|
|
|
|
CPUFLAGS+= -m32
|
|
|
|
LDADD+= -m32
|
|
|
|
LDFLAGS+= -m32
|
|
|
|
MKDEPFLAGS+= -m32
|
|
|
|
|
|
|
|
.include "Makefile.compat"
|
|
|
|
|
|
|
|
|
|
|
|
Makefile.common holds the list of subdirectories (the libraries and
|
|
|
|
ld.elf_so) to build with this ABI.
|
|
|
|
|
|
|
|
Makefile.md_subdir 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
|