This is an automated email from the ASF dual-hosted git repository. zwoop pushed a commit to branch 9.0.x in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/9.0.x by this push: new 8d9d055 static linking asan, tsan, lsan 8d9d055 is described below commit 8d9d0558b897e92f5f66d9583afa5d5b7fe80da0 Author: Fei Deng <duke8...@gmail.com> AuthorDate: Tue Aug 27 11:20:25 2019 -0500 static linking asan, tsan, lsan (cherry picked from commit 211d6c9aaa5c9704bf8afed5b8b543f70002b2c8) --- configure.ac | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 73 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index c77b284..112afa4 100644 --- a/configure.ac +++ b/configure.ac @@ -974,26 +974,97 @@ fi # Flags for ASAN if test "x${enable_asan}" = "xyes"; then - if test "x${enable_tsan}" = "xyes"; then + if test "x${enable_tsan}" = "xyes" -o "x${enable_tsan}" = "xstatic"; then AC_ERROR([Cannot have ASAN and TSAN options at the same time, pick one]) fi TS_ADDTO(AM_CFLAGS, [-fno-omit-frame-pointer -fsanitize=address]) TS_ADDTO(AM_CXXFLAGS, [-fno-omit-frame-pointer -fsanitize=address]) +elif test "x${enable_asan}" = "xstatic"; then + if test "x${enable_tsan}" = "xyes" -o "x${enable_tsan}" = "xstatic"; then + AC_ERROR([Cannot have ASAN and TSAN options at the same time, pick one]) + fi + asan_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -fno-omit-frame-pointer -fsanitize=address -static-libasan" + AC_LANG_PUSH(C++) + AC_MSG_CHECKING([static ASAN library is available]) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([#include <stdlib.h>], [])], + [AC_MSG_RESULT([yes])], + [ + AC_MSG_RESULT([no]) + AC_ERROR([Cannot find static ASAN library.]) + ] + ) + AC_LANG_POP + CXXFLAGS="$asan_CXXFLAGS" + TS_ADDTO(AM_CFLAGS, [-fno-omit-frame-pointer -fsanitize=address -static-libasan]) + TS_ADDTO(AM_CXXFLAGS, [-fno-omit-frame-pointer -fsanitize=address -static-libasan]) fi # Flags for LSAN stand-alone mode if test "x${enable_lsan}" = "xyes"; then - if test "x${enable_asan}" = "xyes"; then + if test "x${enable_asan}" = "xyes" -o "x${enable_asan}" = "xstatic"; then AC_ERROR([ASAN already specified, --enable-lsan is meant only for lsan stand-alone mode]) fi + if test "x${enable_tsan}" = "xyes" -o "x${enable_tsan}" = "xstatic"; then + AC_ERROR([Cannot have LSAN and TSAN options at the same time, pick one]) + fi TS_ADDTO(AM_CFLAGS, [-fno-omit-frame-pointer -fsanitize=leak]) TS_ADDTO(AM_CXXFLAGS, [-fno-omit-frame-pointer -fsanitize=leak]) +elif test "x${enable_lsan}" = "xstatic"; then + if test "x${enable_asan}" = "xyes" -o "x${enable_asan}" = "xstatic"; then + AC_ERROR([ASAN already specified, --enable-lsan is meant only for lsan stand-alone mode]) + fi + if test "x${enable_tsan}" = "xyes" -o "x${enable_tsan}" = "xstatic"; then + AC_ERROR([Cannot have LSAN and TSAN options at the same time, pick one]) + fi + AC_CHECK_LIB(lsan, _init, [lsan_have_libs=yes], [lsan_have_libs=no]) + if test "x${lsan_have_libs}" == "xno"; then + AC_ERROR([Cannot find LSAN static library]) + fi + lsan_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -fno-omit-frame-pointer -fsanitize=leak -static-liblsan" + AC_LANG_PUSH(C++) + AC_MSG_CHECKING([static LSAN library is available]) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([#include <stdlib.h>], [])], + [AC_MSG_RESULT([yes])], + [ + AC_MSG_RESULT([no]) + AC_ERROR([Cannot find static LSAN library.]) + ] + ) + AC_LANG_POP + CXXFLAGS="$lsan_CXXFLAGS" + TS_ADDTO(AM_CFLAGS, [-fno-omit-frame-pointer -fsanitize=leak -static-liblsan]) + TS_ADDTO(AM_CXXFLAGS, [-fno-omit-frame-pointer -fsanitize=leak -static-liblsan]) fi # Flags for TSAN if test "x${enable_tsan}" = "xyes"; then TS_ADDTO(AM_CFLAGS, [-fsanitize=thread]) TS_ADDTO(AM_CXXFLAGS, [-fsanitize=thread]) +elif test "x${enable_tsan}" = "xstatic"; then + AC_CHECK_LIB(tsan, _init, [tsan_have_libs=yes], [tsan_have_libs=no]) + if test "x${tsan_have_libs}" == "xno"; then + AC_ERROR([Cannot find TSAN static library]) + fi + tsan_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -fsanitize=thread -static-libtsan" + AC_LANG_PUSH(C++) + AC_MSG_CHECKING([static TSAN library is available]) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([#include <stdlib.h>], [])], + [AC_MSG_RESULT([yes])], + [ + AC_MSG_RESULT([no]) + AC_ERROR([Cannot find static TSAN library.]) + ] + ) + AC_LANG_POP + CXXFLAGS="$tsan_CXXFLAGS" + TS_ADDTO(AM_CFLAGS, [-fsanitize=thread -static-libtsan]) + TS_ADDTO(AM_CXXFLAGS, [-fsanitize=thread -static-libtsan]) fi # Checks for pointer size.