Convert tools/lib32/build.sh into world connectable hooks. This still

rates pretty high on the "hack!" scale, but it works for me.  Adding
-DWANT_LIB32 to the world build command line, or 'WANT_LIB32=yes' to
/etc/make.conf will include the 32 bit libraries with the build.

I have not made this default behavior.  Cross compiling this stuff is an
adventure I have not investigated.

This is still a WIP.  We needed this at work so that we could install from
a readonly obj tree - lib32/build.sh wasn't up to that.
This commit is contained in:
Peter Wemm 2004-11-06 03:14:26 +00:00
parent 5911b52027
commit 1d9468ee37
2 changed files with 95 additions and 1 deletions

View File

@ -69,7 +69,8 @@ TGTS= all all-man buildkernel buildworld checkdpadd clean \
kernel-toolchain libraries lint maninstall \
obj objlink regress rerelease tags toolchain update \
_worldtmp _legacy _bootstrap-tools _cleanobj _obj \
_build-tools _cross-tools _includes _libraries _depend
_build-tools _cross-tools _includes _libraries _depend \
build32 install32
BITGTS= files includes
BITGTS:=${BITGTS} ${BITGTS:S/^/build/} ${BITGTS:S/^/install/}

View File

@ -201,6 +201,46 @@ WMAKEENV= ${CROSSENV} \
PATH=${TMPPATH}
WMAKE= ${WMAKEENV} ${MAKE} -f Makefile.inc1 DESTDIR=${WORLDTMP}
.if ${MACHINE_ARCH} == amd64
# 32 bit world
LIB32TMP= ${OBJTREE}${.CURDIR}/lib32
LIB32PREFLAGS= -m32 -march=athlon-xp -msse2 -mfancy-math-387 -DCOMPAT_32BIT
LIB32POSTFLAGS= -I${LIB32TMP}/usr/include \
-L${LIB32TMP}/usr/lib32 \
-B${LIB32TMP}/usr/lib32
LIB32CC= ${LIB32PREFLAGS} \
${LIB32POSTFLAGS}
LIB32CXX= ${LIB32PREFLAGS} -I${LIB32TMP}/usr/include/c++/3.4 \
${LIB32POSTFLAGS}
LIB32OBJC= ${LIB32PREFLAGS} -I${LIB32TMP}/usr/include/objc \
${LIB32POSTFLAGS}
# Yes, the flags are redundant.
LIB32MAKEENV= MAKEOBJDIRPREFIX=${OBJTREE}/lib32 \
_SHLIBDIRPREFIX=${LIB32TMP} \
MACHINE_ARCH=i386 \
INSTALL="sh ${.CURDIR}/tools/install.sh" \
PATH=${TMPPATH} \
CC="cc ${LIB32CC}" \
CXX="c++ ${LIB32CXX}" \
OBJC="cc ${LIB32OBJC}" \
LD="ld -m elf_i386_fbsd -Y P,${LIB32TMP}/usr/lib32" \
AS="as --32" \
LIBDIR=/usr/lib32 \
SHLIBDIR=/usr/lib32
LIB32MAKE= ${LIB32MAKEENV} ${MAKE} -DNO_CPU_CFLAGS -DCOMPAT_32BIT \
-DNO_BIND -DNOMAN -DNODOC -DNOINFO -DNOHTML \
CC="cc ${LIB32CC}" \
CXX="c++ ${LIB32CXX}" \
OBJC="cc ${LIB32OBJC}" \
LD="ld -m elf_i386_fbsd -Y P,${LIB32TMP}/usr/lib32" \
AS="as --32" \
LIBDIR=/usr/lib32 \
SHLIBDIR=/usr/lib32
.endif
# install stage
.if empty(.MAKEFLAGS:M-n)
IMAKEENV= ${CROSSENV} \
@ -338,6 +378,53 @@ everything:
@echo ">>> stage 4.4: building everything"
@echo "--------------------------------------------------------------"
${_+_}cd ${.CURDIR}; ${WMAKE} par-all
.if ${MACHINE_ARCH} == amd64
build32:
@echo
@echo "--------------------------------------------------------------"
@echo ">>> stage 5.1: building 32 bit shim libraries"
@echo "--------------------------------------------------------------"
.for _dir in \
lib lib32 usr/bin usr/include usr/lib32 usr/libdata/ldscripts \
usr/libexec usr/sbin usr/share/misc \
usr/share/snmp/defs usr/share/snmp/mibs
mkdir -p ${LIB32TMP}/${_dir}
.endfor
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
-p ${LIB32TMP}/usr/include >/dev/null
ln -sf ${.CURDIR}/sys ${WORLDTMP}
.for _t in obj includes
cd ${.CURDIR}/include; \
${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t}
cd ${.CURDIR}/lib; \
${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t}
cd ${.CURDIR}/gnu/lib; \
${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t}
.if !defined(NOCRYPT)
cd ${.CURDIR}/secure/lib; \
${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t}
.endif
.endfor
.for _dir in lib/libncurses lib/libmagic
cd ${.CURDIR}/${_dir}; \
MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} build-tools
.endfor
cd ${.CURDIR}; \
${LIB32MAKE} -f Makefile.inc1 DESTDIR=${LIB32TMP} libraries
.for _t in obj depend all
cd ${.CURDIR}/libexec/rtld-elf; \
PROG=ld-elf32.so.1 ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t}
.endfor
install32:
mkdir -p ${DESTDIR}/usr/lib32 # XXX add to mtree
cd ${.CURDIR}/lib; ${LIB32MAKE} install
cd ${.CURDIR}/gnu/lib; ${LIB32MAKE} install
.if !defined(NOCRYPT)
cd ${.CURDIR}/secure/lib; ${LIB32MAKE} install
.endif
cd ${.CURDIR}/libexec/rtld-elf; PROG=ld-elf32.so.1 ${LIB32MAKE} install
.endif
WMAKE_TGTS=
@ -349,6 +436,9 @@ WMAKE_TGTS+= _cleanobj _obj _build-tools
WMAKE_TGTS+= _cross-tools
.endif
WMAKE_TGTS+= _includes _libraries _depend everything
.if ${MACHINE_ARCH} == amd64 && defined(WANT_LIB32)
WMAKE_TGTS+= build32
.endif
buildworld: ${WMAKE_TGTS}
.ORDER: ${WMAKE_TGTS}
@ -479,6 +569,9 @@ reinstall: ${SPECIAL_INSTALLCHECKS}
@echo ">>> Installing everything"
@echo "--------------------------------------------------------------"
${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install
.if ${MACHINE_ARCH} == amd64 && defined(WANT_LIB32)
${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install32
.endif
redistribute:
@echo "--------------------------------------------------------------"