Index of /pub/NetBSD/NetBSD-release-10/src/compat
Name Last modified Size Description
Parent Directory -
sparc64/ 2022-12-18 05:30 -
riscv64/ 2022-12-18 05:30 -
powerpc64/ 2022-12-18 05:30 -
mips64/ 2022-12-18 05:30 -
m32.mk 2011-06-18 10:22 313
exec.mk 2021-05-31 11:10 1.4K
dirshack/ 2022-12-18 05:30 -
compatsubdir.mk 2015-07-23 17:03 1.0K
arm/ 2024-11-02 12:23 -
archdirs.mk 2021-06-08 02:11 773
amd64/ 2022-12-18 05:30 -
README 2012-03-30 03:35 2.3K
Makefile.compat 2012-08-24 06:21 852
Makefile 2022-05-29 19:47 288
CVS/ 2024-11-02 12:23 -
$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