On Thu, Sep 24, 2026 at 09:39:40PM +0000, Pierrick Bouvier wrote:
> This allows each target to provide an additional list of cross
> compilers to check. With this, we can detect default cc for common
> setups (debian/fedora/macos) without user having to provide a
> --cross-cc-* option.
>
> In addition, it allows us to pick up host compilers for various hosts.
> (debian and archlinux have $arch-linux-gnu-gcc installed
> with gcc package by default, but not fedora).
>
> Signed-off-by: Pierrick Bouvier <[email protected]>
> ---
> tests/tcg/meson.build | 46 +++++++++++++++++++++++++------------------
> 1 file changed, 27 insertions(+), 19 deletions(-)
>
> diff --git a/tests/tcg/meson.build b/tests/tcg/meson.build
> index 0006d192cab..59ab73e1d10 100644
> --- a/tests/tcg/meson.build
> +++ b/tests/tcg/meson.build
> @@ -21,6 +21,7 @@ tcg_tests = {}
> # {
> # 'name_of_target': {
> # 'cc': 'cross_compiler',
> +# 'cc_alt': ['list of alternative cross compilers', ...]
> # 'cc_dockerfile': 'name_of_dockerfile',
> # 'cc_feat_cflags': {
> # 'name': ['feature cflags'],
> @@ -210,7 +211,7 @@ foreach target, plan: tcg_tests
>
> # return a clear error if user misspell a target entry
> foreach key, _ : plan
> - allowed = ['cc', 'cc_dockerfile', 'cc_feat_cflags',
> + allowed = ['cc', 'cc_alt', 'cc_dockerfile', 'cc_feat_cflags',
> 'folder', 'gdb_arch', 'gdb_feat_version', 'qemu', 'tests']
> if key not in allowed
> error('unknown tcg test plan entry \'' + key + '\' for target ' +
> target +
> @@ -218,15 +219,18 @@ foreach target, plan: tcg_tests
> endif
> endforeach
>
> - cc = find_program(plan['cc'], required : false)
> + cc_list = [plan['cc']]
> + if 'cc_alt' in plan
> + cc_list += plan['cc_alt']
> + endif
If you're combining these into a list anyway, why not just
have 'cc' be a list of CC names to begin with and not bother
with a separate 'cc_alt' field ?
> +
> cc_cflags = []
> -
> check_flags = []
> check_required = false
> cross_cc = get_option('tcg_tests_cross_cc_' + cc_arch)
> if cross_cc != ''
> - # we make sure cross cc exists
> - cc = find_program(cross_cc, required: true)
> + # prepend requested cross_cc
> + cc_list = [cross_cc, cc_list]
> check_required = true
> endif
> cross_cflags = get_option('tcg_tests_cross_cflags_' + cc_arch)
> @@ -236,22 +240,26 @@ foreach target, plan: tcg_tests
> check_flags = cc_cflags
> check_required = true
> endif
> -
> - cc_from_system = cc.found()
> - has_cc = cc.found()
> - if has_cc
> - if target.endswith('softmmu')
> - check_flags += ['-nostdlib', '-ffreestanding', '-r']
> - else
> - check_flags += ['-static']
> - endif
> -
> - cmd = run_command([cc, files('test_cc.c'), check_flags, '-o',
> '/dev/null'],
> - check: check_required)
> - has_cc = cmd.returncode() == 0
> - cc_from_system = has_cc
> + if target.endswith('softmmu')
> + check_flags += ['-nostdlib', '-ffreestanding', '-r']
> + else
> + check_flags += ['-static']
> endif
>
> + has_cc = false
> + foreach possible_cc: cc_list
> + cc = find_program(possible_cc, required: check_required)
> + if cc.found()
> + cmd = run_command([cc, files('test_cc.c'), check_flags, '-o',
> '/dev/null'],
> + check: check_required)
> + if cmd.returncode() == 0
> + has_cc = true
> + break
> + endif
> + endif
> + endforeach
> +
> + cc_from_system = has_cc
> build_test_depends = []
> build_test_depend_files = []
>
> --
> 2.43.0
>
>
With regards,
Daniel
--
|: https://berrange.com ~~ https://hachyderm.io/@berrange :|
|: https://libvirt.org ~~ https://entangle-photo.org :|
|: https://pixelfed.art/berrange ~~ https://fstop138.berrange.com :|