123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- # Copyright (C) 2005, 2006 The Trustees of Indiana University.
- # Copyright (C) 2005 Douglas Gregor <doug.gregor -at- gmail.com>
- # Copyright (c) 2018 Stefan Seefeld
- # Use, modification and distribution is subject to the Boost Software
- # License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- # http://www.boost.org/LICENSE_1_0.txt)
- # Authors: Douglas Gregor
- # Andrew Lumsdaine
- import mpi ;
- import indirect ;
- import python ;
- import option ;
- import regex ;
- #
- # The `version-suffix` rule really belongs into python.jam, and
- # should be moved there. `split-version` is only duplicated here
- # as a prerequisite. (See https://github.com/boostorg/build/pull/290)
- #
- # Validate the version string and extract the major/minor part we care about.
- #
- local rule split-version ( version )
- {
- local major-minor = [ MATCH "^([0-9]+)\.([0-9]+)(.*)$" : $(version) : 1 2 3 ] ;
- if ! $(major-minor[2]) || $(major-minor[3])
- {
- ECHO "Warning: \"using python\" expects a two part (major, minor) version number; got" $(version) instead ;
- # Add a zero to account for the missing digit if necessary.
- major-minor += 0 ;
- }
- return $(major-minor[1]) $(major-minor[2]) ;
- }
- # Define a version suffix for libraries depending on Python.
- # For example, Boost.Python built for Python 2.7 uses the suffix "27"
- rule version-suffix ( version )
- {
- local major-minor = [ split-version $(version) ] ;
- local suffix = $(major-minor:J="") ;
- return $(suffix) ;
- }
- # Python build id (for Python libraries only).
- python-id = [ option.get "python-buildid" ] ;
- if $(python-id)
- {
- PYTHON_ID = [ regex.replace $(python-id) "[*\\/:.\"\']" _ ] ;
- }
- rule python-tag ( name : type ? : property-set )
- {
- local result = $(name) ;
- if $(type) in STATIC_LIB SHARED_LIB IMPORT_LIB
- {
- local version = [ $(property-set).get <python> ] ;
- local lib-suffix = [ version-suffix $(version) ] ;
- result = $(result)$(lib-suffix) ;
- }
- if $(type) in STATIC_LIB SHARED_LIB IMPORT_LIB && $(PYTHON_ID)
- {
- result = $(result)-$(PYTHON_ID) ;
- }
- # forward to the boost tagging rule
- return [ tag $(result) : $(type) : $(property-set) ] ;
- }
- mpi_python_libs = ;
- if [ mpi.configured ]
- {
- project boost/mpi
- : source-location ../src
- ;
- lib boost_mpi
- :
- broadcast.cpp
- cartesian_communicator.cpp
- communicator.cpp
- computation_tree.cpp
- content_oarchive.cpp
- environment.cpp
- error_string.cpp
- exception.cpp
- graph_communicator.cpp
- group.cpp
- intercommunicator.cpp
- mpi_datatype_cache.cpp
- mpi_datatype_oarchive.cpp
- packed_iarchive.cpp
- packed_oarchive.cpp
- packed_skeleton_iarchive.cpp
- packed_skeleton_oarchive.cpp
- point_to_point.cpp
- request.cpp
- text_skeleton_oarchive.cpp
- timer.cpp
- offsets.cpp
- : # Requirements
- <library>../../serialization/build//boost_serialization
- <library>/mpi//mpi [ mpi.extra-requirements ]
- <define>BOOST_MPI_SOURCE=1
- <link>shared:<define>BOOST_MPI_DYN_LINK=1
- <local-visibility>global
- : # Default build
- <link>shared
- : # Usage requirements
- <library>../../serialization/build//boost_serialization
- <library>/mpi//mpi [ mpi.extra-requirements ]
- ;
- if [ python.configured ]
- {
- lib boost_mpi_python
- : # Sources
- python/serialize.cpp
- : # Requirements
- <library>boost_mpi
- <library>/mpi//mpi [ mpi.extra-requirements ]
- <library>/boost/python//boost_python
- <link>shared:<define>BOOST_MPI_DYN_LINK=1
- <link>shared:<define>BOOST_MPI_PYTHON_DYN_LINK=1
- <link>shared:<define>BOOST_PYTHON_DYN_LINK=1
- <define>BOOST_MPI_PYTHON_SOURCE=1
- <python-debugging>on:<define>BOOST_DEBUG_PYTHON
- -<tag>@$(BOOST_JAMROOT_MODULE)%$(BOOST_JAMROOT_MODULE).tag
- <tag>@$(__name__).python-tag
- <conditional>@python.require-py
- <local-visibility>global
- : # Default build
- <link>shared
- : # Usage requirements
- <library>/mpi//mpi [ mpi.extra-requirements ]
- ;
- python-extension mpi
- : # Sources
- python/collectives.cpp
- python/py_communicator.cpp
- python/datatypes.cpp
- python/documentation.cpp
- python/py_environment.cpp
- python/py_nonblocking.cpp
- python/py_exception.cpp
- python/module.cpp
- python/py_request.cpp
- python/skeleton_and_content.cpp
- python/status.cpp
- python/py_timer.cpp
- : # Requirements
- <library>/boost/python//boost_python
- <library>boost_mpi_python
- <library>boost_mpi
- <library>/mpi//mpi [ mpi.extra-requirements ]
- <link>shared:<define>BOOST_MPI_DYN_LINK=1
- <link>shared:<define>BOOST_MPI_PYTHON_DYN_LINK=1
- <link>shared:<define>BOOST_PYTHON_DYN_LINK=1
- <link>shared <runtime-link>shared
- <python-debugging>on:<define>BOOST_DEBUG_PYTHON
- ;
- mpi_python_libs = boost_mpi_python mpi ;
- }
- }
- else if ! ( --without-mpi in [ modules.peek : ARGV ] )
- {
- message boost_mpi
- : "warning: skipping optional Message Passing Interface (MPI) library."
- : "note: to enable MPI support, add \"using mpi ;\" to user-config.jam."
- : "note: to suppress this message, pass \"--without-mpi\" to bjam."
- : "note: otherwise, you can safely ignore this message."
- ;
- }
- else
- {
- alias boost_mpi ;
- }
- boost-install boost_mpi $(mpi_python_libs) ;
|