diff options
Diffstat (limited to 'CMakeLists.txt')
| -rw-r--r-- | CMakeLists.txt | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 830da817..8f622050 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 #]============================================================================] @@ -67,8 +76,30 @@ add_compile_options( "$<$<CXX_COMPILER_ID:GNU>:-Wextra>" "$<$<CXX_COMPILER_ID:GNU>:-Werror>" "$<$<CXX_COMPILER_ID:GNU>:-pedantic-errors>" + "$<$<CXX_COMPILER_ID:GNU>:-fstack-protector-strong>" ) +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 #]============================================================================] |
