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