@@ -128,7 +128,6 @@ if(WITH_BDB)
128
128
endif ()
129
129
cmake_dependent_option (BUILD_WALLET_TOOL "Build bitcoin-wallet tool." ${BUILD_TESTS} "ENABLE_WALLET" OFF )
130
130
131
- option (ENABLE_HARDENING "Attempt to harden the resulting executables." ON )
132
131
option (REDUCE_EXPORTS "Attempt to reduce exported symbols in the resulting executables." OFF )
133
132
option (WERROR "Treat compiler warnings as errors." OFF )
134
133
option (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
481
480
# -fstack-reuse=none for all gcc builds. (Only gcc understands this flag).
482
481
try_append_cxx_flags ("-fstack-reuse=none" TARGET core_interface )
483
482
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 ()
492
490
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
502
505
)
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 )
514
508
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 )
521
512
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 ()
529
519
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" )
549
521
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 )
551
525
endif ()
552
526
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 ()
553
550
endif ()
554
551
555
552
if (REDUCE_EXPORTS )
@@ -684,7 +681,6 @@ message("Cross compiling ....................... ${cross_status}")
684
681
message ("C++ compiler .......................... ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION} , ${CMAKE_CXX_COMPILER} " )
685
682
include (FlagsSummary )
686
683
flags_summary ()
687
- message ("Attempt to harden executables ......... ${ENABLE_HARDENING} " )
688
684
message ("Treat compiler warnings as errors ..... ${WERROR} " )
689
685
message ("Use ccache for compiling .............. ${WITH_CCACHE} " )
690
686
message ("\n " )
0 commit comments