Updates to better support external libdwarf, because nothing about how libdwarf's cmake is setup is consistent
This commit is contained in:
parent
4361e7c3df
commit
ca76080968
@ -337,7 +337,6 @@ if(CPPTRACE_GET_SYMBOLS_WITH_LIBDWARF)
|
||||
target_compile_definitions(${target_name} PUBLIC CPPTRACE_GET_SYMBOLS_WITH_LIBDWARF)
|
||||
if(CPPTRACE_USE_EXTERNAL_LIBDWARF)
|
||||
find_package(libdwarf REQUIRED)
|
||||
target_compile_definitions(${target_name} PRIVATE CPPTRACE_USE_EXTERNAL_LIBDWARF)
|
||||
else()
|
||||
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
|
||||
set(PIC_ALWAYS TRUE)
|
||||
@ -356,14 +355,29 @@ if(CPPTRACE_GET_SYMBOLS_WITH_LIBDWARF)
|
||||
endif()
|
||||
if(CPPTRACE_CONAN)
|
||||
target_link_libraries(${target_name} PRIVATE libdwarf::libdwarf)
|
||||
target_compile_definitions(${target_name} PRIVATE CPPTRACE_USE_NESTED_LIBDWARF_HEADER_PATH)
|
||||
elseif(CPPTRACE_VCPKG)
|
||||
target_link_libraries(${target_name} PRIVATE $<IF:$<TARGET_EXISTS:libdwarf::dwarf-static>,libdwarf::dwarf-static,libdwarf::dwarf-shared>)
|
||||
target_compile_definitions(${target_name} PRIVATE CPPTRACE_USE_NESTED_LIBDWARF_HEADER_PATH)
|
||||
elseif(CPPTRACE_USE_EXTERNAL_LIBDWARF)
|
||||
if(DEFINED LIBDWARF_LIBRARIES)
|
||||
target_link_libraries(${target_name} PRIVATE ${LIBDWARF_LIBRARIES})
|
||||
else()
|
||||
# if LIBDWARF_LIBRARIES wasn't set by find_package, try looking for libdwarf::dwarf-static,
|
||||
# libdwarf::dwarf-shared, then libdwarf::dwarf
|
||||
# libdwarf v0.8.0 installs with the target libdwarf::dwarf somehow, despite creating libdwarf::dwarf-static or
|
||||
# libdwarf::dwarf-shared under fetchcontent
|
||||
target_link_libraries(${target_name} PRIVATE $<IF:$<TARGET_EXISTS:libdwarf::dwarf-static>,libdwarf::dwarf-static,$<IF:$<TARGET_EXISTS:libdwarf::dwarf-shared>,libdwarf::dwarf-shared,libdwarf::dwarf>>)
|
||||
endif()
|
||||
else()
|
||||
target_link_libraries(${target_name} PRIVATE libdwarf::dwarf-static)
|
||||
endif()
|
||||
if(UNIX)
|
||||
target_link_libraries(${target_name} PRIVATE ${CMAKE_DL_LIBS})
|
||||
endif()
|
||||
if(CPPTRACE_USE_NESTED_LIBDWARF_HEADER_PATH) # user override
|
||||
target_compile_definitions(${target_name} PRIVATE CPPTRACE_USE_NESTED_LIBDWARF_HEADER_PATH)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CPPTRACE_GET_SYMBOLS_WITH_DBGHELP)
|
||||
|
||||
@ -158,6 +158,7 @@ if(PROJECT_IS_TOP_LEVEL)
|
||||
endif()
|
||||
|
||||
option(CPPTRACE_USE_EXTERNAL_LIBDWARF "" OFF)
|
||||
option(CPPTRACE_USE_NESTED_LIBDWARF_HEADER_PATH "" OFF)
|
||||
option(CPPTRACE_CONAN "" OFF)
|
||||
option(CPPTRACE_VCPKG "" OFF)
|
||||
option(CPPTRACE_SANITIZER_BUILD "" OFF)
|
||||
@ -167,6 +168,7 @@ mark_as_advanced(
|
||||
CPPTRACE_ADDR2LINE_PATH
|
||||
CPPTRACE_ADDR2LINE_SEARCH_SYSTEM_PATH
|
||||
CPPTRACE_SANITIZER_BUILD
|
||||
CPPTRACE_USE_NESTED_LIBDWARF_HEADER_PATH
|
||||
CPPTRACE_CONAN
|
||||
CPPTRACE_VCPKG
|
||||
)
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
#ifdef CPPTRACE_USE_EXTERNAL_LIBDWARF
|
||||
#ifdef CPPTRACE_USE_NESTED_LIBDWARF_HEADER_PATH
|
||||
#include <libdwarf/libdwarf.h>
|
||||
#include <libdwarf/dwarf.h>
|
||||
#else
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
#include <stdexcept>
|
||||
#include <type_traits>
|
||||
|
||||
#ifdef CPPTRACE_USE_EXTERNAL_LIBDWARF
|
||||
#ifdef CPPTRACE_USE_NESTED_LIBDWARF_HEADER_PATH
|
||||
#include <libdwarf/libdwarf.h>
|
||||
#include <libdwarf/dwarf.h>
|
||||
#else
|
||||
|
||||
Loading…
Reference in New Issue
Block a user