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.
This commit is contained in:
Frantisek Sumsal 2023-11-10 16:38:01 +01:00 committed by Luca Boccassi
parent be0916f77c
commit 17ee59c9c9
2 changed files with 17 additions and 17 deletions

View File

@ -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()),

View File

@ -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"