aboutsummaryrefslogtreecommitdiff
path: root/configure.ac
diff options
context:
space:
mode:
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac62
1 files changed, 62 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
index 9174a64..3d93d12 100644
--- a/configure.ac
+++ b/configure.ac
@@ -74,6 +74,68 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
74) 74)
75AC_MSG_RESULT([CLANG]) 75AC_MSG_RESULT([CLANG])
76 76
77# We want to check for compiler flag support, but there is no way to make
78# clang's "argument unused" warning fatal. So we invoke the compiler through a
79# wrapper script that greps for this message.
80saved_CC="$CC"
81saved_LD="$LD"
82flag_wrap="$srcdir/scripts/wrap-compiler-for-flag-check"
83CC="$flag_wrap $CC"
84LD="$flag_wrap $LD"
85
86AC_DEFUN([check_cflag],
87 [AX_CHECK_COMPILE_FLAG([$1], [$2], [$3], [-Werror $4])])
88AC_DEFUN([check_ldflag],
89 [AX_CHECK_LINK_FLAG([$1], [$2], [$3], [-Werror $4])])
90
91
92AC_ARG_ENABLE([hardening],
93 [AS_HELP_STRING([--disable-hardening], [Disable options to frustrate memory corruption exploits])],
94 [],
95 [enable_hardening=yes])
96
97HARDEN_CFLAGS=""
98HARDEN_LDFLAGS=""
99AS_IF([test "x$enable_hardening" == "xyes"], [
100 # Tell GCC to NOT optimize based on signed arithmetic overflow
101 check_cflag([-fno-strict-overflow], [HARDEN_CFLAGS="$HARDEN_CFLAGS -fno-strict-overflow"])
102
103 # _FORTIFY_SOURCE replaces builtin functions with safer versions.
104 check_cflag([-D_FORTIFY_SOURCE=2],
105 [HARDEN_CFLAGS="$HARDEN_CFLAGS -D_FORTIFY_SOURCE=2"])
106
107 # Use stack-protector-strong if available; if not, fallback to stack-protector-all which
108 # is considered to be overkill
109 check_cflag([-fstack-protector-strong],
110 [STACK_PROTECT="-fstack-protector-strong"],
111 check_cflag([-fstack-protector-all],
112 [STACK_PROTECT="-fstack-protector-all"],
113 [AC_MSG_ERROR([compiler does not support stack protection - use --disable-hardening to override if you understand the risks])]
114 )
115 )
116
117 check_ldflag([$STACK_PROTECT],
118 [HARDEN_CFLAGS="$HARDEN_CFLAGS $STACK_PROTECT"
119 check_cflag([-Wstack-protector], [HARDEN_CFLAGS="$HARDEN_CFLAGS -Wstack-protector"],
120 [], [$STACK_PROTECT])
121 ],
122 [AC_MSG_ERROR([compiler supports stack protection but linker does not])]
123 )
124
125 # Enable read only relocations
126 check_ldflag([-Wl,-z,relro],
127 [HARDEN_LDFLAGS="$HARDEN_LDFLAGS -Wl,-z,relro"
128 check_ldflag([-Wl,-z,now], [HARDEN_LDFLAGS="$HARDEN_LDFLAGS -Wl,-z,now"])])
129])
130
131# Restore CC, LD
132CC="$saved_CC"
133LD="$saved_LD"
134
135CFLAGS="$CFLAGS $HARDEN_CFLAGS"
136LDFLAGS="$LDFLAGS $HARDEN_LDFLAGS"
137
138# Removing the dependency on -Wno-pointer-sign should be a goal
77save_cflags="$CFLAGS" 139save_cflags="$CFLAGS"
78CFLAGS=-Wno-pointer-sign 140CFLAGS=-Wno-pointer-sign
79AC_MSG_CHECKING([whether CC supports -Wno-pointer-sign]) 141AC_MSG_CHECKING([whether CC supports -Wno-pointer-sign])