improve sanitizer feature in Jamfile, that detects which compiler is used. don't enable msvc-debug iterators explicitly, as it breaks release builds. They are enabled by default in debug builds anyway
This commit is contained in:
parent
2f5fd13a59
commit
b9a3ba1b37
23
Jamfile
23
Jamfile
|
@ -267,14 +267,6 @@ rule building ( properties * )
|
||||||
result += <cflags>/bigobj ;
|
result += <cflags>/bigobj ;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( <variant>debug in $(properties)
|
|
||||||
&& ( <toolset>clang in $(properties)
|
|
||||||
|| <toolset>gcc in $(properties)
|
|
||||||
|| <toolset>darwin in $(properties) ) )
|
|
||||||
{
|
|
||||||
result += <cflags>-ftrapv ;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( <asserts>production in $(properties)
|
if ( <asserts>production in $(properties)
|
||||||
|| <asserts>on in $(properties) )
|
|| <asserts>on in $(properties) )
|
||||||
{
|
{
|
||||||
|
@ -388,13 +380,11 @@ rule sanitizer-options ( properties * )
|
||||||
local flags ;
|
local flags ;
|
||||||
|
|
||||||
# sanitize is a clang and GCC feature
|
# sanitize is a clang and GCC feature
|
||||||
# TODO: carve out specific sanitizers based on compiler version
|
|
||||||
# <toolset-gcc:version> <toolset-clang:version>
|
|
||||||
if <toolset>clang in $(properties)
|
if <toolset>clang in $(properties)
|
||||||
{
|
{
|
||||||
local version = [ feature.get-values <toolset-clang:version> : $(properties) ] ;
|
local version = [ feature.get-values <toolset-clang:version> : $(properties) ] ;
|
||||||
# implicit-conversion sanitizer was added in clang-7
|
# implicit-conversion sanitizer was added in clang-7
|
||||||
if $(version) >= 7 {
|
if $(version) >= 7.0 {
|
||||||
sanitizers += address,undefined,leak,implicit-conversion ;
|
sanitizers += address,undefined,leak,implicit-conversion ;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -403,19 +393,21 @@ rule sanitizer-options ( properties * )
|
||||||
extra = <cflags>-fsanitize-blacklist=$(blacklist-file) ;
|
extra = <cflags>-fsanitize-blacklist=$(blacklist-file) ;
|
||||||
flags = -fsanitize=$(sanitizers) -fno-sanitize-recover=all ;
|
flags = -fsanitize=$(sanitizers) -fno-sanitize-recover=all ;
|
||||||
}
|
}
|
||||||
else if <toolset>gcc in $(properties)
|
# sanitizers are not available on windows (mingw)
|
||||||
|
else if <toolset>gcc in $(properties) && ! <target-os>windows in $(properties)
|
||||||
{
|
{
|
||||||
local version = [ feature.get-values <toolset-gcc:version> : $(properties) ] ;
|
local version = [ feature.get-values <toolset-gcc:version> : $(properties) ] ;
|
||||||
if $(version) >= 7 {
|
if $(version) >= 7.0 {
|
||||||
extra = <cflags>-fsanitize-address-use-after-scope ;
|
extra = <cflags>-fsanitize-address-use-after-scope ;
|
||||||
}
|
}
|
||||||
if $(version) >= 5 {
|
if $(version) >= 5.0 {
|
||||||
sanitizers = address,undefined,leak ;
|
sanitizers = address,undefined,leak ;
|
||||||
flags = -fsanitize=$(sanitizers) -fno-sanitize-recover=all ;
|
flags = -fsanitize=$(sanitizers) -fno-sanitize-recover=all ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if <toolset>darwin in $(properties)
|
else if <toolset>darwin in $(properties)
|
||||||
{
|
{
|
||||||
|
# apple's compiler is typically an old version of clang
|
||||||
sanitizers = address,undefined ;
|
sanitizers = address,undefined ;
|
||||||
flags = -fsanitize=$(sanitizers) -fno-sanitize-recover=all ;
|
flags = -fsanitize=$(sanitizers) -fno-sanitize-recover=all ;
|
||||||
}
|
}
|
||||||
|
@ -502,8 +494,7 @@ feature boost-link : default static shared : propagated composite ;
|
||||||
# constructors on some containers when enabling debug iterators, so it's
|
# constructors on some containers when enabling debug iterators, so it's
|
||||||
# possible to turn them off
|
# possible to turn them off
|
||||||
feature debug-iterators : default off on : composite propagated link-incompatible ;
|
feature debug-iterators : default off on : composite propagated link-incompatible ;
|
||||||
feature.compose <debug-iterators>on : <define>_ITERATOR_DEBUG_LEVEL=2 <define>_GLIBCXX_DEBUG
|
feature.compose <debug-iterators>on : <define>_GLIBCXX_DEBUG <define>_GLIBCXX_DEBUG_PEDANTIC ;
|
||||||
<define>_GLIBCXX_DEBUG_PEDANTIC ;
|
|
||||||
feature.compose <debug-iterators>off : <define>_ITERATOR_DEBUG_LEVEL=0 ;
|
feature.compose <debug-iterators>off : <define>_ITERATOR_DEBUG_LEVEL=0 ;
|
||||||
|
|
||||||
feature fpic : off on : composite propagated link-incompatible ;
|
feature fpic : off on : composite propagated link-incompatible ;
|
||||||
|
|
Loading…
Reference in New Issue