add build option to enable ASan default tip

Thu, 14 May 2026 10:17:23 +0200

author
Mike Becker <universe@uap-core.de>
date
Thu, 14 May 2026 10:17:23 +0200
changeset 119
333a16b76adf
parent 118
0f2ffbc408ce

add build option to enable ASan

configure file | annotate | diff | comparison | revisions
make/project.xml file | annotate | diff | comparison | revisions
--- a/configure	Wed Apr 29 17:41:00 2026 +0200
+++ b/configure	Thu May 14 10:17:23 2026 +0200
@@ -99,6 +99,9 @@
   --debug                 add extra compile flags for debug builds
   --release               add extra compile flags for release builds
 
+Optional Features:
+  --enable-asan           address sanitizer
+
 __EOF__
     abort_configure
 }
@@ -171,6 +174,8 @@
         "--help"*) printhelp ;;
         "--debug") BUILD_TYPE="debug" ;;
         "--release") BUILD_TYPE="release" ;;
+        "--enable-asan") FEATURE_ASAN=on ;;
+        "--disable-asan") unset FEATURE_ASAN ;;
         "-"*) echo "unknown option: $ARG"; abort_configure ;;
     esac
 done
@@ -311,6 +316,26 @@
     fi
 }
 
+dependency_error_asan()
+{
+    print_check_msg "$dep_checked_asan" "checking for asan... "
+    # dependency asan toolchain="gnuc"
+    while true
+    do
+        if notistoolchain "gnuc"; then
+            break
+        fi
+        TEMP_CFLAGS="$TEMP_CFLAGS -fsanitize=address"
+        TEMP_LDFLAGS="$TEMP_LDFLAGS -fsanitize=address"
+        print_check_msg "$dep_checked_asan" "yes\n"
+        dep_checked_asan=1
+        return 1
+    done
+
+    print_check_msg "$dep_checked_asan" "no\n"
+    dep_checked_asan=1
+    return 0
+}
 dependency_error_ncurses()
 {
     print_check_msg "$dep_checked_ncurses" "checking for ncurses... "
@@ -390,8 +415,8 @@
 #
 
 echo >> "$TEMP_DIR/flags.mk"
-echo "configuring target: default"
-echo "# flags for target default" >> "$TEMP_DIR/flags.mk"
+echo "configuring global target"
+echo "# flags for unnamed target" >> "$TEMP_DIR/flags.mk"
 TEMP_CFLAGS=
 TEMP_CXXFLAGS=
 TEMP_LDFLAGS=
@@ -402,6 +427,26 @@
 fi
 
 # Features
+if [ -n "$FEATURE_ASAN" ]; then
+    # check dependency
+    if dependency_error_asan ; then
+        # "auto" features can fail and are just disabled in this case
+        if [ "$FEATURE_ASAN" = "auto" ]; then
+            DISABLE_FEATURE_ASAN=1
+        else
+            DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED asan "
+            ERROR=1
+        fi
+    fi
+    if [ -n "$DISABLE_FEATURE_ASAN" ]; then
+        unset FEATURE_ASAN
+    fi
+fi
+if [ -n "$FEATURE_ASAN" ]; then
+    :
+else
+    :
+fi
 
 
 if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then
@@ -444,6 +489,14 @@
     echo "Config:"
 fi
 echo
+echo "Features:"
+printf '  %-16s' 'asan:'
+if [ -n "$FEATURE_ASAN" ]; then
+    echo 'on'
+else
+    echo 'off'
+fi
+echo
 
 # generate the config.mk file
 pwd=`pwd`
--- a/make/project.xml	Wed Apr 29 17:41:00 2026 +0200
+++ b/make/project.xml	Thu May 14 10:17:23 2026 +0200
@@ -17,4 +17,15 @@
     <dependency name="ncurses">
         <pkgconfig>ncursesw</pkgconfig>
     </dependency>
+    <dependency name="asan" toolchain="gnuc">
+        <cflags>-fsanitize=address</cflags>
+        <ldflags>-fsanitize=address</ldflags>
+    </dependency>
+    <target>
+        <dependencies>ncurses</dependencies>
+        <feature name="asan">
+            <desc>address sanitizer</desc>
+            <dependencies>asan</dependencies>
+        </feature>
+    </target>
 </project>

mercurial