123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- # $Id$
- # Copyright 2006-2007 Roland Schwarz.
- # Copyright 2007 Anthony Williams
- # Copyright 2011-2012 Vicente J.Botet Escriba.
- # Distributed under 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)
- #########################################################################
- # The boost threading library can be built on top of different API's
- # Currently this is the win32 API and the pthreads API.
- # Pthread is native on unix variants.
- # To get pthread on windows you need the pthread win32 library
- # http://sourceware.org/pthreads-win32 which is available under LGPL.
- #
- # You need to provide the include path and lib path in the variables
- # PTW32_INCLUDE and PTW32_LIB respectively. You can specify these
- # paths in site-config.jam, user-config.jam or in the environment.
- # A new feature is provided to request a specific API:
- # <threadapi>win32 and <threadapi>pthread.
- #
- # The naming of the resulting libraries is mostly the same for the
- # variant native to the build platform, i.e.
- # boost_thread and the boost specific tagging.
- # For the library variant that is not native on the build platform
- # an additional tag is applied:
- # boost_thread_pthread for the pthread variant on windows, and
- # boost_thread_win32 for the win32 variant (likely when built on cygwin).
- #
- # To request the pthread variant on windows, from boost root you would
- # say e.g:
- # bjam msvc-8.0 --with-thread install threadapi=pthread
- #########################################################################
- import os ;
- import indirect ;
- import path ;
- import configure ;
- import threadapi-feature ;
- exe has_atomic_flag_lockfree : ../build/has_atomic_flag_lockfree_test.cpp ;
- project boost/thread
- : source-location ../src
- : requirements <threading>multi
- #<link>static:<define>BOOST_THREAD_STATIC_LINK=1
- #<link>shared:<define>BOOST_THREAD_DYN_LINK=1
- <link>static:<define>BOOST_THREAD_BUILD_LIB=1
- <link>shared:<define>BOOST_THREAD_BUILD_DLL=1
- -<tag>@$(BOOST_JAMROOT_MODULE)%$(BOOST_JAMROOT_MODULE).tag
- <tag>@$(__name__).tag
- <toolset>gcc:<cxxflags>-Wno-long-long
- #<define>BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED
- #<define>BOOST_SYSTEM_NO_DEPRECATED
- #<define>BOOST_THREAD_DONT_PROVIDE_INTERRUPTIONS
- #-pedantic -ansi -std=gnu++0x -Wextra -fpermissive
- <warnings>all
- <toolset>gcc:<cxxflags>-Wextra
- <toolset>gcc:<cxxflags>-pedantic
- <toolset>gcc:<cxxflags>-Wno-long-long
- #<toolset>gcc:<cxxflags>-ansi
- #<toolset>gcc:<cxxflags>-fpermissive
- <toolset>gcc-4:<cxxflags>-Wno-variadic-macros
- <toolset>gcc-5:<cxxflags>-Wno-variadic-macros
- #<toolset>gcc:<cxxflags>-Wunused-local-typedefs
- <toolset>gcc:<cxxflags>-Wunused-function
- <toolset>gcc:<cxxflags>-Wno-unused-parameter
- <toolset>darwin:<cxxflags>-Wextra
- <toolset>darwin:<cxxflags>-pedantic
- #<toolset>darwin:<cxxflags>-ansi
- <toolset>darwin:<cxxflags>-fpermissive
- <toolset>darwin:<cxxflags>-Wno-long-long
- #<toolset>darwin:<cxxflags>-Wno-variadic-macros
- <toolset>darwin-4:<cxxflags>-Wno-variadic-macros
- <toolset>darwin-5:<cxxflags>-Wno-variadic-macros
- #<toolset>darwin:<cxxflags>-Wunused-local-typedefs
- <toolset>darwin:<cxxflags>-Wunused-function
- <toolset>darwin:<cxxflags>-Wno-unused-parameter
- #<toolset>pathscale:<cxxflags>-Wextra
- <toolset>pathscale:<cxxflags>-Wno-long-long
- <toolset>pathscale:<cxxflags>-pedantic
- <toolset>clang:<warnings>on
- <toolset>clang:<cxxflags>-Wextra
- #<toolset>clang:<cxxflags>-ansi
- #<toolset>clang:<cxxflags>-fpermissive
- <toolset>clang:<cxxflags>-Wno-long-long
- <toolset>clang:<cxxflags>-Wunused-function
- <toolset>clang:<cxxflags>-Wno-variadic-macros
- <toolset>clang:<cxxflags>-Wno-unused-parameter
- #<toolset>gcc-mingw-4.4.0:<cxxflags>-fdiagnostics-show-option
- #<toolset>gcc-mingw-4.5.0:<cxxflags>-fdiagnostics-show-option
- #<toolset>gcc-mingw-4.6.0:<cxxflags>-fdiagnostics-show-option
- #<toolset>gcc-mingw-4.6.3:<cxxflags>-fdiagnostics-show-option
- #<toolset>gcc-mingw-4.7.0:<cxxflags>-fdiagnostics-show-option
- #<toolset>gcc-mingw-4.8.0:<cxxflags>-fdiagnostics-show-option
- #<toolset>gcc:<cxxflags>-Wno-missing-field-initializers
- <toolset>darwin-4.6.2:<cxxflags>-Wno-delete-non-virtual-dtor
- <toolset>darwin-4.7.0:<cxxflags>-Wno-delete-non-virtual-dtor
- #<toolset>clang-2.8:<cxxflags>-Wno-delete-non-virtual-dtor
- #<toolset>clang-2.8:<cxxflags>-Wno-unused-function
- #<toolset>clang-2.9:<cxxflags>-Wno-delete-non-virtual-dtor
- #<toolset>clang-2.9:<cxxflags>-Wno-unused-function
- <toolset>clang-3.0:<cxxflags>-Wno-delete-non-virtual-dtor
- #<toolset>clang-3.0:<cxxflags>-Wno-unused-function
- #<toolset>clang-3.0:<cxxflags>-Wno-unused-variable
- # Note: Some of the remarks from the Intel compiler are disabled
- # remark #193: zero used for undefined preprocessing identifier "XXX"
- # remark #304: access control not specified ("public" by default)
- # remark #593: variable "XXX" was set but never used
- # remark #1418: external function definition with no prior declaration
- # remark #2415: variable "XXX" of static storage duration was declared but never referenced
- <toolset>intel:<cxxflags>-wd193,304,383,444
- <toolset>intel:<cxxflags>-wd593,981
- <toolset>intel:<cxxflags>-wd1418
- <toolset>intel:<cxxflags>-wd2415
- <toolset>msvc:<cxxflags>/wd4100
- <toolset>msvc:<cxxflags>/wd4512
- <toolset>msvc:<cxxflags>/wd6246
- <target-os>windows:<define>WIN32_LEAN_AND_MEAN
- <target-os>windows:<define>BOOST_USE_WINDOWS_H
- # : default-build <threading>multi
- : usage-requirements # pass these requirement to dependents (i.e. users)
- #<link>static:<define>BOOST_THREAD_STATIC_LINK=1
- #<link>shared:<define>BOOST_THREAD_DYN_LINK=1
- <link>static:<define>BOOST_THREAD_BUILD_LIB=1
- <link>shared:<define>BOOST_THREAD_BUILD_DLL=1
- #<define>BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED
- #<define>BOOST_SYSTEM_NO_DEPRECATED
- #<define>BOOST_THREAD_DONT_PROVIDE_INTERRUPTIONS
- ;
- rule tag ( name : type ? : property-set )
- {
- local result = $(name) ;
- if $(type) in STATIC_LIB SHARED_LIB IMPORT_LIB
- {
- local api = [ $(property-set).get <threadapi> ] ;
- # non native api gets additional tag
- if $(api) != [ threadapi-feature.get-default $(property-set) ] {
- result = $(result)_$(api) ;
- }
- }
- # forward to the boost tagging rule
- return [ indirect.call $(BOOST_JAMROOT_MODULE)%$(BOOST_JAMROOT_MODULE).tag
- $(result) : $(type) : $(property-set) ] ;
- }
- rule win32_pthread_paths ( properties * )
- {
- local result ;
- local PTW32_INCLUDE ;
- local PTW32_LIB ;
- PTW32_INCLUDE = [ modules.peek : PTW32_INCLUDE ] ;
- PTW32_LIB = [ modules.peek : PTW32_LIB ] ;
- PTW32_INCLUDE ?= [ modules.peek user-config : PTW32_INCLUDE ] ;
- PTW32_LIB ?= [ modules.peek user-config : PTW32_LIB ] ;
- PTW32_INCLUDE ?= [ modules.peek site-config : PTW32_INCLUDE ] ;
- PTW32_LIB ?= [ modules.peek site-config : PTW32_LIB ] ;
- if ! ( $(PTW32_INCLUDE) && $(PTW32_LIB) )
- {
- if ! $(.notified)
- {
- echo "************************************************************" ;
- echo "Trying to build Boost.Thread with pthread support." ;
- echo "If you need pthread you should specify the paths." ;
- echo "You can specify them in site-config.jam, user-config.jam" ;
- echo "or in the environment." ;
- echo "For example:" ;
- echo "PTW32_INCLUDE=C:\\Program Files\\ptw32\\Pre-built2\\include" ;
- echo "PTW32_LIB=C:\\Program Files\\ptw32\\Pre-built2\\lib" ;
- echo "************************************************************" ;
- .notified = true ;
- }
- }
- else
- {
- local include_path = [ path.make $(PTW32_INCLUDE) ] ;
- local lib_path = [ path.make $(PTW32_LIB) ] ;
- local libname = pthread ;
- if <toolset>msvc in $(properties)
- {
- libname = $(libname)VC2.lib ;
- }
- if <toolset>gcc in $(properties)
- {
- libname = lib$(libname)GC2.a ;
- }
- lib_path = [ path.glob $(lib_path) : $(libname) ] ;
- if ! $(lib_path)
- {
- if ! $(.notified)
- {
- echo "************************************************************" ;
- echo "Trying to build Boost.Thread with pthread support." ;
- echo "But the library" $(libname) "could not be found in path" ;
- echo $(PTW32_LIB) ;
- echo "************************************************************" ;
- .notified = true ;
- }
- }
- else
- {
- result += <include>$(include_path) ;
- result += <library>$(lib_path) ;
- }
- }
- return $(result) ;
- }
- rule usage-requirements ( properties * )
- {
- local result ;
- if <threadapi>pthread in $(properties)
- {
- result += <define>BOOST_THREAD_POSIX ;
- if <target-os>windows in $(properties)
- {
- result += [ win32_pthread_paths $(properties) ] ;
- # TODO: What is for static linking? Is the <library> also needed
- # in that case?
- }
- }
- if <threadapi>win32 in $(properties)
- {
- result += <define>BOOST_THREAD_WIN32 ;
- }
- #if ! <toolset>vacpp in $(properties) || <toolset-vacpp:version>11.1 in $(properties) || <toolset-vacpp:version>12.1.0.1 in $(properties) || <toolset-vacpp:version>12.1 in $(properties)
- #{
- result += <library>/boost/chrono//boost_chrono ;
- #}
- return $(result) ;
- }
- rule requirements ( properties * )
- {
- local result ;
- if <threadapi>pthread in $(properties)
- {
- result += <define>BOOST_THREAD_POSIX ;
- if <target-os>windows in $(properties)
- {
- local paths = [ win32_pthread_paths $(properties) ] ;
- if $(paths)
- {
- result += $(paths) ;
- }
- else
- {
- result = <build>no ;
- }
- }
- result += <define>BOOST_THREAD_DONT_USE_CHRONO ;
- if ! [ configure.builds has_atomic_flag_lockfree
- : $(properties) : "lockfree boost::atomic_flag" ] {
- result += <library>/boost/atomic//boost_atomic ;
- }
- } else {
- if <threadapi>win32 in $(properties)
- {
- result += <define>BOOST_THREAD_WIN32 ;
- }
- result += <define>BOOST_THREAD_USES_CHRONO ;
- result += <library>/boost/chrono//boost_chrono ;
- }
- return $(result) ;
- }
- alias thread_sources
- : ## win32 sources ##
- win32/thread.cpp
- win32/tss_dll.cpp
- win32/tss_pe.cpp
- win32/thread_primitives.cpp
- future.cpp
- : ## requirements ##
- <threadapi>win32
- ;
- alias thread_sources
- : ## pthread sources ##
- pthread/thread.cpp
- pthread/once.cpp
- future.cpp
- : ## requirements ##
- <threadapi>pthread
- ;
- explicit thread_sources ;
- lib boost_thread
- : thread_sources
- : <conditional>@requirements
- :
- : <link>shared:<define>BOOST_THREAD_USE_DLL=1
- <link>static:<define>BOOST_THREAD_USE_LIB=1
- <conditional>@usage-requirements
- ;
- boost-install boost_thread ;
|