7ba2f2cf5b
Since Boost.System is now header-only, no need to link with the library.
319 lines
12 KiB
Plaintext
319 lines
12 KiB
Plaintext
# $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 ; |