Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Andrew Burgess via Gdb-patches <gdb-patches@sourceware.org>
To: Tom de Vries <tdevries@suse.de>, gdb-patches@sourceware.org
Subject: Re: [PATCH 1/1] [gdb/contrib] Add make-check-all.sh
Date: Tue, 04 Apr 2023 12:35:21 +0100	[thread overview]
Message-ID: <87wn2rc22u.fsf@redhat.com> (raw)
In-Reply-To: <20230403150957.28921-2-tdevries@suse.de>

Tom de Vries via Gdb-patches <gdb-patches@sourceware.org> writes:

> Add script gdb/contrib/make-check-all.sh, that's intended to function as a
> drop-in replacement of make check, but excercising all host/target boards in
> gdb/testsuite/boards.
>
> Shell-checked and tested on x86_64-linux.

Hi Tom,

Thanks for putting this together, I think this could be really useful.

I'm not a fan of the way you've split the patch description into email
0/1 and not included it with this commit.  I think there's lots of
useful information in there, and I'd much rather have the whole
description included in the commit message -- it's much easier to find
then rather than having to hunt on the mailing list in the future.

> ---
>  gdb/contrib/make-check-all.sh | 255 ++++++++++++++++++++++++++++++++++
>  1 file changed, 255 insertions(+)
>  create mode 100755 gdb/contrib/make-check-all.sh
>
> diff --git a/gdb/contrib/make-check-all.sh b/gdb/contrib/make-check-all.sh
> new file mode 100755
> index 00000000000..1befe418b81
> --- /dev/null
> +++ b/gdb/contrib/make-check-all.sh
> @@ -0,0 +1,255 @@
> +#!/bin/bash
> +
> +# Copyright (C) 2023 Free Software Foundation, Inc.
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +# Run make check with all boards from gdb/testsuite/boards.

I think you need some kind of usage test here too.  Imagine a new
developer finds this file and looks inside.  Ideally, I think they
should know how to use it, and what it will do for them without having
to read any of the actual script content.

On implementation, I wonder if it would be useful to provide a mechanism
by which the gdb.sum and gdb.log files for each test run could be
preserved?

Thanks,
Andrew

