@@ -51,7 +51,22 @@ function(sourcemeta_add_default_options visibility target)
51
51
# multiplication wraps around using twos-complement representation
52
52
# See https://users.cs.utah.edu/~regehr/papers/overflow12.pdf
53
53
# See https://www.postgresql.org/message-id/1689.1134422394@sss.pgh.pa.us
54
- -fwrapv )
54
+ -fwrapv
55
+
56
+ # See https://best.openssf.org/Compiler-Hardening-Guides/Compiler-Options-Hardening-Guide-for-C-and-C++.html
57
+ -Wformat
58
+ -Wformat=2
59
+ -Werror=format-security
60
+ -fstack-protector-strong )
61
+
62
+ if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" )
63
+ target_compile_options ("${target} " ${visibility} -fcf-protection=full )
64
+ elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" )
65
+ target_compile_options ("${target} " ${visibility} -mbranch-protection=standard )
66
+ endif ()
67
+
68
+ target_compile_definitions ("${target} " ${visibility} _FORTIFY_SOURCE=3 )
69
+ target_compile_definitions ("${target} " ${visibility} $< $< CONFIG:Debug> :_GLIBCXX_ASSERTIONS> )
55
70
endif ()
56
71
57
72
if (SOURCEMETA_COMPILER_LLVM )
@@ -80,6 +95,11 @@ function(sourcemeta_add_default_options visibility target)
80
95
-fvectorize
81
96
# Enable vectorization of straight-line code for performance
82
97
-fslp-vectorize )
98
+
99
+ # See https://best.openssf.org/Compiler-Hardening-Guides/Compiler-Options-Hardening-Guide-for-C-and-C++.html
100
+ target_compile_options ("${target} " ${visibility}
101
+ $< $< CONFIG:Release> :-fno-delete-null-pointer-checks -fno-strict-aliasing -ftrivial-auto-var-init=zero>
102
+ $< $< CONFIG:RelWithDebInfo> :-fno-delete-null-pointer-checks -fno-strict-aliasing -ftrivial-auto-var-init=zero> )
83
103
elseif (SOURCEMETA_COMPILER_GCC )
84
104
target_compile_options ("${target} " ${visibility}
85
105
-fno-trapping-math
@@ -88,7 +108,18 @@ function(sourcemeta_add_default_options visibility target)
88
108
# GCC seems to print a lot of false-positives here
89
109
-Wno-free-nonheap-object
90
110
# Disables runtime type information
91
- -fno-rtti )
111
+ -fno-rtti
112
+
113
+ # See https://best.openssf.org/Compiler-Hardening-Guides/Compiler-Options-Hardening-Guide-for-C-and-C++.html
114
+ -Wtrampolines
115
+ -Wbidi-chars=any
116
+ -fstack-clash-protection
117
+ -fstrict-flex-arrays=3 )
118
+
119
+ # See https://best.openssf.org/Compiler-Hardening-Guides/Compiler-Options-Hardening-Guide-for-C-and-C++.html
120
+ target_compile_options ("${target} " ${visibility}
121
+ $< $< CONFIG:Release> :-fno-delete-null-pointer-checks -fno-strict-overflow -fno-strict-aliasing -ftrivial-auto-var-init=zero>
122
+ $< $< CONFIG:RelWithDebInfo> :-fno-delete-null-pointer-checks -fno-strict-overflow -fno-strict-aliasing -ftrivial-auto-var-init=zero> )
92
123
endif ()
93
124
endfunction ()
94
125
0 commit comments