summaryrefslogtreecommitdiffstats
path: root/Makefile.libcompat
diff options
context:
space:
mode:
authorbdrewery <bdrewery@FreeBSD.org>2016-03-11 23:56:33 +0000
committerbdrewery <bdrewery@FreeBSD.org>2016-03-11 23:56:33 +0000
commite362e0e49e8af9953e2295635925a15a686d58f4 (patch)
tree3fe2a6efc9b3b4732a1261e5f808de30226ea57d /Makefile.libcompat
parent2d30f7a0c524347b02ad71e5ac059fdd4e2e3649 (diff)
downloadFreeBSD-src-e362e0e49e8af9953e2295635925a15a686d58f4.zip
FreeBSD-src-e362e0e49e8af9953e2295635925a15a686d58f4.tar.gz
Move Makefile.lib32 to Makefile.libcompat and generalize it.
This is in preparation for LIBSOFT. This file only supports *1* LIBCOMPAT value currently and must be capitalized. In Makefile.libcompat given LIBCOMPAT=FOO there can be values set for LIBFOOCFLAGS, LIBFOOCPUFLAGS, LIBFOOWMAKEENV, LIBFOOWMAKEFLAGS, LIBFOOCPUFLAGS, and LIBFOODTRACE. These will have the standard cross-build values appended onto them. This could be extended to support multiple libcompat libraries in the future once there is a need. Reviewed by: imp Sponsored by: EMC / Isilon Storage Division Differential Revision: https://reviews.freebsd.org/D5612
Diffstat (limited to 'Makefile.libcompat')
-rw-r--r--Makefile.libcompat152
1 files changed, 152 insertions, 0 deletions
diff --git a/Makefile.libcompat b/Makefile.libcompat
new file mode 100644
index 0000000..8a1fbec
--- /dev/null
+++ b/Makefile.libcompat
@@ -0,0 +1,152 @@
+# $FreeBSD$
+
+.if !targets(__<${_this:T}>__)
+__<${_this:T}>__:
+
+# Makefile for the compatibility libraries.
+# - 32-bit compat libraries on PowerPC and AMD64.
+# could also be for mips, but that doesn't work today.
+
+# -------------------------------------------------------------------
+# 32 bit world
+.if ${TARGET_ARCH} == "amd64"
+.if empty(TARGET_CPUTYPE)
+LIB32CPUFLAGS= -march=i686 -mmmx -msse -msse2
+.else
+LIB32CPUFLAGS= -march=${TARGET_CPUTYPE}
+.endif
+LIB32WMAKEENV= MACHINE=i386 MACHINE_ARCH=i386 \
+ MACHINE_CPU="i686 mmx sse sse2"
+LIB32WMAKEFLAGS= \
+ AS="${XAS} --32" \
+ LD="${XLD} -m elf_i386_fbsd -Y P,${LIBCOMPATTMP}/usr/lib32" \
+ OBJCOPY="${XOBJCOPY}"
+
+.elif ${TARGET_ARCH} == "powerpc64"
+.if empty(TARGET_CPUTYPE)
+LIB32CPUFLAGS= -mcpu=powerpc
+.else
+LIB32CPUFLAGS= -mcpu=${TARGET_CPUTYPE}
+.endif
+LIB32WMAKEENV= MACHINE=powerpc MACHINE_ARCH=powerpc
+LIB32WMAKEFLAGS= \
+ LD="${XLD} -m elf32ppc_fbsd" \
+ OBJCOPY="${XOBJCOPY}"
+.endif
+
+
+LIB32CFLAGS= -m32 -DCOMPAT_32BIT
+LIB32DTRACE= ${DTRACE} -32
+LIB32WMAKEFLAGS+= -DCOMPAT_32BIT
+
+# -------------------------------------------------------------------
+# Generic code for each type.
+# Set defaults based on type.
+libcompat= ${LIBCOMPAT:tl}
+_LIBCOMPAT_MAKEVARS= _OBJTREE TMP CFLAGS WMAKEENV WMAKEFLAGS WMAKE
+.for _var in ${_LIBCOMPAT_MAKEVARS}
+.if !empty(LIB${LIBCOMPAT}${_var})
+LIBCOMPAT${_var}?= ${LIB${LIBCOMPAT}${_var}}
+.endif
+.endfor
+
+# Shared flags
+LIBCOMPAT_OBJTREE?= ${OBJTREE}${.CURDIR}/world${libcompat}
+LIBCOMPATTMP?= ${OBJTREE}${.CURDIR}/lib${libcompat}
+
+LIBCOMPATCFLAGS+= ${LIBCOMPATCPUFLAGS} \
+ -isystem ${LIBCOMPATTMP}/usr/include/ \
+ -L${LIBCOMPATTMP}/usr/lib${libcompat} \
+ -B${LIBCOMPATTMP}/usr/lib${libcompat}
+
+# Yes, the flags are redundant.
+LIBCOMPATWMAKEENV+= MAKEOBJDIRPREFIX=${LIBCOMPAT_OBJTREE} \
+ _LDSCRIPTROOT=${LIBCOMPATTMP} \
+ INSTALL="sh ${.CURDIR}/tools/install.sh" \
+ PATH=${TMPPATH} \
+ LIBDIR=/usr/lib${libcompat} \
+ SHLIBDIR=/usr/lib${libcompat} \
+ DTRACE="${LIB$COMPATDTRACE:U${DTRACE}}"
+LIBCOMPATWMAKEFLAGS+= CC="${XCC} ${LIBCOMPATCFLAGS}" \
+ CXX="${XCXX} ${LIBCOMPATCFLAGS}" \
+ DESTDIR=${LIBCOMPATTMP} \
+ -DLIBRARIES_ONLY \
+ -DNO_CPU_CFLAGS \
+ MK_CTF=no \
+ -DNO_LINT \
+ MK_TESTS=no
+LIBCOMPATWMAKE+= ${LIBCOMPATWMAKEENV} ${MAKE} ${LIBCOMPATWMAKEFLAGS} \
+ MK_MAN=no MK_HTML=no
+LIBCOMPATIMAKE+= ${LIBCOMPATWMAKE:NINSTALL=*:NDESTDIR=*:N_LDSCRIPTROOT=*} \
+ MK_TOOLCHAIN=no ${IMAKE_INSTALL}
+
+.if ${XCC:N${CCACHE_BIN}:M/*}
+LIBCOMPATCFLAGS+= --sysroot=${WORLDTMP}
+.endif
+
+_LC_LIBDIRS.yes= lib gnu/lib
+_LC_LIBDIRS.${MK_CDDL:tl}= cddl/lib
+_LC_LIBDIRS.${MK_CRYPT:tl}= secure/lib
+_LC_LIBDIRS.${MK_KERBEROS:tl}= kerberos5/lib
+
+# Shared logic
+build${libcompat}: .PHONY
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo ">>> stage 5.1: building lib${libcompat} shim libraries"
+ @echo "--------------------------------------------------------------"
+ mkdir -p ${LIBCOMPATTMP}/usr/include
+ mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \
+ -p ${LIBCOMPATTMP}/usr >/dev/null
+ mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
+ -p ${LIBCOMPATTMP}/usr/include >/dev/null
+ mtree -deU -f ${.CURDIR}/etc/mtree/BSD.lib${libcompat}.dist \
+ -p ${LIBCOMPATTMP}/usr >/dev/null
+.if ${MK_DEBUG_FILES} != "no"
+ mtree -deU -f ${.CURDIR}/etc/mtree/BSD.debug.dist \
+ -p ${LIBCOMPATTMP}/usr/lib >/dev/null
+ mtree -deU -f ${.CURDIR}/etc/mtree/BSD.lib${libcompat}.dist \
+ -p ${LIBCOMPATTMP}/usr/lib/debug/usr >/dev/null
+.endif
+ mkdir -p ${WORLDTMP}
+ ln -sf ${.CURDIR}/sys ${WORLDTMP}
+.for _t in obj includes
+ ${_+_}cd ${.CURDIR}/include; ${LIBCOMPATWMAKE} DIRPRFX=include/ ${_t}
+.for _dir in ${_LC_LIBDIRS.yes}
+ ${_+_}cd ${.CURDIR}/${_dir}; ${LIBCOMPATWMAKE} DIRPRFX=${_dir}/ ${_t}
+.endfor
+.endfor
+.for _dir in usr.bin/lex/lib
+ ${_+_}cd ${.CURDIR}/${_dir}; ${LIBCOMPATWMAKE} DIRPRFX=${_dir}/ obj
+.endfor
+.for _dir in lib/ncurses/ncurses lib/ncurses/ncursesw lib/libmagic
+ ${_+_}cd ${.CURDIR}/${_dir}; \
+ WORLDTMP=${WORLDTMP} \
+ MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}" \
+ MAKEOBJDIRPREFIX=${LIBCOMPAT_OBJTREE} ${MAKE} SSP_CFLAGS= DESTDIR= \
+ DIRPRFX=${_dir}/ -DNO_LINT -DNO_CPU_CFLAGS MK_WARNS=no MK_CTF=no \
+ build-tools
+.endfor
+ ${_+_}cd ${.CURDIR}; \
+ ${LIBCOMPATWMAKE} -f Makefile.inc1 -DNO_FSCHG libraries
+.if ${libcompat} == "32"
+.for _t in obj depend all
+ ${_+_}cd ${.CURDIR}/libexec/rtld-elf; PROG=ld-elf32.so.1 ${LIBCOMPATWMAKE} \
+ -DNO_FSCHG DIRPRFX=libexec/rtld-elf/ ${_t}
+ ${_+_}cd ${.CURDIR}/usr.bin/ldd; PROG=ldd32 ${LIBCOMPATWMAKE} \
+ DIRPRFX=usr.bin/ldd ${_t}
+.endfor
+.endif
+
+distribute${libcompat} install${libcompat}: .PHONY
+.for _dir in ${_LC_LIBDIRS.yes}
+ ${_+_}cd ${.CURDIR}/${_dir}; ${LIBCOMPATIMAKE} ${.TARGET:S/${libcompat}$//}
+.endfor
+.if ${libcompat} == "32"
+ ${_+_}cd ${.CURDIR}/libexec/rtld-elf; \
+ PROG=ld-elf32.so.1 ${LIBCOMPATIMAKE} ${.TARGET:S/32$//}
+ ${_+_}cd ${.CURDIR}/usr.bin/ldd; PROG=ldd32 ${LIBCOMPATIMAKE} \
+ ${.TARGET:S/32$//}
+.endif
+
+.endif
OpenPOWER on IntegriCloud