Hi,

I am playing with boost contexts which is configured out by the current port.
I am able to make execution_context and fcontext work on amd64. The first
using a simple test program and the second using a non-trival program.

The only actual change in boost itself is to use a mmap(...
MMAP_STACK ...) for stack allocation.  So I like to enable the
disabled parts. They are not extensivly tested and some other parts
might need a patch too (there are several classes creating stacks).

At the moment I just like to know if I am taking the right approach
port-wise. So, any comments or advise?

        -Otto

Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/boost/Makefile,v
retrieving revision 1.75
diff -u -p -r1.75 Makefile
--- Makefile    11 Sep 2018 19:26:14 -0000      1.75
+++ Makefile    21 Nov 2018 12:17:35 -0000
@@ -7,7 +7,7 @@ COMMENT=        free peer-reviewed portable C++
 VERSION=       1.66.0
 DISTNAME=      boost_${VERSION:S/./_/g}
 PKGNAME=       boost-${VERSION}
-REVISION=      0
+REVISION=      2
 CATEGORIES=    devel
 MASTER_SITES=  ${MASTER_SITE_SOURCEFORGE:=boost/}
 EXTRACT_SUFX=  .tar.bz2
@@ -45,11 +45,7 @@ BOOST_LIBS=  boost_atomic-mt \
                boost_unit_test_framework-mt boost_unit_test_framework \
                boost_wserialization-mt boost_wserialization \
                boost_wave-mt \
-               boost_type_erasure-mt boost_type_erasure \
-
-.for _lib in ${BOOST_LIBS}
-SHARED_LIBS+=  ${_lib} ${SO_VERSION}
-.endfor
+               boost_type_erasure-mt boost_type_erasure
 
 HOMEPAGE=      http://www.boost.org/
 
@@ -63,6 +59,12 @@ WANTLIB += ${COMPILER_LIBCXX} bz2 c icud
 
 COMPILER= base-clang ports-gcc
 
+.if ${MACHINE_ARCH} == "amd64"
+PKG_ARGS+=-Damd64=1
+.else
+PKG_ARGS+=-Damd64=0
+.endif
+
 MODULES=       lang/python
 MODPY_RUNDEP=  No
 
@@ -102,7 +104,24 @@ BOOTSTRAP= --with-bjam=${WRKSRC}/bjam \
 # 'context' and 'coroutine' use MD bits and miss support for Alpha,
 # PA-RISC, SPARC and SuperH. The author does not care
 # about adding support for Alpha and PA-RISC.
+
+.if ${MACHINE_ARCH} == "amd64"
+BOOST_LIBS+=   boost_context-mt \
+               boost_coroutine boost_coroutine-mt \
+               boost_fiber-mt \
+               boost_stacktrace_basic \
+               boost_stacktrace_basic-mt \
+               boost_stacktrace_addr2line \
+               boost_stacktrace_addr2line-mt \
+               boost_stacktrace_noop \
+               boost_stacktrace_noop-mt
+.else
 BOOTSTRAP+=    --without-libraries=context,coroutine,fiber,stacktrace
+.endif
+
+.for _lib in ${BOOST_LIBS}
+SHARED_LIBS+=  ${_lib} ${SO_VERSION}
+.endfor
 
 PY2_BOOTSTRAP= --with-python=${LOCALBASE}/bin/python${MODPY_DEFAULT_VERSION_2} 
\
                --with-python-version=${MODPY_DEFAULT_VERSION_2} \
Index: patches/patch-boost_context_fixedsize_stack_hpp
===================================================================
RCS file: patches/patch-boost_context_fixedsize_stack_hpp
diff -N patches/patch-boost_context_fixedsize_stack_hpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-boost_context_fixedsize_stack_hpp     21 Nov 2018 12:17:35 
-0000
@@ -0,0 +1,34 @@
+$OpenBSD$
+
+Index: boost/context/fixedsize_stack.hpp
+--- boost/context/fixedsize_stack.hpp.orig
++++ boost/context/fixedsize_stack.hpp
+@@ -26,6 +26,8 @@
+ #  include BOOST_ABI_PREFIX
+ #endif
+ 
++#include <sys/mman.h>
++
+ namespace boost {
+ namespace context {
+ 
+@@ -42,8 +44,8 @@ class basic_fixedsize_stack { (public)
+     }
+ 
+     stack_context allocate() {
+-        void * vp = std::malloc( size_);
+-        if ( ! vp) {
++        void * vp = mmap(NULL, size_, PROT_READ | PROT_WRITE, MAP_PRIVATE | 
MAP_ANON | MAP_STACK, -1, 0);
++        if ( vp == MAP_FAILED ) {
+             throw std::bad_alloc();
+         }
+         stack_context sctx;
+@@ -62,7 +64,7 @@ class basic_fixedsize_stack { (public)
+         VALGRIND_STACK_DEREGISTER( sctx.valgrind_stack_id);
+ #endif
+         void * vp = static_cast< char * >( sctx.sp) - sctx.size;
+-        std::free( vp);
++        munmap(vp, sctx.size);
+     }
+ };
+ 
Index: pkg/PFRAG.amd64
===================================================================
RCS file: pkg/PFRAG.amd64
diff -N pkg/PFRAG.amd64
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ pkg/PFRAG.amd64     21 Nov 2018 12:17:35 -0000
@@ -0,0 +1,20 @@
+lib/libboost_context-mt.a
+@lib lib/libboost_context-mt.so.${LIBboost_context-mt_VERSION}
+lib/libboost_coroutine-mt.a
+@lib lib/libboost_coroutine-mt.so.${LIBboost_coroutine-mt_VERSION}
+lib/libboost_coroutine.a
+@lib lib/libboost_coroutine.so.${LIBboost_coroutine_VERSION}
+lib/libboost_fiber-mt.a
+@lib lib/libboost_fiber-mt.so.${LIBboost_fiber-mt_VERSION}
+lib/libboost_stacktrace_addr2line-mt.a
+@lib 
lib/libboost_stacktrace_addr2line-mt.so.${LIBboost_stacktrace_addr2line-mt_VERSION}
+lib/libboost_stacktrace_addr2line.a
+@lib 
lib/libboost_stacktrace_addr2line.so.${LIBboost_stacktrace_addr2line_VERSION}
+lib/libboost_stacktrace_basic-mt.a
+@lib 
lib/libboost_stacktrace_basic-mt.so.${LIBboost_stacktrace_basic-mt_VERSION}
+lib/libboost_stacktrace_basic.a
+@lib lib/libboost_stacktrace_basic.so.${LIBboost_stacktrace_basic_VERSION}
+lib/libboost_stacktrace_noop-mt.a
+@lib lib/libboost_stacktrace_noop-mt.so.${LIBboost_stacktrace_noop-mt_VERSION}
+lib/libboost_stacktrace_noop.a
+@lib lib/libboost_stacktrace_noop.so.${LIBboost_stacktrace_noop_VERSION}
Index: pkg/PLIST
===================================================================
RCS file: /cvs/ports/devel/boost/pkg/PLIST,v
retrieving revision 1.19
diff -u -p -r1.19 PLIST
--- pkg/PLIST   23 Aug 2018 16:38:10 -0000      1.19
+++ pkg/PLIST   21 Nov 2018 12:17:35 -0000
@@ -1,6 +1,7 @@
 @comment $OpenBSD: PLIST,v 1.19 2018/08/23 16:38:10 kirby Exp $
 @bin bin/b2
 @bin bin/bjam
+%%amd64%%
 include/boost/
 include/boost/accumulators/
 include/boost/accumulators/accumulators.hpp

Reply via email to