This commit is contained in:
Jeremy 2024-05-05 15:22:34 -05:00
parent 93b1d1c76a
commit 9275f62fc5
No known key found for this signature in database
GPG Key ID: 19AA8270105E8EB4
4 changed files with 30 additions and 21 deletions

View File

@ -177,6 +177,7 @@ def build(matrix):
f"-D{matrix['demangle']}=On",
"-DCPPTRACE_BACKTRACE_PATH=/usr/lib/gcc/x86_64-linux-gnu/10/include/backtrace.h",
"-DCPPTRACE_BUILD_TESTING=On",
"-DCPPTRACE_IS_GH_ACTIONS=On",
f"-DBUILD_SHARED_LIBS={matrix['shared']}"
]
if matrix['symbols'] == "CPPTRACE_GET_SYMBOLS_WITH_LIBDL":
@ -199,6 +200,7 @@ def build(matrix):
f"-D{matrix['symbols']}=On",
f"-D{matrix['demangle']}=On",
"-DCPPTRACE_BUILD_TESTING=On",
"-DCPPTRACE_IS_GH_ACTIONS=On",
f"-DBUILD_SHARED_LIBS={matrix['shared']}"
]
if matrix["compiler"] == "g++":
@ -225,6 +227,7 @@ def build_full_or_auto(matrix):
f"-DCPPTRACE_WERROR_BUILD=On",
f"-DCPPTRACE_BACKTRACE_PATH=/usr/lib/gcc/x86_64-linux-gnu/10/include/backtrace.h",
"-DCPPTRACE_BUILD_TESTING=On",
"-DCPPTRACE_IS_GH_ACTIONS=On",
f"-DBUILD_SHARED_LIBS={matrix['shared']}"
]
if matrix["config"] != "":
@ -244,6 +247,7 @@ def build_full_or_auto(matrix):
f"-DCPPTRACE_USE_EXTERNAL_ZSTD=On",
f"-DCPPTRACE_WERROR_BUILD=On",
"-DCPPTRACE_BUILD_TESTING=On",
"-DCPPTRACE_IS_GH_ACTIONS=On",
f"-DBUILD_SHARED_LIBS={matrix['shared']}"
]
if matrix["config"] != "":

View File

@ -167,6 +167,7 @@ option(CPPTRACE_CONDA_LIBDWARF_WEIRDNESS "" OFF)
option(CPPTRACE_SANITIZER_BUILD "" OFF)
option(CPPTRACE_WERROR_BUILD "" OFF)
option(CPPTRACE_POSITION_INDEPENDENT_CODE "" ON)
option(CPPTRACE_IS_GH_ACTIONS "" OFF)
mark_as_advanced(
CPPTRACE_BACKTRACE_PATH
@ -177,4 +178,5 @@ mark_as_advanced(
CPPTRACE_CONAN
CPPTRACE_VCPKG
CPPTRACE_CONDA_LIBDWARF_WEIRDNESS
CPPTRACE_IS_GH_ACTIONS
)

View File

@ -35,17 +35,20 @@ if(UNIX)
target_link_libraries(signal_tracer PRIVATE ${target_name})
endif()
include(FetchContent)
FetchContent_Declare(
googletest
GIT_REPOSITORY "https://github.com/google/googletest.git"
GIT_TAG f8d7d77c06936315286eb55f8de22cd23c188571 # v1.14.0
)
# For Windows: Prevent overriding the parent project's compiler/linker settings
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)
# primarily a workaround for github actions issue https://github.com/actions/runner-images/issues/8659
if(NOT CPPTRACE_IS_GH_ACTIONS)
include(FetchContent)
FetchContent_Declare(
googletest
GIT_REPOSITORY "https://github.com/google/googletest.git"
GIT_TAG f8d7d77c06936315286eb55f8de22cd23c188571 # v1.14.0
)
# For Windows: Prevent overriding the parent project's compiler/linker settings
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)
add_executable(unittest unittest.cpp)
target_compile_features(unittest PRIVATE cxx_std_20)
target_link_libraries(unittest PRIVATE ${target_name} GTest::gtest_main GTest::gmock_main)
add_test(NAME unittest COMMAND unittest)
add_executable(unittest unittest.cpp)
target_compile_features(unittest PRIVATE cxx_std_20)
target_link_libraries(unittest PRIVATE ${target_name} GTest::gtest_main GTest::gmock_main)
add_test(NAME unittest COMMAND unittest)
endif()

