aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt30
1 files changed, 30 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 830da817..34738e18 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -46,6 +46,15 @@ option(TEACHOS_ENABLE_TEST_TSAN "Enable TSan for the test executable" OFF)
set(ACPI_ENABLE_TEST_COVERAGE ${TEACHOS_ENABLE_TEST_COVERAGE})
set(KSTD_ENABLE_TEST_COVERAGE ${TEACHOS_ENABLE_TEST_COVERAGE})
+set(CACHE{TEACHOS_STACK_FRAME_LIMIT}
+ TYPE STRING
+ HELP "The maximum allowed stack frame size in bytes."
+ VALUE "0"
+)
+
+set(CACHE{TEACHOS_STACK_FRAME_LIMIT_DEBUG} TYPE INTERNAL VALUE "3072")
+set(CACHE{TEACHOS_STACK_FRAME_LIMIT_RELEASE} TYPE INTERNAL VALUE "1280")
+
#[============================================================================[
# Global Build System Configuration
#]============================================================================]
@@ -69,6 +78,27 @@ add_compile_options(
"$<$<CXX_COMPILER_ID:GNU>:-pedantic-errors>"
)
+if(NOT BUILD_TESTING)
+ if(TEACHOS_STACK_FRAME_LIMIT)
+ set(STACK_FRAME_LIMIT "${TEACHOS_STACK_FRAME_LIMIT}")
+ else()
+ set(STACK_FRAME_LIMIT "$<IF:$<CONFIG:Debug>,${TEACHOS_STACK_FRAME_LIMIT_DEBUG},${TEACHOS_STACK_FRAME_LIMIT_RELEASE}>")
+ endif()
+
+ add_compile_options(
+ "$<$<CXX_COMPILER_ID:GNU>:-fstack-usage>"
+ "$<$<CXX_COMPILER_ID:GNU>:-Wframe-larger-than=${STACK_FRAME_LIMIT}>"
+ )
+
+ add_link_options(
+ "$<$<CXX_COMPILER_ID:GNU>:-fstack-usage>"
+ "$<$<CXX_COMPILER_ID:GNU>:-Wframe-larger-than=${STACK_FRAME_LIMIT}>"
+ "$<$<CXX_COMPILER_ID:GNU>:-Werror=frame-larger-than=${STACK_FRAME_LIMIT}>"
+ )
+
+ unset(STACK_FRAME_LIMIT)
+endif()
+
#[============================================================================[
# Global Linting Configuration
#]============================================================================]