Thu, 22 May 2025 15:48:00 +0200
add an option to enable address sanitizer
configure | file | annotate | diff | comparison | revisions | |
make/project.xml | file | annotate | diff | comparison | revisions |
--- a/configure Thu May 15 16:12:09 2025 +0200 +++ b/configure Thu May 22 15:48:00 2025 +0200 @@ -111,8 +111,9 @@ --release add extra compile flags for release builds Optional Features: - --enable-api-docs - --enable-coverage + --enable-api-docs run Doxygen during build + --enable-coverage test coverage with gcov + --enable-asan address sanitizer --disable-cxx-tests the check-cxx makefile target --disable-szmul-builtin use custom implementation, instead @@ -191,6 +192,8 @@ "--disable-api-docs") unset FEATURE_API_DOCS ;; "--enable-coverage") FEATURE_COVERAGE=on ;; "--disable-coverage") unset FEATURE_COVERAGE ;; + "--enable-asan") FEATURE_ASAN=on ;; + "--disable-asan") unset FEATURE_ASAN ;; "--enable-cxx-tests") FEATURE_CXX_TESTS=on ;; "--disable-cxx-tests") unset FEATURE_CXX_TESTS ;; "--enable-szmul-builtin") FEATURE_SZMUL_BUILTIN=on ;; @@ -339,6 +342,26 @@ dep_checked_coverage=1 return 0 } +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_cxx() { print_check_msg "$dep_checked_cxx" "checking for cxx... " @@ -631,6 +654,26 @@ else : fi +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 "$FEATURE_CXX_TESTS" ]; then # check dependency if dependency_error_cxx ; then @@ -772,6 +815,11 @@ else echo " coverage: off" fi +if [ -n "$FEATURE_ASAN" ]; then +echo " asan: on" +else +echo " asan: off" +fi if [ -n "$FEATURE_CXX_TESTS" ]; then echo " cxx-tests: on" else
--- a/make/project.xml Thu May 15 16:12:09 2025 +0200 +++ b/make/project.xml Thu May 22 15:48:00 2025 +0200 @@ -80,6 +80,11 @@ <test>command -v gcovr</test> </dependency> + <dependency name="asan" toolchain="gnuc"> + <cflags>-fsanitize=address</cflags> + <ldflags>-fsanitize=address</ldflags> + </dependency> + <dependency name="no_coverage"> <test>test -z "$FEATURE_COVERAGE"</test> </dependency> @@ -87,14 +92,20 @@ <target> <feature name="api-docs"> <dependencies>doxygen</dependencies> + <desc>run Doxygen during build</desc> <make> # Documentation WITH_API_DOCS=yes </make> </feature> <feature name="coverage"> + <desc>test coverage with gcov</desc> <dependencies>coverage</dependencies> </feature> + <feature name="asan"> + <desc>address sanitizer</desc> + <dependencies>asan</dependencies> + </feature> <feature name="cxx-tests" default="true"> <dependencies>cxx</dependencies> <desc>the check-cxx makefile target</desc>