README revision 1.7 1 $NetBSD: README,v 1.7 2011/04/17 01:29:06 mrg Exp $
2
3
4 Building multi- ABI libraries for NetBSD platforms.
5
6
7 src/compat has a framework to (re)build the libraries shipped with
8 NetBSD for a different ABI than the default for that platform. This
9 allows 32-bit libraries for the amd64 and sparc64 ports, and enables
10 the mips64 port to support all three of old-style 32-bit ("o32"), the
11 new 32-bit (default, "n32", 64-bit CPU required) or the 64-bit ABI.
12
13
14 The basic premise is to re-set $MAKEOBJDIR to fresh subdirectory
15 underneath src/compat and rebuild the libraries with a different set
16 of options. Each platform wanting support should create their port
17 subdirectory directly in src/compat, and then one subdirectory in here
18 for each ABI required. e.g., src/compat/amd64/i386 is where we build
19 the 32-bit compat libraries for the amd64 port. In each of these
20 subdirs, a small Makefile and makefile fragment should exist. The
21 Makefile should set BSD_MK_COMPAT_FILE to equal the fragment, and then
22 include "../../compatsubdir.mk" Eg, amd64/i386/Makefile has:
23
24 BSD_MK_COMPAT_FILE=${.CURDIR}/bsd.i386.mk
25
26 .include "../../compatsubdir.mk"
27
28 In the makefile fragment any changes to ABI flags are passed here
29 and the MLIBDIR variable must be set to the subdirectory in /usr/lib
30 where libraries for the ABI will be installed. There are a couple of
31 helper Makefiles around. amd64/i386/bsd.i386.mk looks like:
32
33 LD+= -m elf_i386
34 MLIBDIR= i386
35 LIBC_MACHINE_ARCH= ${MLIBDIR}
36 COMMON_MACHINE_ARCH= ${MLIBDIR}
37 KVM_MACHINE_ARCH= ${MLIBDIR}
38 PTHREAD_MACHINE_ARCH= ${MLIBDIR}
39 BFD_MACHINE_ARCH= ${MLIBDIR}
40 CSU_MACHINE_ARCH= ${MLIBDIR}
41 CRYPTO_MACHINE_CPU= ${MLIBDIR}
42 LDELFSO_MACHINE_CPU= ${MLIBDIR}
43
44 .include "${NETBSDSRCDIR}/compat/m32.mk"
45
46 and the referenced m32.mk looks like:
47
48 COPTS+= -m32
49 CPUFLAGS+= -m32
50 LDADD+= -m32
51 LDFLAGS+= -m32
52 MKDEPFLAGS+= -m32
53
54 .include "Makefile.compat"
55
56
57 compatsubdir.mk holds the list of subdirectories (the libraries and
58 ld.elf_so) to build with this ABI.
59
60 archdirs.mk holds the list of subdirectories for each port.
61
62 Makefile.compat has the basic framework to force the right paths for
63 library and ld.elf_so linkage. It contains a hack to create subdirs
64 in the build that should be fixed.
65
66 dirshack/Makefile is a hack to get objdirs created timely, and should
67 be fixed in a better way.
68
69
70
71 mrg (a] eterna.com.au
72 december 2009
73