From 53d82259d6191fdd281136678d4f601b27b76e9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Wo=CC=81jcik?= <3044353+pwojcikdev@users.noreply.github.com> Date: Sun, 26 Jan 2025 20:56:54 +0100 Subject: [PATCH] Fixes --- CMakeLists.txt | 51 ++++++++++++++++--------------- ci/prepare/linux/prepare-clang.sh | 4 +++ nano/core_test/stacktrace.cpp | 1 + 3 files changed, 32 insertions(+), 24 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 92ad160cce..08df25133a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -391,19 +391,20 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules") # Find libbacktrace first (Unix/Linux only) if(NOT WIN32) - find_path(BACKTRACE_INCLUDE_DIR - NAMES backtrace.h - PATHS - /usr/local/include - /usr/include + find_path( + BACKTRACE_INCLUDE_DIR + NAMES backtrace.h + PATHS /usr/local/include /usr/include) + + if(BACKTRACE_INCLUDE_DIR) + message(STATUS "Found backtrace.h at ${BACKTRACE_INCLUDE_DIR}") + set(BACKTRACE_FOUND TRUE) + # Most systems just need -lbacktrace + set(BACKTRACE_LIBRARIES backtrace) + add_definitions( + -DBOOST_STACKTRACE_BACKTRACE_INCLUDE_FILE="${BACKTRACE_INCLUDE_DIR}/backtrace.h" ) - - if(BACKTRACE_INCLUDE_DIR) - set(BACKTRACE_FOUND TRUE) - # Most systems just need -lbacktrace - set(BACKTRACE_LIBRARIES backtrace) - message(STATUS "Found backtrace.h at ${BACKTRACE_INCLUDE_DIR}") - endif() + endif() endif() # Then set up boost modules @@ -505,19 +506,21 @@ include_directories(${BOOST_LIBRARY_INCLUDES}) # Configure stacktrace with appropriate backend if(WIN32) - message(STATUS "Windows platform - Using WinDbg stacktrace") - add_definitions(-DBOOST_STACKTRACE_USE_WINDBG) - add_library(Boost::stacktrace ALIAS boost_stacktrace_windbg) - target_link_libraries(boost_stacktrace_windbg PRIVATE dbghelp) -elseif(BACKTRACE_FOUND) - message(STATUS "Found libbacktrace - enabling Boost stacktrace backtrace support") - add_definitions(-DBOOST_STACKTRACE_USE_BACKTRACE) - add_library(Boost::stacktrace ALIAS boost_stacktrace_backtrace) - target_link_libraries(boost_stacktrace_backtrace PRIVATE ${BACKTRACE_LIBRARIES}) + message(STATUS "Windows platform - Using WinDbg stacktrace") + add_definitions(-DBOOST_STACKTRACE_USE_WINDBG) + add_library(Boost::stacktrace ALIAS boost_stacktrace_windbg) + target_link_libraries(boost_stacktrace_windbg PRIVATE dbghelp) +elseif(BOOST_STACKTRACE_HAS_BACKTRACE) + message( + STATUS "Found libbacktrace - enabling Boost stacktrace backtrace support") + add_definitions(-DBOOST_STACKTRACE_USE_BACKTRACE) + add_library(Boost::stacktrace ALIAS boost_stacktrace_backtrace) + target_link_libraries(boost_stacktrace_backtrace + PRIVATE ${BACKTRACE_LIBRARIES}) else() - message(STATUS "Unix platform without libbacktrace - Using basic backtrace") - add_definitions(-DBOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED) - add_library(Boost::stacktrace ALIAS boost_stacktrace_basic) + message(STATUS "Using basic stacktrace backend") + add_definitions(-DBOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED) + add_library(Boost::stacktrace ALIAS boost_stacktrace_basic) endif() # Workaround for missing reference errata in the boost property_tree module diff --git a/ci/prepare/linux/prepare-clang.sh b/ci/prepare/linux/prepare-clang.sh index 5820a51f79..4220a325e2 100755 --- a/ci/prepare/linux/prepare-clang.sh +++ b/ci/prepare/linux/prepare-clang.sh @@ -12,3 +12,7 @@ curl -O https://apt.llvm.org/llvm.sh && chmod +x llvm.sh && ./llvm.sh $CLANG_VER update-alternatives --install /usr/bin/cc cc /usr/bin/clang-$CLANG_VERSION 100 update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++-$CLANG_VERSION 100 update-alternatives --install /usr/bin/lldb lldb /usr/bin/lldb-$CLANG_VERSION 100 + +# Workaround to get a path that can be easily passed into cmake for BOOST_STACKTRACE_BACKTRACE_INCLUDE_FILE +# See https://www.boost.org/doc/libs/1_70_0/doc/html/stacktrace/configuration_and_build.html#stacktrace.configuration_and_build.f3 +backtrace_file=$(find /usr/lib/gcc/ -name 'backtrace.h' | head -n 1) && test -f $backtrace_file && ln -s $backtrace_file /usr/local/include/backtrace.h \ No newline at end of file diff --git a/nano/core_test/stacktrace.cpp b/nano/core_test/stacktrace.cpp index f3ea21ece5..7e96ad0e4b 100644 --- a/nano/core_test/stacktrace.cpp +++ b/nano/core_test/stacktrace.cpp @@ -8,6 +8,7 @@ TEST (stacktrace, human_readable) { auto stacktrace = nano::generate_stacktrace (); + std::cout << stacktrace << std::endl; ASSERT_FALSE (stacktrace.empty ()); ASSERT_TRUE (stacktrace.find ("stacktrace_human_readable_Test") != std::string::npos); } \ No newline at end of file