Any chance someone could give this a spin on a clean system please?
It switches the pypy build to using a binary bootstrap copy of pypy,
rather than using python2.7 ("cpython") to build. A pseudo flavour
allows us to ignore the existing bootstrap and use the cpython-based
build instead (useful if creating a new bootstrap after a flag day).

Downside: extra complexity, slightly more annoying to update.

Upside: build is about half an hour faster on my laptop, and uses
a fair bit less ram (5.2GB -> 3.6GB max from \time -l).

As this is still fairly hefty and will take some time to fail, I have
also added an early check to skip building if ulimit -d is obviously
too low.

Comments and/or OKs welcome..

Index: Makefile
===================================================================
RCS file: /cvs/ports/lang/pypy/Makefile,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 Makefile
--- Makefile    11 Jun 2013 22:10:46 -0000      1.1.1.1
+++ Makefile    14 Jun 2013 22:14:07 -0000
@@ -1,6 +1,5 @@
 # $OpenBSD: Makefile,v 1.1.1.1 2013/06/11 22:10:46 edd Exp $
 
-# Oh boy. "5495684 maximum resident set size" on amd64
 VMEM_WARNING =         Yes
 
 ONLY_FOR_ARCHS =       amd64
@@ -10,6 +9,7 @@ COMMENT =              fast implementation of the Py
 V =                    2.0.2
 DISTNAME =             pypy-${V}-src
 PKGNAME =              pypy-${V}
+BOOTSTRAP-amd64 =      pypy-bootstrap-amd64-$V-0.tar.xz
 
 CATEGORIES =           lang
 
@@ -23,24 +23,52 @@ PERMIT_PACKAGE_CDROM =      Yes
 WANTLIB +=             bz2 c crypto curses expat ffi m pthread ssl util z
 
 MASTER_SITES =         https://bitbucket.org/pypy/pypy/downloads/
+MASTER_SITES0 =                http://spacehopper.org/mirrors/
 EXTRACT_SUFX =         .tar.bz2
 
+PSEUDO_FLAVORS =       no_bootstrap
+FLAVOR ?=
+
 DIST_SUBDIR =          pypy
+DISTFILES =            ${DISTNAME}${EXTRACT_SUFX}
+DISTFILES +=           ${BOOTSTRAP-${MACHINE_ARCH}}:0
+# if adding archs, list *all* bootstraps in SUPDISTFILES
+SUPDISTFILES =         ${BOOTSTRAP-amd64}:0
 
 MODULES +=             devel/gettext lang/python gcc4
 MODPY_VERSION =                2.7
 MODGCC4_ARCHS =                *
 MODGCC4_LANGS =                c c++
+MODGCC4_VERSION =      4.8
 
 USE_GMAKE =            Yes
 BUILD_DEPENDS =                textproc/py-sphinx
 
 WRKDIST =              ${WRKDIR}/pypy-${V}-src
 
+post-extract:
+       if [ `ulimit -d` -lt $$((3*1024*1024)) ]; then \
+           echo datasize limit is too low to build; exit 1; fi
+.if !${FLAVOR:Mno_bootstrap}
+       echo '#!/bin/sh' > ${WRKDIR}/bin/pypy
+       echo 'LD_LIBRARY_PATH=${WRKDIR}/bootstrap/system-libs exec 
${WRKDIR}/bootstrap/bin/pypy "$$@"' >> ${WRKDIR}/bin/pypy
+       chmod +x ${WRKDIR}/bin/pypy
+.endif
+
 do-build:
+.if ${FLAVOR:Mno_bootstrap}
        cd ${WRKSRC}/pypy/goal/ && ${SETENV} ${MAKE_ENV} \
-         PYPY_USESSION_DIR=${WRKDIR}/usession PYPY_CTYPES_DIR=${WRKDIR}/ctypes 
\
+         PYPY_USESSION_DIR=${WRKDIR}/usession \
+         PYPY_CTYPES_DIR=${WRKDIR}/ctypes \
          ${MODPY_BIN} ../../rpython/bin/rpython --source --opt=jit
+.else
+       cd ${WRKSRC}/pypy/goal/ && ${SETENV} ${MAKE_ENV} \
+         PYPY_GC_MAX_DELTA=200MB \
+         PYPY_USESSION_DIR=${WRKDIR}/usession \
+         PYPY_CTYPES_DIR=${WRKDIR}/ctypes \
+         pypy --jit loop_longevity=300 \
+         ../../rpython/bin/rpython --source --opt=jit
+.endif
        cd ${WRKDIR}/usession/testing_1 && ${SETENV} ${MAKE_ENV} ${MAKE_PROGRAM}
 
 do-install:
@@ -57,4 +85,20 @@ do-install:
        chown -R ${SHAREOWN}:${SHAREGRP}  ${PREFIX}/pypy/lib-python/2.7
        cd ${PREFIX}/bin && ln -s ../pypy/bin/pypy
 
+PYPY_PKG = ${PACKAGE_REPOSITORY}/${MACHINE_ARCH}/all/${FULLPKGNAME}.tgz
+
 .include <bsd.port.mk>
+
+# The bootstrap-based build process uses less memory and is faster,
+# but if you need to build a new bootstrap because the existing one no
+# longer runs, use FLAVOR=no_bootstrap to do a cpython-based build.
+# Expect 5.3GB+ memory usage.
+bootstrap: ${PYPY_PKG}
+       mkdir -p ${WRKDIR}/prepare/bootstrap/system-libs
+       cd ${WRKDIR}/prepare/bootstrap && tar zxf ${PYPY_PKG}
+       rm -rf ${WRKDIR}/prepare/bootstrap/{+*,info,man}
+       for i in `ldd ${WRKDIR}/prepare/bootstrap/bin/pypy | grep 'lib/' | \
+           awk '{ print $$7 }'` ; do \
+               cp $$i ${WRKDIR}/prepare/bootstrap/system-libs; done
+       cd ${WRKDIR}/prepare && tar cf - bootstrap | \
+           xz > ${FULLDISTDIR}/${BOOTSTRAP-${MACHINE_ARCH}}
Index: distinfo
===================================================================
RCS file: /cvs/ports/lang/pypy/distinfo,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 distinfo
--- distinfo    11 Jun 2013 22:10:46 -0000      1.1.1.1
+++ distinfo    14 Jun 2013 22:14:07 -0000
@@ -1,2 +1,4 @@
 SHA256 (pypy/pypy-2.0.2-src.tar.bz2) = 
GZHJDWuY4kCLN5DUtXtx7BxpNGMouDIVBc6ParRUTDw=
+SHA256 (pypy/pypy-bootstrap-amd64-2.0.2-0.tar.xz) = 
6HDP8l5Yt+HjTbrhEqen4cpmFSg2+Y4Bf8SlVrUoses=
 SIZE (pypy/pypy-2.0.2-src.tar.bz2) = 14819848
+SIZE (pypy/pypy-bootstrap-amd64-2.0.2-0.tar.xz) = 16432356

Reply via email to