Home | History | Annotate | Line # | Download | only in compat
      1 $NetBSD: README,v 1.9 2024/02/04 05:43:05 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 subdirectories, 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".  E.g., 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 subdirectories
     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] eterna23.net
     72 december 2009
     73