diff --git a/CMakeLists.txt b/CMakeLists.txt index 5d4e3c27271876bd9cc231485f62f8041f7dd54a..7a39496e741c244e6998df28fb26b4d1d1afe5fd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -777,6 +777,23 @@ endif() +############################################################################################################################ +## +## backtrace may be in a separate library +## +############################################################################################################################ + +if ( NOT WIN32 AND (WALBERLA_CXX_COMPILER_IS_GNU OR WALBERLA_CXX_COMPILER_IS_INTEL OR WALBERLA_CXX_COMPILER_IS_CLANG)) + find_package ( Backtrace QUIET ) + if ( Backtrace_FOUND ) + list ( APPEND SERVICE_LIBS ${Backtrace_LIBRARIES} ) + set ( WALBERLA_BUILD_WITH_BACKTRACE ON ) + set ( WALBERLA_BACKTRACE_HEADER ${Backtrace_HEADER} ) + endif ( Backtrace_FOUND ) +endif() + + + ############################################################################################################################ ## ## MPI diff --git a/src/core/debug/PrintStacktrace.cpp b/src/core/debug/PrintStacktrace.cpp index a83b13d23ad7c33e0e2b4b6d6d3b5caa075bc175..f939d19d576602db75a7ade1d107abe76da0c52c 100644 --- a/src/core/debug/PrintStacktrace.cpp +++ b/src/core/debug/PrintStacktrace.cpp @@ -36,9 +36,9 @@ void printStacktrace() } // namespace debug } // namespace walberla -#if defined(WALBERLA_CXX_COMPILER_IS_GNU) || defined(WALBERLA_CXX_COMPILER_IS_INTEL) || defined( WALBERLA_CXX_COMPILER_IS_CLANG) +#ifdef WALBERLA_BUILD_WITH_BACKTRACE -#include <execinfo.h> +#include WALBERLA_BACKTRACE_HEADER #include <cstdlib> #include <string> @@ -55,14 +55,13 @@ namespace debug { void * array[BACKTRACE_LENGTH]; size_t size; char **strings; - size_t i; size = numeric_cast< size_t >( backtrace (array, BACKTRACE_LENGTH) ); strings = backtrace_symbols (array, int_c(size) ); os << "Backtrace: " << std::endl; - for (i = 0; i < size; i++) + for (size_t i = 0; i < size; i++) { std::string line ( strings[i] ); #ifdef __APPLE__ diff --git a/src/waLBerlaDefinitions.in.h b/src/waLBerlaDefinitions.in.h index 0d3ed2a75744723af5b9bc1ecd5553252a18504f..bb9b6d029d80340f34342401a23d2f13e2356b7d 100644 --- a/src/waLBerlaDefinitions.in.h +++ b/src/waLBerlaDefinitions.in.h @@ -53,6 +53,10 @@ #cmakedefine WALBERLA_USE_STD_ANY #cmakedefine WALBERLA_USE_STD_EXPERIMENTAL_OPTIONAL #cmakedefine WALBERLA_USE_STD_OPTIONAL +#cmakedefine WALBERLA_BUILD_WITH_BACKTRACE +#ifdef WALBERLA_BUILD_WITH_BACKTRACE +#define WALBERLA_BACKTRACE_HEADER "${Backtrace_HEADER}" +#endif // SIMD #cmakedefine WALBERLA_SIMD_FORCE_SCALAR