From 17ee59c9c922553a8cb4d54cb8ae415706c4feff Mon Sep 17 00:00:00 2001 From: Frantisek Sumsal Date: Fri, 10 Nov 2023 16:38:01 +0100 Subject: [PATCH] fuzz: pass -Dc_args=/-Dcpp_args= to fuzzer targets Prompted by #29972, because right now it's practically impossible to pass -fno-sanitize=function to the fuzzer targets without some extensive sed'ing. This splits both c_args and cpp_args to separate arguments for tools/meson-build.sh, because the other way would be to use `eval`, so the space-separated but quoted strings passed to these options are not split where they shouldn't, and I'd rather avoid using `eval` if possible. Also, this switches the positional arguments we pass to `meson setup`, as they were in incorrect order (docs say it should be buildir followed by sourcedir); meson is apparently clever enough to figure this out and switch the arguments around if necessary, so it didn't complain. --- test/fuzz/meson.build | 5 +++-- tools/meson-build.sh | 29 ++++++++++++++--------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/test/fuzz/meson.build b/test/fuzz/meson.build index 45f777525c..4b7d923617 100644 --- a/test/fuzz/meson.build +++ b/test/fuzz/meson.build @@ -52,10 +52,11 @@ sanitize_address_undefined = custom_target( project_source_root, '@OUTPUT@', 'fuzzers', - '-Dfuzz-tests=true -Db_lundef=false -Db_sanitize=address,undefined --optimization=@0@ @1@ -Dc_args=@2@ -Dcpp_args=@2@ --auto-features=@3@'.format( + ' '.join(get_option('c_args') + '-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION'), + ' '.join(get_option('cpp_args') + '-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION'), + '-Dfuzz-tests=true -Db_lundef=false -Db_sanitize=address,undefined --optimization=@0@ @1@ --auto-features=@2@'.format( get_option('optimization'), get_option('werror') ? '--werror' : '', - '-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION', sanitize_auto_features ), ' '.join(cc.cmd_array()), diff --git a/tools/meson-build.sh b/tools/meson-build.sh index 2ef60cfa8e..311b778f0a 100755 --- a/tools/meson-build.sh +++ b/tools/meson-build.sh @@ -2,21 +2,20 @@ # SPDX-License-Identifier: LGPL-2.1-or-later set -eux -src="$1" -dst="$2" -target="$3" -options="$4" -CC="$5" -CXX="$6" +sourcedir="${1:?}" +builddir="${2:?}" +target="${3:?}" +c_args="${4:?}" +cpp_args="${5:?}" +options="${6:?}" +CC="${7:?}" +CXX="${8:?}" -# shellcheck disable=SC2086 -[ -f "$dst/build.ninja" ] || CC="$CC" CXX="$CXX" meson setup "$src" "$dst" $options - -# Locate ninja binary, on CentOS 7 it is called ninja-build, so -# use that name if available. -ninja="ninja" -if command -v ninja-build >/dev/null ; then - ninja="ninja-build" +if [ ! -f "$builddir/build.ninja" ]; then + # shellcheck disable=SC2086 + CC="$CC" CXX="$CXX" meson setup -Dc_args="$c_args" -Dcpp_args="$cpp_args" "$builddir" "$sourcedir" $options fi -"$ninja" -C "$dst" "$target" +# Locate ninja binary, on CentOS 7 it is called ninja-build, so use that name if available. +command -v ninja-build >/dev/null && ninja="ninja-build" || ninja="ninja" +"$ninja" -C "$builddir" "$target"