> +
> +host_boards=(
> +    local-remote-host
> +    local-remote-host-notty
> +)
> +
> +gdbserver_boards=(
> +    native-extended-gdbserver
> +    native-gdbserver
> +    native-stdio-gdbserver
> +)
> +
> +remote_gdbserver_boards=(
> +    remote-gdbserver-on-localhost
> +    remote-stdio-gdbserver
> +)
> +
> +host_target_boards=(
> +    local-remote-host-native
> +)
> +
> +target_boards=(
> +    cc-with-gdb-index
> +    cc-with-debug-names
> +    cc-with-dwz
> +    cc-with-dwz-m
> +    cc-with-gnu-debuglink
> +    debug-types
> +    dwarf4-gdb-index
> +    dwarf64
> +    fission
> +    fission-dwp
> +    gold
> +    gold-gdb-index
> +    readnow
> +    stabs
> +)
> +
> +rtf_for_board ()
> +{
> +    local b
> +    b="$1"
> +
> +    case $b in
> +	local-remote-host-native)
> +	    mkdir -p "$tmpdir/$b"
> +	    rtf=(
> +		"${rtf[@]}"
> +		"HOST_DIR=$tmpdir/$b"
> +	    )
> +	    ;;
> +	remote-stdio-gdbserver)
> +	    rtf=(
> +		"${rtf[@]}"
> +		"REMOTE_HOSTNAME=localhost"
> +	    )
> +	    if [ "$target_user" != "" ]; then
> +		rtf=(
> +		    "${rtf[@]}"
> +		    "REMOTE_USERNAME=$target_user"
> +		)
> +	    else
> +		rtf=(
> +		    "${rtf[@]}"
> +		    "REMOTE_USERNAME=$USER"
> +		)
> +	    fi
> +	    ;;
> +	remote-gdbserver-on-localhost)
> +	    if [ "$target_user" != "" ]; then
> +		rtf=(
> +		    "${rtf[@]}"
> +		    "REMOTE_TARGET_USERNAME=$target_user"
> +		)
> +	    fi
> +	    ;;
> +	local-remote-host|local-remote-host-notty)
> +	    if [ "$host_user" != "" ]; then
> +		rtf=(
> +		    "${rtf[@]}"
> +		    "REMOTE_HOST_USERNAME=$host_user"
> +		)
> +	    else
> +		rtf=(
> +		    "${rtf[@]}"
> +		    "REMOTE_HOST_USERNAME=$USER"
> +		)
> +	    fi
> +	    ;;
> +	*)
> +	    ;;
> +    esac
> +}
> +
> +summary ()
> +{
> +    if $verbose; then
> +	cat
> +    else
> +	grep -E "^(#|FAIL:|ERROR:|WARNING:)" \
> +	    | sort -u
> +    fi
> +}
> +
> +do_tests ()
> +{
> +    if $debug; then
> +	echo "RTF: ${rtf[*]}"
> +    fi
> +
> +    if $dry_run; then
> +	return
> +    fi
> +
> +    make check \
> +	 RUNTESTFLAGS="${rtf[*]} ${tests[*]}" \
> +	 2>&1 \
> +	| summary
> +}
> +
> +parse_args ()
> +{
> +    debug=false
> +    keep=false
> +    verbose=false
> +    dry_run=false
> +
> +    host_user=""
> +    target_user=""
> +
> +    while [ $# -gt 0 ]; do
> +	case "$1" in
> +	    --debug)
> +		debug=true
> +		;;
> +	    --keep)
> +		keep=true
> +		;;
> +	    --verbose)
> +		verbose=true
> +		;;
> +	    --dry-run)
> +		dry_run=true
> +		;;
> +	    --host-user)
> +		shift
> +		host_user="$1"
> +		;;
> +	    --target-user)
> +		shift
> +		target_user="$1"
> +		;;
> +	    *)
> +		break
> +		;;
> +	esac
> +	shift
> +    done
> +
> +    tests=("$@")
> +}
> +
> +main ()
> +{
> +    local b
> +    local h
> +
> +    parse_args "$@"
> +
> +    tmpdir=$(mktemp -d)
> +
> +    if $debug; then
> +	echo "TESTS: ${tests[*]}"
> +    fi
> +
> +    if true; then
> +	echo "LOCAL:"
> +	rtf=()
> +	do_tests
> +    fi
> +
> +    if true; then
> +	for b in "${target_boards[@]}"; do
> +	    echo "TARGET BOARD: $b"
> +	    rtf=(
> +		--target_board="$b"
> +	    )
> +	    rtf_for_board "$b"
> +	    do_tests
> +	done
> +    fi
> +
> +    if true; then
> +	for b in "${gdbserver_boards[@]}" "${remote_gdbserver_boards[@]}"; do
> +	    echo "TARGET BOARD: $b"
> +	    rtf=(
> +		--target_board="$b"
> +	    )
> +	    rtf_for_board "$b"
> +	    do_tests
> +	done
> +    fi
> +
> +    if true; then
> +	for h in "${host_boards[@]}"; do
> +	    for b in "${remote_gdbserver_boards[@]}"; do
> +		echo "HOST BOARD: $h, TARGET BOARD: $b"
> +		rtf=(
> +		    --host_board="$h"
> +		    --target_board="$b"
> +		)
> +		rtf_for_board "$h"
> +		rtf_for_board "$b"
> +		do_tests
> +	    done
> +	done
> +    fi
> +
> +    if true; then
> +	for b in "${host_target_boards[@]}"; do
> +	    echo "HOST/TARGET BOARD: $b"
> +	    rtf=(
> +		--host_board="$b"
> +		--target_board="$b"
> +	    )
> +	    rtf_for_board "$b"
> +	    do_tests
> +	done
> +    fi
> +
> +    if $keep; then
> +	echo "keeping tmp dir $tmpdir"
> +    else
> +	rm -Rf "$tmpdir"
> +    fi
> +}
> +
> +main "$@"
> -- 
> 2.35.3


  reply	other threads:[~2023-04-04 11:35 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-03 15:09 [PATCH 0/1] [gdb/testsuite] Run test-case with all host/target boards Tom de Vries via Gdb-patches
2023-04-03 15:09 ` [PATCH 1/1] [gdb/contrib] Add make-check-all.sh Tom de Vries via Gdb-patches
2023-04-04 11:35   ` Andrew Burgess via Gdb-patches [this message]
2023-04-05  9:01     ` Tom de Vries via Gdb-patches
2023-04-18 12:43       ` Tom de Vries via Gdb-patches
2023-04-19 14:04         ` Simon Marchi via Gdb-patches
2023-04-20 11:43           ` Tom de Vries via Gdb-patches
2023-04-20 14:30             ` Simon Marchi via Gdb-patches
2023-04-21 15:41               ` Tom de Vries via Gdb-patches

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87wn2rc22u.fsf@redhat.com \
    --to=gdb-patches@sourceware.org \
    --cc=aburgess@redhat.com \
    --cc=tdevries@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox