@@ -128,7 +128,6 @@ if(WITH_BDB)
128128endif ()
129129cmake_dependent_option(BUILD_WALLET_TOOL "Build bitcoin-wallet tool." ${BUILD_TESTS} "ENABLE_WALLET" OFF )
130130
131- option (ENABLE_HARDENING "Attempt to harden the resulting executables." ON )
132131option (REDUCE_EXPORTS "Attempt to reduce exported symbols in the resulting executables." OFF )
133132option (WERROR "Treat compiler warnings as errors." OFF )
134133option (WITH_CCACHE "Attempt to use ccache for compiling." ON )
@@ -481,75 +480,73 @@ try_append_cxx_flags("-fmacro-prefix-map=A=B" TARGET core_interface SKIP_LINK
481480# -fstack-reuse=none for all gcc builds. (Only gcc understands this flag).
482481try_append_cxx_flags("-fstack-reuse=none" TARGET core_interface)
483482
484- if (ENABLE_HARDENING)
485- add_library (hardening_interface INTERFACE )
486- target_link_libraries (core_interface INTERFACE hardening_interface)
487- if (MSVC )
488- try_append_linker_flag("/DYNAMICBASE" TARGET hardening_interface)
489- try_append_linker_flag("/HIGHENTROPYVA" TARGET hardening_interface)
490- try_append_linker_flag("/NXCOMPAT" TARGET hardening_interface)
491- else ()
483+ add_library (hardening_interface INTERFACE )
484+ target_link_libraries (core_interface INTERFACE hardening_interface)
485+ if (MSVC )
486+ try_append_linker_flag("/DYNAMICBASE" TARGET hardening_interface)
487+ try_append_linker_flag("/HIGHENTROPYVA" TARGET hardening_interface)
488+ try_append_linker_flag("/NXCOMPAT" TARGET hardening_interface)
489+ else ()
492490
493- # _FORTIFY_SOURCE requires that there is some level of optimization,
494- # otherwise it does nothing and just creates a compiler warning.
495- try_append_cxx_flags("-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3"
496- RESULT_VAR cxx_supports_fortify_source
497- SOURCE "int main() {
498- # if !defined __OPTIMIZE__ || __OPTIMIZE__ <= 0
499- #error
500- #endif
501- }"
491+ # _FORTIFY_SOURCE requires that there is some level of optimization,
492+ # otherwise it does nothing and just creates a compiler warning.
493+ try_append_cxx_flags("-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3"
494+ RESULT_VAR cxx_supports_fortify_source
495+ SOURCE "int main() {
496+ # if !defined __OPTIMIZE__ || __OPTIMIZE__ <= 0
497+ #error
498+ #endif
499+ }"
500+ )
501+ if (cxx_supports_fortify_source)
502+ target_compile_options (hardening_interface INTERFACE
503+ -U_FORTIFY_SOURCE
504+ -D_FORTIFY_SOURCE=3
502505 )
503- if (cxx_supports_fortify_source)
504- target_compile_options (hardening_interface INTERFACE
505- -U_FORTIFY_SOURCE
506- -D_FORTIFY_SOURCE=3
507- )
508- endif ()
509- unset (cxx_supports_fortify_source)
510-
511- try_append_cxx_flags("-Wstack-protector" TARGET hardening_interface SKIP_LINK)
512- try_append_cxx_flags("-fstack-protector-all" TARGET hardening_interface)
513- try_append_cxx_flags("-fcf-protection=full" TARGET hardening_interface)
506+ endif ()
507+ unset (cxx_supports_fortify_source)
514508
515- if (MINGW)
516- # stack-clash-protection is a no-op for Windows.
517- # See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90458 for more details.
518- else ()
519- try_append_cxx_flags("-fstack-clash-protection" TARGET hardening_interface)
520- endif ()
509+ try_append_cxx_flags("-Wstack-protector" TARGET hardening_interface SKIP_LINK)
510+ try_append_cxx_flags("-fstack-protector-all" TARGET hardening_interface)
511+ try_append_cxx_flags("-fcf-protection=full" TARGET hardening_interface)
521512
522- if (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" )
523- if (CMAKE_SYSTEM_NAME STREQUAL "Darwin" )
524- try_append_cxx_flags("-mbranch-protection=bti" TARGET hardening_interface SKIP_LINK)
525- else ()
526- try_append_cxx_flags("-mbranch-protection=standard" TARGET hardening_interface SKIP_LINK)
527- endif ()
528- endif ()
513+ if (MINGW)
514+ # stack-clash-protection is a no-op for Windows.
515+ # See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90458 for more details.
516+ else ()
517+ try_append_cxx_flags("-fstack-clash-protection" TARGET hardening_interface)
518+ endif ()
529519
530- try_append_linker_flag("-Wl,--enable-reloc-section" TARGET hardening_interface)
531- try_append_linker_flag("-Wl,--dynamicbase" TARGET hardening_interface)
532- try_append_linker_flag("-Wl,--nxcompat" TARGET hardening_interface)
533- try_append_linker_flag("-Wl,--high-entropy-va" TARGET hardening_interface)
534- try_append_linker_flag("-Wl,-z,relro" TARGET hardening_interface)
535- try_append_linker_flag("-Wl,-z,now" TARGET hardening_interface)
536- # TODO: This can be dropped once Bitcoin Core no longer supports
537- # NetBSD 10.0 or if upstream fix is backported.
538- # NetBSD's dynamic linker ld.elf_so < 11.0 supports exactly 2
539- # `PT_LOAD` segments and binaries linked with `-z separate-code`
540- # have 4 `PT_LOAD` segments.
541- # Relevant discussions:
542- # - https://github.com/bitcoin/bitcoin/pull/28724#issuecomment-2589347934
543- # - https://mail-index.netbsd.org/tech-userlevel/2023/01/05/msg013666.html
544- if (CMAKE_SYSTEM_NAME STREQUAL "NetBSD" AND CMAKE_SYSTEM_VERSION VERSION_LESS 11.0)
545- try_append_linker_flag("-Wl,-z,noseparate-code" TARGET hardening_interface)
546- else ()
547- try_append_linker_flag("-Wl,-z,separate-code" TARGET hardening_interface)
548- endif ()
520+ if (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" )
549521 if (CMAKE_SYSTEM_NAME STREQUAL "Darwin" )
550- try_append_linker_flag("-Wl,-fixup_chains" TARGET hardening_interface)
522+ try_append_cxx_flags("-mbranch-protection=bti" TARGET hardening_interface SKIP_LINK)
523+ else ()
524+ try_append_cxx_flags("-mbranch-protection=standard" TARGET hardening_interface SKIP_LINK)
551525 endif ()
552526 endif ()
527+
528+ try_append_linker_flag("-Wl,--enable-reloc-section" TARGET hardening_interface)
529+ try_append_linker_flag("-Wl,--dynamicbase" TARGET hardening_interface)
530+ try_append_linker_flag("-Wl,--nxcompat" TARGET hardening_interface)
531+ try_append_linker_flag("-Wl,--high-entropy-va" TARGET hardening_interface)
532+ try_append_linker_flag("-Wl,-z,relro" TARGET hardening_interface)
533+ try_append_linker_flag("-Wl,-z,now" TARGET hardening_interface)
534+ # TODO: This can be dropped once Bitcoin Core no longer supports
535+ # NetBSD 10.0 or if upstream fix is backported.
536+ # NetBSD's dynamic linker ld.elf_so < 11.0 supports exactly 2
537+ # `PT_LOAD` segments and binaries linked with `-z separate-code`
538+ # have 4 `PT_LOAD` segments.
539+ # Relevant discussions:
540+ # - https://github.com/bitcoin/bitcoin/pull/28724#issuecomment-2589347934
541+ # - https://mail-index.netbsd.org/tech-userlevel/2023/01/05/msg013666.html
542+ if (CMAKE_SYSTEM_NAME STREQUAL "NetBSD" AND CMAKE_SYSTEM_VERSION VERSION_LESS 11.0)
543+ try_append_linker_flag("-Wl,-z,noseparate-code" TARGET hardening_interface)
544+ else ()
545+ try_append_linker_flag("-Wl,-z,separate-code" TARGET hardening_interface)
546+ endif ()
547+ if (CMAKE_SYSTEM_NAME STREQUAL "Darwin" )
548+ try_append_linker_flag("-Wl,-fixup_chains" TARGET hardening_interface)
549+ endif ()
553550endif ()
554551
555552if (REDUCE_EXPORTS)
@@ -684,7 +681,6 @@ message("Cross compiling ....................... ${cross_status}")
684681message ("C++ compiler .......................... ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION} , ${CMAKE_CXX_COMPILER} " )
685682include (FlagsSummary)
686683flags_summary()
687- message ("Attempt to harden executables ......... ${ENABLE_HARDENING} " )
688684message ("Treat compiler warnings as errors ..... ${WERROR} " )
689685message ("Use ccache for compiling .............. ${WITH_CCACHE} " )
690686message ("\n " )
0 commit comments