build: enable libc++ hardening

When `ENABLE_HARDENING` is `ON` (which is the default) and compiling
with libc++ in debug mode, then enable full libc++ hardening.

Inspired by
https://github.com/bitcoin/bitcoin/issues/31272#issuecomment-2518700939
This commit is contained in:
Vasil Dimov 2025-03-14 13:39:56 +01:00
parent 698f86964c
commit a3a799c77c
No known key found for this signature in database
GPG Key ID: 54DF06F64B55CBBF
2 changed files with 8 additions and 0 deletions

View File

@ -537,6 +537,12 @@ if(ENABLE_HARDENING)
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
try_append_linker_flag("-Wl,-fixup_chains" TARGET hardening_interface)
endif()
if(HAVE_LIBCPP)
# https://libcxx.llvm.org/Hardening.html
target_compile_definitions(hardening_interface INTERFACE
$<IF:$<CONFIG:Debug>,_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG,>)
endif()
endif()
endif()

View File

@ -12,6 +12,8 @@ check_include_file_cxx(sys/resources.h HAVE_SYS_RESOURCES_H)
check_include_file_cxx(sys/vmmeter.h HAVE_SYS_VMMETER_H)
check_include_file_cxx(vm/vm_param.h HAVE_VM_VM_PARAM_H)
check_cxx_symbol_exists(_LIBCPP_VERSION "version" HAVE_LIBCPP)
check_cxx_symbol_exists(O_CLOEXEC "fcntl.h" HAVE_O_CLOEXEC)
check_cxx_symbol_exists(fdatasync "unistd.h" HAVE_FDATASYNC)
check_cxx_symbol_exists(fork "unistd.h" HAVE_DECL_FORK)