This is an automated email from the ASF dual-hosted git repository.

alexey pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kudu.git


The following commit(s) were added to refs/heads/master by this push:
     new 71ffac30f [thirdparty] build gperftools with libunwind support
71ffac30f is described below

commit 71ffac30f2869671e22af44739afc6c824918a09
Author: Alexey Serbin <[email protected]>
AuthorDate: Fri Oct 6 16:49:49 2023 -0700

    [thirdparty] build gperftools with libunwind support
    
    This patch enables libunwind support when building gperftools.
    That's to add stracktrace collection option based on libunwind: it seems
    that might be useful with current version of gperftools library (2.8.1)
    where frame-pointer-based option isn't available for aarch64, so the
    only collection method is libgcc-based.
    
    Change-Id: I59b307e3ee3ff9464934ef60ca439dcfcd496a2c
    Reviewed-on: http://gerrit.cloudera.org:8080/20544
    Tested-by: Kudu Jenkins
    Reviewed-by: Marton Greber <[email protected]>
    Reviewed-by: Alexey Serbin <[email protected]>
---
 CMakeLists.txt                  |  9 ++++++++-
 thirdparty/build-definitions.sh | 39 ++++++++++++++++++++++++++++++---------
 2 files changed, 38 insertions(+), 10 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index c7af97d8c..5493cce1e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1157,9 +1157,16 @@ if (NOT "${KUDU_USE_ASAN}" AND
   ADD_THIRDPARTY_LIB(tcmalloc
     STATIC_LIB "${TCMALLOC_STATIC_LIB}"
     SHARED_LIB "${TCMALLOC_SHARED_LIB}")
+  # gperftools in thirdparty are built with --enable-libunwind to allow
+  # for TCMALLOC_STACKTRACE_METHOD=libunwind stacktrace collection
+  set(PROFILER_DEPS)
+  if (NOT APPLE)
+    set(PROFILER_DEPS unwind)
+  endif()
   ADD_THIRDPARTY_LIB(profiler
     STATIC_LIB "${PROFILER_STATIC_LIB}"
-    SHARED_LIB "${PROFILER_SHARED_LIB}")
+    SHARED_LIB "${PROFILER_SHARED_LIB}"
+    DEPS "${PROFILER_DEPS}")
   list(APPEND KUDU_BASE_LIBS tcmalloc profiler)
   add_definitions("-DTCMALLOC_ENABLED")
   set(KUDU_TCMALLOC_AVAILABLE 1)
diff --git a/thirdparty/build-definitions.sh b/thirdparty/build-definitions.sh
index f9f57b590..8d84eb9d9 100644
--- a/thirdparty/build-definitions.sh
+++ b/thirdparty/build-definitions.sh
@@ -468,18 +468,39 @@ build_glog() {
 }
 
 build_gperftools() {
+  local cfg_options="\
+    --enable-frame-pointers\
+    --with-pic\
+    --prefix=$PREFIX\
+    --enable-emergency-malloc"
+
+  local cfg_cflags="$EXTRA_CFLAGS"
+  local cfg_cxxflags="$EXTRA_CXXFLAGS"
+  local cfg_ldflags="$EXTRA_LDFLAGS"
+  local cfg_libs="$EXTRA_LIBS"
+
+  # On Linux, build perftools with libunwind support to have an option
+  # to collect stacktraces using libunwind in addition to the libgcc-
+  # and the frame pointers-based methods (if available for particular
+  # architecture). For more details on the stacktrace capturing options,
+  # see [1].
+  #
+  # [1] 
https://github.com/gperftools/gperftools/wiki/gperftools'-stacktrace-capturing-methods-and-their-issues
+  if [ -n "$OS_LINUX" ]; then
+    cfg_options="$cfg_options --enable-libunwind"
+    cfg_cflags="$cfg_cflags -I$PREFIX/include"
+    cfg_cxxflags="$cfg_cxxflags -I$PREFIX/include"
+    cfg_ldflags="$cfg_ldflags -L$PREFIX/lib -Wl,-rpath,$PREFIX/lib"
+  fi
+
   GPERFTOOLS_BDIR=$TP_BUILD_DIR/$GPERFTOOLS_NAME$MODE_SUFFIX
   mkdir -p $GPERFTOOLS_BDIR
   pushd $GPERFTOOLS_BDIR
-  CFLAGS="$EXTRA_CFLAGS" \
-    CXXFLAGS="$EXTRA_CXXFLAGS" \
-    LDFLAGS="$EXTRA_LDFLAGS" \
-    LIBS="$EXTRA_LIBS" \
-    $GPERFTOOLS_SOURCE/configure \
-    --enable-frame-pointers \
-    --with-pic \
-    --prefix=$PREFIX \
-    --enable-emergency-malloc
+  CFLAGS="$cfg_cflags" \
+    CXXFLAGS="$cfg_cxxflags" \
+    LDFLAGS="$cfg_ldflags" \
+    LIBS="$cfg_libs" \
+    $GPERFTOOLS_SOURCE/configure $cfg_options
   fixup_libtool
   make -j$PARALLEL $EXTRA_MAKEFLAGS install
   popd

Reply via email to