summaryrefslogtreecommitdiff
path: root/configure.ac
diff options
context:
space:
mode:
authorCaolán McNamara <caolan.mcnamara@collabora.com>2024-02-13 15:17:48 +0000
committerCaolán McNamara <caolan.mcnamara@collabora.com>2024-04-18 14:34:09 +0200
commit33483058f6e27f39633114721f7329c90571101d (patch)
tree81134a47a5af143aee7057470e049fc558e2afad /configure.ac
parent464c11aa8c56db3e7b96a07d5cbdeb7b202f697e (diff)
add --enable-hardening-flags to enable compiler hardening flags
distros typically have their own set via C[XX]FLAGS, so make this an optional argument Change-Id: Ib05387bad8324b188bd4ed0ee327d6a7cf83973b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163312 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Andras Timar <andras.timar@collabora.com>
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac62
1 files changed, 61 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac
index 24daca98d8a2..507f473c34a3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1910,6 +1910,13 @@ libo_FUZZ_ARG_ENABLE(release-build,
See https://wiki.documentfoundation.org/Development/DevBuild]),
,)
+libo_FUZZ_ARG_ENABLE(hardening-flags,
+ AS_HELP_STRING([--enable-hardening-flags],
+ [Enable automatically using hardening compiler flags. Distros should typically
+ use their default configuration via CXXFLAGS, etc. But this provides a
+ convenient default set of hardening flags]),
+,)
+
AC_ARG_ENABLE(windows-build-signing,
AS_HELP_STRING([--enable-windows-build-signing],
[Enable signing of windows binaries (*.exe, *.dll)]),
@@ -2931,6 +2938,19 @@ fi
AC_SUBST(ENABLE_RELEASE_BUILD)
AC_SUBST(GET_TASK_ALLOW_ENTITLEMENT)
+dnl ===================================================================
+dnl Test whether build should auto use hardening compiler flags
+dnl ===================================================================
+AC_MSG_CHECKING([whether build should auto use hardening compiler flags])
+if test "$enable_hardening_flags" = "" -o "$enable_hardening_flags" = "no"; then
+ AC_MSG_RESULT([no])
+ ENABLE_HARDENING_FLAGS=
+else
+ AC_MSG_RESULT([yes])
+ ENABLE_HARDENING_FLAGS=TRUE
+fi
+AC_SUBST(ENABLE_HARDENING_FLAGS)
+
AC_MSG_CHECKING([whether to build a Community flavor])
if test -z "$enable_community_flavor" -o "$enable_community_flavor" = "yes"; then
AC_DEFINE(HAVE_FEATURE_COMMUNITY_FLAVOR)
@@ -7356,13 +7376,51 @@ dnl ===================================================================
dnl GCC features
dnl ===================================================================
HAVE_GCC_STACK_CLASH_PROTECTION=
+HARDENING_CFLAGS=
+HARDENING_OPT_CFLAGS=
if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
+ AC_MSG_CHECKING([whether $CC_BASE supports -grecord-gcc-switches])
+ save_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS -Werror -grecord-gcc-switches"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(, [[return 0;]])],
+ [AC_MSG_RESULT([yes]); HARDENING_CFLAGS="$HARDENING_CFLAGS -grecord-gcc-switches"],
+ [AC_MSG_RESULT([no])])
+ CFLAGS=$save_CFLAGS
+
+ AC_MSG_CHECKING([whether $CC_BASE supports -D_FORTIFY_SOURCE=2])
+ save_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS -Werror -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=2"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(, [[return 0;]])],
+ [AC_MSG_RESULT([yes]); HARDENING_OPT_CFLAGS="$HARDENING_OPT_CFLAGS -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=2"],
+ [AC_MSG_RESULT([no])])
+ CFLAGS=$save_CFLAGS
+
+ AC_MSG_CHECKING([whether $CC_BASE supports -D_GLIBCXX_ASSERTIONS])
+ save_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS -Werror -Wp,-D_GLIBCXX_ASSERTIONS"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(, [[return 0;]])],
+ [AC_MSG_RESULT([yes]); HARDENING_CFLAGS="$HARDENING_CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS"],
+ [AC_MSG_RESULT([no])])
+ CFLAGS=$save_CFLAGS
+
AC_MSG_CHECKING([whether $CC_BASE supports -fstack-clash-protection])
save_CFLAGS=$CFLAGS
CFLAGS="$CFLAGS -Werror -fstack-clash-protection"
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(, [[return 0;]])],
- [AC_MSG_RESULT([yes]); HAVE_GCC_STACK_CLASH_PROTECTION=TRUE],
+ [AC_MSG_RESULT([yes]); HAVE_GCC_STACK_CLASH_PROTECTION=TRUE; HARDENING_CFLAGS="$HARDENING_CFLAGS -fstack-clash-protection"],
+ [AC_MSG_RESULT([no])])
+ CFLAGS=$save_CFLAGS
+
+ AC_MSG_CHECKING([whether $CC_BASE supports -fcf-protection])
+ save_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS -Werror -fcf-protection"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(, [[return 0;]])],
+ [AC_MSG_RESULT([yes]); HARDENING_CFLAGS="$HARDENING_CFLAGS -fcf-protection"],
[AC_MSG_RESULT([no])])
CFLAGS=$save_CFLAGS
@@ -7516,6 +7574,8 @@ fi
AC_SUBST(HAVE_GCC_AVX)
AC_SUBST(HAVE_GCC_BUILTIN_ATOMIC)
AC_SUBST(HAVE_GCC_STACK_CLASH_PROTECTION)
+AC_SUBST(HARDENING_CFLAGS)
+AC_SUBST(HARDENING_OPT_CFLAGS)
dnl ===================================================================
dnl Identify the C++ library