]> git.proxmox.com Git - mirror_lxc.git/blobdiff - configure.ac
build-system: make it compatible with ASan/UBsan/MSan
[mirror_lxc.git] / configure.ac
index b329b4ea772a4a8eaefbfec4fc327e88fbba03e6..db12131a0cc207f25565ea6b93b03987e4c0e003 100644 (file)
@@ -200,6 +200,11 @@ AC_ARG_ENABLE([werror],
        [AS_HELP_STRING([--disable-werror], [do not treat warnings as errors])],
        [enable_werror=$enableval], [enable_werror=yes])
 
+AC_ARG_ENABLE([no_undefined],
+       [AS_HELP_STRING([--disable-no-undefined], [do not pass -Wl,--no-undefined])],
+       [enable_no_undefined=$enableval], [enable_no_undefined=yes])
+AM_CONDITIONAL([ENABLE_NO_UNDEFINED], [test "x$enable_no_undefined" = "xyes"])
+
 # Allow disabling rpath
 AC_ARG_ENABLE([rpath],
        [AS_HELP_STRING([--enable-rpath], [set rpath in executables [default=no]])],
@@ -452,17 +457,24 @@ AC_ARG_ENABLE([static-binaries],
        [enable_static_binaries=$enableval], [enable_static_binaries=no])
 AM_CONDITIONAL([ENABLE_STATIC_BINARIES], [test "x$enable_static_binaries" = "xyes"])
 
-# Build with ASAN commands
-AC_ARG_ENABLE([asan],
-       [AS_HELP_STRING([--enable-asan], [build with address sanitizer enabled [default=no]])],
-       [enable_asan=$enableval], [enable_asan=no])
-AM_CONDITIONAL([ENABLE_ASAN], [test "x$enable_asan" = "xyes"])
+AC_ARG_ENABLE([sanitizers],
+       [AS_HELP_STRING([--enable-sanitizers], [build with sanitizers enabled [default=no]])],
+       [enable_sanitizers=$enableval], [enable_sanitizers=no])
+AM_CONDITIONAL([ENABLE_SANITIZERS], [test "x$enable_sanitizers" = "xyes"])
+if test "x$enable_sanitizers" = "xyes"; then
+       AC_DEFINE([ENABLE_SANITIZERS], 1, [build with sanitizers enabled])
+
+       CC_CHECK_FLAGS_APPEND([AM_CFLAGS],[CFLAGS],[ \
+               -fsanitize=address \
+               -fsanitize=undefined \
+               -fsanitize=memory \
+               -fno-omit-frame-pointer])
+       AC_SUBST(AM_CFLAGS)
 
-# Build with UBSAN commands
-AC_ARG_ENABLE([ubsan],
-       [AS_HELP_STRING([--enable-ubsan], [build with ubsan sanitizer enabled [default=no]])],
-       [enable_asan=$enableval], [enable_ubsan=no])
-AM_CONDITIONAL([ENABLE_UBSAN], [test "x$enable_ubsan" = "xyes"])
+       AC_MSG_RESULT([yes])
+else
+       AC_MSG_RESULT([no])
+fi
 
 # Optional test binaries
 AC_ARG_ENABLE([tests],
@@ -794,12 +806,15 @@ AC_SUBST(AM_CFLAGS)
 
 CC_CHECK_FLAGS_APPEND([AM_LDFLAGS],[LDFLAGS],[ \
        -Wl,--as-needed \
-        -Wl,--no-undefined \
         -Wl,--gc-sections \
         -Wl,-z,relro \
         -Wl,-z,now \
         -pie \
         -Wl,-fuse-ld=gold])
+
+AM_COND_IF([ENABLE_NO_UNDEFINED],
+       [CC_CHECK_FLAGS_APPEND([AM_LDFLAGS],[LDFLAGS],[-Wl,--no-undefined])])
+
 AC_SUBST(AM_LDFLAGS)
 
 CFLAGS="$CFLAGS -Wvla -std=gnu11 -fms-extensions"
@@ -1104,7 +1119,7 @@ Documentation:
  - user documentation: $enable_doc
 
 Debugging:
- - ASAN: $enable_asan
+ - Sanitizers: $enable_sanitizers
  - Coverity: $enable_coverity_build
  - mutex debugging: $enable_mutex_debugging
  - tests: $enable_tests