2
0
mirror of https://github.com/boostorg/build.git synced 2026-02-14 12:42:11 +00:00

Adjust new asan support.

The proposed asan support didn't fit into the regular msvc init structure.
This fixes that aspect and cleans up the support to correctly be minimal
and to add the missing runtime libs needed to actually enable the
asan support.
This commit is contained in:
Rene Rivera
2020-12-26 23:21:47 -06:00
parent 40b22386cd
commit f694f2eedd

View File

@@ -489,23 +489,71 @@ rule configure-version-specific ( toolset : version : conditions )
# This check however now only tests for 14.2 (which is 16.0) as msvc.jam doesn't distinguish between minor versions (e.g. 14.21..14.28 etc)
if ! [ version.version-less [ SPLIT_BY_CHARACTERS [ MATCH "^([0123456789.]+)" : $(version) ] : . ] : 14 2 ]
{
# Declare flags for the address sanitizer.
toolset.flags msvc.compile.c OPTIONS <address-sanitizer>on : /fsanitize=address /FS ;
toolset.flags msvc.compile.c++ OPTIONS <address-sanitizer>on : /fsanitize=address /FS ;
# General asan compile and link options.
toolset.flags $(toolset).compile OPTIONS
$(conditions)/<address-sanitizer>on
: /fsanitize=address /FS ;
toolset.flags $(toolset).link LINKFLAGS
$(conditions)/<address-sanitizer>on
: -incremental\:no ;
# Declare flags for the address sanitizer.
toolset.flags msvc.link OPTIONS <address-sanitizer>on/<address-model>64/<runtime-link>shared/<main-target-type>EXE : -incremental\:no /wholearchive\:"clang_rt.asan_dynamic-x86_64.lib" /wholearchive\:"clang_rt.asan_dynamic_runtime_thunk-x86_64.lib" ;
toolset.flags msvc.link OPTIONS <address-sanitizer>on/<address-model>64/<runtime-link>static/<main-target-type>EXE : -incremental\:no /wholearchive\:"clang_rt.asan-x86_64.lib" /wholearchive\:"clang_rt.asan_cxx-x86_64.lib" ;
toolset.flags msvc.link OPTIONS <address-sanitizer>on/<address-model>32/<runtime-link>shared/<main-target-type>EXE : -incremental\:no /wholearchive\:"clang_rt.asan_dynamic-i386.lib" /wholearchive\:"clang_rt.asan_dynamic_runtime_thunk-i386.lib" ;
toolset.flags msvc.link OPTIONS <address-sanitizer>on/<address-model>32/<runtime-link>static/<main-target-type>EXE : -incremental\:no /wholearchive\:"clang_rt.asan-i386.lib" /wholearchive\:"clang_rt.asan_cxx-i386.lib" ;
toolset.flags msvc.link OPTIONS <address-sanitizer>on/<address-model>64/<runtime-link>shared/<main-target-type>UNIT_TEST : -incremental\:no /wholearchive\:"clang_rt.asan_dynamic-x86_64.lib" /wholearchive\:"clang_rt.asan_dynamic_runtime_thunk-x86_64.lib" ;
toolset.flags msvc.link OPTIONS <address-sanitizer>on/<address-model>64/<runtime-link>static/<main-target-type>UNIT_TEST : -incremental\:no /wholearchive\:"clang_rt.asan-x86_64.lib" /wholearchive\:"clang_rt.asan_cxx-x86_64.lib" ;
toolset.flags msvc.link OPTIONS <address-sanitizer>on/<address-model>32/<runtime-link>shared/<main-target-type>UNIT_TEST : -incremental\:no /wholearchive\:"clang_rt.asan_dynamic-i386.lib" /wholearchive\:"clang_rt.asan_dynamic_runtime_thunk-i386.lib" ;
toolset.flags msvc.link OPTIONS <address-sanitizer>on/<address-model>32/<runtime-link>static/<main-target-type>UNIT_TEST : -incremental\:no /wholearchive\:"clang_rt.asan-i386.lib" /wholearchive\:"clang_rt.asan_cxx-i386.lib" ;
toolset.flags msvc.link.dll OPTIONS <address-sanitizer>on/<address-model>64/<runtime-link>shared : -incremental\:no /wholearchive\:"clang_rt.asan_dynamic-x86_64.lib" /wholearchive\:"clang_rt.asan_dynamic_runtime_thunk-x86_64.lib" ;
toolset.flags msvc.link.dll OPTIONS <address-sanitizer>on/<address-model>64/<runtime-link>static : -incremental\:no /wholearchive\:"clang_rt.asan_dll_thunk-x86_64.lib" ;
toolset.flags msvc.link.dll OPTIONS <address-sanitizer>on/<address-model>32/<runtime-link>shared : -incremental\:no /wholearchive\:"clang_rt.asan_dynamic-i386.lib" /wholearchive\:"clang_rt.asan_dynamic_runtime_thunk-i386.lib" ;
toolset.flags msvc.link.dll OPTIONS <address-sanitizer>on/<address-model>32/<runtime-link>static : -incremental\:no /wholearchive\:"clang_rt.asan_dll_thunk-i386.lib" ;
# The various 64 bit runtime asan support libraries and related flags.
toolset.flags $(toolset).link FINDLIBS_SA
$(conditions)/<address-sanitizer>on/<address-model>/<runtime-link>shared
$(conditions)/<address-sanitizer>on/<address-model>64/<runtime-link>shared
: clang_rt.asan_dynamic-x86_64
clang_rt.asan_dynamic_runtime_thunk-x86_64 ;
toolset.flags $(toolset).link LINKFLAGS
$(conditions)/<address-sanitizer>on/<address-model>/<runtime-link>shared
$(conditions)/<address-sanitizer>on/<address-model>64/<runtime-link>shared
: /wholearchive\:"clang_rt.asan_dynamic-x86_64.lib"
/wholearchive\:"clang_rt.asan_dynamic_runtime_thunk-x86_64.lib" ;
toolset.flags $(toolset).link FINDLIBS_SA
$(conditions)/<address-sanitizer>on/<address-model>/<runtime-link>static/<main-target-type>EXE
$(conditions)/<address-sanitizer>on/<address-model>/<runtime-link>static/<main-target-type>UNIT_TEST
$(conditions)/<address-sanitizer>on/<address-model>64/<runtime-link>static/<main-target-type>EXE
$(conditions)/<address-sanitizer>on/<address-model>64/<runtime-link>static/<main-target-type>UNIT_TEST
: clang_rt.asan-x86_64
clang_rt.asan_cxx-x86_64 ;
toolset.flags $(toolset).link LINKFLAGS
$(conditions)/<address-sanitizer>on/<address-model>/<runtime-link>static/<main-target-type>EXE
$(conditions)/<address-sanitizer>on/<address-model>/<runtime-link>static/<main-target-type>UNIT_TEST
$(conditions)/<address-sanitizer>on/<address-model>64/<runtime-link>static/<main-target-type>EXE
$(conditions)/<address-sanitizer>on/<address-model>64/<runtime-link>static/<main-target-type>UNIT_TEST
: /wholearchive\:"clang_rt.asan-x86_64.lib"
/wholearchive\:"clang_rt.asan_cxx-x86_64.lib" ;
toolset.flags $(toolset).link.dll FINDLIBS_SA
$(conditions)/<address-sanitizer>on/<address-model>/<runtime-link>static
$(conditions)/<address-sanitizer>on/<address-model>64/<runtime-link>static
: clang_rt.asan_dll_thunk-x86_64 ;
toolset.flags $(toolset).link.dll LINKFLAGS
$(conditions)/<address-sanitizer>on/<address-model>/<runtime-link>static
$(conditions)/<address-sanitizer>on/<address-model>64/<runtime-link>static
: /wholearchive\:"clang_rt.asan_dll_thunk-x86_64.lib" ;
# The various 32 bit runtime asan support libraries and related flags.
toolset.flags $(toolset).link FINDLIBS_SA
$(conditions)/<address-sanitizer>on/<address-model>32/<runtime-link>shared
: clang_rt.asan_dynamic-i386 clang_rt.asan_dynamic_runtime_thunk-i386 ;
toolset.flags $(toolset).link LINKFLAGS
$(conditions)/<address-sanitizer>on/<address-model>32/<runtime-link>shared
: /wholearchive\:"clang_rt.asan_dynamic-i386.lib"
/wholearchive\:"clang_rt.asan_dynamic_runtime_thunk-i386.lib" ;
toolset.flags $(toolset).link FINDLIBS_SA
$(conditions)/<address-sanitizer>on/<address-model>32/<runtime-link>static/<main-target-type>EXE
$(conditions)/<address-sanitizer>on/<address-model>32/<runtime-link>static/<main-target-type>UNIT_TEST
: clang_rt.asan-i386 clang_rt.asan_cxx-i386 ;
toolset.flags $(toolset).link LINKFLAGS
$(conditions)/<address-sanitizer>on/<address-model>32/<runtime-link>static/<main-target-type>EXE
$(conditions)/<address-sanitizer>on/<address-model>32/<runtime-link>static/<main-target-type>UNIT_TEST
: /wholearchive\:"clang_rt.asan-i386.lib"
/wholearchive\:"clang_rt.asan_cxx-i386.lib" ;
toolset.flags $(toolset).link.dll FINDLIBS_SA
$(conditions)/<address-sanitizer>on/<address-model>32/<runtime-link>static/<main-target-type>LIB/<link>shared
: clang_rt.asan_dll_thunk-i386 ;
toolset.flags $(toolset).link.dll LINKFLAGS
$(conditions)/<address-sanitizer>on/<address-model>32/<runtime-link>static/<main-target-type>LIB/<link>shared
: /wholearchive\:"clang_rt.asan_dll_thunk-i386.lib" ;
}
#