cf4dd8937a
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.) |
||
---|---|---|
.. | ||
amd64/i386 | ||
arm | ||
dirshack | ||
mips64 | ||
powerpc64/powerpc | ||
riscv64/rv32 | ||
sparc64/sparc | ||
archdirs.mk | ||
compatsubdir.mk | ||
m32.mk | ||
Makefile | ||
Makefile.compat | ||
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