summaryrefslogtreecommitdiff
path: root/cmake/Hardening.cmake
diff options
context:
space:
mode:
authorinfo@mode42.com <info@mode42.com>2026-08-08 03:54:55 +0000
committerinfo@mode42.com <info@mode42.com>2026-08-08 03:54:55 +0000
commit20cb29c2f8c5c87bc590896854a20b1473ceb358 (patch)
tree2857f41513a56ad41af97b57362639298aa7f033 /cmake/Hardening.cmake
#2
Diffstat (limited to 'cmake/Hardening.cmake')
-rw-r--r--cmake/Hardening.cmake44
1 files changed, 44 insertions, 0 deletions
diff --git a/cmake/Hardening.cmake b/cmake/Hardening.cmake
new file mode 100644
index 0000000..6bbc43f
--- /dev/null
+++ b/cmake/Hardening.cmake
@@ -0,0 +1,44 @@
+# HyBBX compiler and linker hardening (HYBBX_HARDENING=ON)
+
+function(hybbx_apply_hardening target)
+ if(NOT HYBBX_HARDENING)
+ return()
+ endif()
+
+ if(HYBBX_SUPPORTED_C_FLAGS)
+ target_compile_options(${target} PRIVATE ${HYBBX_SUPPORTED_C_FLAGS})
+ endif()
+
+ if(HYBBX_WARNINGS_AS_ERRORS)
+ target_compile_options(${target} PRIVATE -Werror)
+ endif()
+
+ if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
+ if(NOT HYBBX_PLATFORM_AMIGAOS)
+ target_compile_definitions(${target} PRIVATE _FORTIFY_SOURCE=2)
+ endif()
+ endif()
+
+ if(NOT HYBBX_PLATFORM_AMIGAOS AND CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ target_compile_options(${target} PRIVATE -fPIC)
+ if(HYBBX_COMPILER_GCC OR HYBBX_COMPILER_CLANG)
+ target_link_options(${target} PRIVATE
+ -Wl,-z,relro
+ -Wl,-z,now
+ )
+ endif()
+ endif()
+endfunction()
+
+function(hybbx_apply_hardening_executable target)
+ hybbx_apply_hardening(${target})
+
+ if(NOT HYBBX_HARDENING OR HYBBX_PLATFORM_AMIGAOS)
+ return()
+ endif()
+
+ if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND (HYBBX_COMPILER_GCC OR HYBBX_COMPILER_CLANG))
+ target_compile_options(${target} PRIVATE -fPIE)
+ target_link_options(${target} PRIVATE -pie)
+ endif()
+endfunction()
git clone -b <branch> https://cgit.mode42.com/<repo>.git
git clone -b <branch> git://cgit.mode42.com/<repo>.git

info@mode42.com