No empty .Rs/.Re
[netbsd-mini2440.git] / compat / README
blobde47cbb6cbe402c19e6f1da33657b3cc8e1cbbb5
1 $NetBSD: README,v 1.4 2009/12/13 09:27:57 mrg Exp $
4 Building multi- ABI libraries for NetBSD platforms.
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.
14 The basic premise is to re-set $MAKEOBJDIRPREFIX 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 "../../Makefile.common".  Eg, amd64/i386/Makefile has:
24         BSD_MK_COMPAT_FILE=${.CURDIR}/bsd.i386.mk
26         .include "../../Makefile.common"
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:
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}
44         .include "${NETBSDSRCDIR}/compat/Makefile.m32"
46 and the referenced Makefile.m32 looks like:
48         COPTS+=                 -m32
49         CPUFLAGS+=              -m32
50         LDADD+=                 -m32
51         LDFLAGS+=               -m32
52         MKDEPFLAGS+=            -m32
54         .include "Makefile.compat"
57 Makefile.common holds the list of subdirectories (the libraries and
58 ld.elf_so) to build with this ABI.
60 Makefile.md_subdir holds the list of subdirectories for each port.
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.
66 dirshack/Makefile is a hack to get objdirs created timely, and should
67 be fixed in a better way.
71 mrg@eterna.com.au
72 december 2009