From 0a11e1b7247ca18827718c98417dfe77c6db42d5 Mon Sep 17 00:00:00 2001 From: philipportner Date: Fri, 25 Oct 2024 23:48:47 +0200 Subject: [PATCH] [build] set -fno-omit-frame-pointer This patch sets the `-fno-omit-frame-pointer` for non release builds. This is useful for a few things: - makes stack traces more reliable and complete - enables better profiling with tools like perf - better visibility into call chains during performance analysis It has a small impact on performance as an extra register needs to be used, e.g., the `rbp` register on x86_64 to store the frame pointer. It also incurs a small of setup and teardown of stack frames. Because of these reasons, this is currently only set for non release builds. --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fb57026ab..e0f604d25 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,9 +34,9 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_OPTIMIZE_DEPENDENCIES 1) -set(CMAKE_CXX_FLAGS_DEBUG="${CMAKE_CXX_FLAGS_DEBUG} -g") +set(CMAKE_CXX_FLAGS_DEBUG="${CMAKE_CXX_FLAGS_DEBUG} -g -fno-omit-frame-pointer") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3") -set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -g -O3") +set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -g -O3 -fno-omit-frame-pointer") # silence a warning about DEPFILE path transformations (used in LLVM) cmake_policy(SET CMP0116 OLD)