View File

@ -16,7 +16,7 @@ using namespace std::literals;
// This is fickle, however, it's the only way to do it really. It's a reliable test in practice.
[[gnu::noinline]] void raw_trace_basic() {
CPPTRACE_FORCE_NO_INLINE void raw_trace_basic() {
auto raw_trace = cpptrace::generate_raw_trace();
// look for within 90 bytes of the start of the function
EXPECT_GE(raw_trace.frames[0], reinterpret_cast<uintptr_t>(raw_trace_basic));
@ -24,7 +24,7 @@ using namespace std::literals;
}
#ifndef _MSC_VER
[[gnu::noinline]] void raw_trace_basic_precise() {
CPPTRACE_FORCE_NO_INLINE void raw_trace_basic_precise() {
a:
auto raw_trace = cpptrace::generate_raw_trace();
b:
@ -39,7 +39,7 @@ TEST(RawTrace, Basic) {
raw_trace_basic_precise();
}
[[gnu::noinline]] void raw_trace_multi_1(std::pair<cpptrace::frame_ptr, cpptrace::frame_ptr> parent) {
CPPTRACE_FORCE_NO_INLINE void raw_trace_multi_1(std::pair<cpptrace::frame_ptr, cpptrace::frame_ptr> parent) {
auto raw_trace = cpptrace::generate_raw_trace();
EXPECT_GE(raw_trace.frames[0], reinterpret_cast<uintptr_t>(raw_trace_multi_1));
EXPECT_LE(raw_trace.frames[0], reinterpret_cast<uintptr_t>(raw_trace_multi_1) + 90);
@ -47,7 +47,7 @@ TEST(RawTrace, Basic) {
EXPECT_LE(raw_trace.frames[1], parent.second);
}
[[gnu::noinline]] void raw_trace_multi_top() {
CPPTRACE_FORCE_NO_INLINE void raw_trace_multi_top() {
auto raw_trace = cpptrace::generate_raw_trace();
raw_trace_multi_1({reinterpret_cast<uintptr_t>(raw_trace_multi_top), reinterpret_cast<uintptr_t>(raw_trace_multi_top) + 300});
EXPECT_GE(raw_trace.frames[0], reinterpret_cast<uintptr_t>(raw_trace_multi_top));
@ -55,7 +55,7 @@ TEST(RawTrace, Basic) {
}
#ifndef _MSC_VER
[[gnu::noinline]] void raw_trace_multi_precise_2(std::vector<std::pair<cpptrace::frame_ptr, cpptrace::frame_ptr>>& parents) {
CPPTRACE_FORCE_NO_INLINE void raw_trace_multi_precise_2(std::vector<std::pair<cpptrace::frame_ptr, cpptrace::frame_ptr>>& parents) {
a:
auto raw_trace = cpptrace::generate_raw_trace();
b:
@ -67,7 +67,7 @@ TEST(RawTrace, Basic) {
}
}
[[gnu::noinline]] void raw_trace_multi_precise_1(std::vector<std::pair<cpptrace::frame_ptr, cpptrace::frame_ptr>>& parents) {
CPPTRACE_FORCE_NO_INLINE void raw_trace_multi_precise_1(std::vector<std::pair<cpptrace::frame_ptr, cpptrace::frame_ptr>>& parents) {
a:
auto raw_trace = cpptrace::generate_raw_trace();
b:
@ -83,7 +83,7 @@ TEST(RawTrace, Basic) {
d:;
}
[[gnu::noinline]] void raw_trace_multi_precise_top() {
CPPTRACE_FORCE_NO_INLINE void raw_trace_multi_precise_top() {
a:
auto raw_trace = cpptrace::generate_raw_trace();
b:
@ -102,7 +102,7 @@ TEST(RawTrace, MultipleCalls) {
raw_trace_multi_precise_top();
}
[[gnu::noinline]] void stacktrace_basic() {
CPPTRACE_FORCE_NO_INLINE void stacktrace_basic() {
auto line = __LINE__ + 1;
auto trace = cpptrace::generate_trace();
EXPECT_THAT(trace.frames[0].filename, testing::EndsWith("unittest.cpp"));