This is the mail archive of the crossgcc@sourceware.org mailing list for the crossgcc project.

See the CrossGCC FAQ for lots more information.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 1 of 1] test-suite: Added new test suite feature (experimental)


Martin, All,

I don't know where the problem lies, but I was not able to easily apply
your base64-encoded mail. I really hope it lies on _my_ side (or it
would rendre Hg useless to exchange non-ASCII patches...)

On Saturday 15 May 2010 17:19:05 Martin Lund wrote:
> # HG changeset patch
> # User Martin Lund <mgl@doredevelopment.dk>
> # Date 1273934735 -7200
> # Node ID 7e1196581995247e24c585653be9e65e8555d0ea
> # Parent  48e107b35ba9c2b3f31667dd5042cc69bc472592
> test-suite: Added new test suite feature (experimental)
> 
> This patch adds support for installing the gcc test suite. A helper
> Makefile is provided for building and running the gcc tests.
> 
> The default configuration runs all gcc tests and requires automatic
> ssh/scp login access to a networked target board. See README for
> more details.
> 
> Note: Current feature is tested with the powerpc-unknown-linux-gnu
> sample but it should work with others as well.

Missing Signed-off-by.

[--SNIP--]
> diff -r 48e107b35ba9 -r 7e1196581995 contrib/gcc-test-suite/Makefile
[--SNIP--]
> +# Targets 
> +all: test
> +
> +gcc-testsuite-${DG_GCC_VERSION}.tar.gz:
> +#	wget -nc ${DG_GCC_URL}
> +    
> +gcc-${DG_GCC_VERSION}: gcc-testsuite-${DG_GCC_VERSION}.tar.gz
> +#	tar xzf gcc-testsuite-${DG_GCC_VERSION}.tar.gz

Those two targets are useless, we already have the test-suite isntalled.

> +config:
> +	@mkdir -p ${TMPDIR}
> +	@{ echo 'lappend boards_dir "."'; \
> +	  echo "set target_alias ${DG_TARGET}"; } > ${TMPDIR}/site.exp
> +	@{ echo -e "load_generic_config \"unix\""; \
> +	echo -e "process_multilib_options \"\"" ; \
> +	echo "set_board_info bmk,use_alarm 1" ; \
> +	echo "set_board_info rsh_prog ssh" ; \
> +	echo "set_board_info rcp_prog scp" ; \
> +	echo "set_board_info hostname ${DG_TARGET_HOSTNAME}"; \
> +	echo "set_board_info username ${DG_TARGET_USERNAME}"; } > ${TMPDIR}/board.exp

Split the two rules:

${TMPDIR}/site.exp: $(TOP_DIR)/default.cfg
    @{ echo 'lappend boards_dir "."'; \
       echo "set target_alias ${DG_TARGET}"; } > $@

${TMPDIR}/board.exp: $(TOP_DIR)/default.cfg
    @{ echo -e "load_generic_config \"unix\""; \
       echo -e "process_multilib_options \"\"" ; \
       echo "set_board_info bmk,use_alarm 1" ; \
       echo "set_board_info rsh_prog ssh" ; \
       echo "set_board_info rcp_prog scp" ; \
       echo "set_board_info hostname ${DG_TARGET_HOSTNAME}"; \
       echo "set_board_info username ${DG_TARGET_USERNAME}"; } > $@

Also, they depend on default.cfg because they use values from there.

> +test: gcc-${DG_GCC_VERSION} config

test: ${TMPDIR}/site.exp ${TMPDIR}/board.exp

> +	cd ${TMPDIR} && \
> +	runtest	--tool ${DG_TOOLNAME} \

Don't 'cd $(TMP_DIR)', but use runtest's --outdir and --objdir

> +		--srcdir ${DG_SRC_DIR} \
> +		--all \
> +		--target ${DG_TARGET} \
> +		--target_board board \
> +		${DG_TESTS} \
> +		GXX_UNDER_TEST=${DG_TARGET}-g++ ; \
> +	mv ${TMPDIR}/*.log ${TOPDIR} ; \
> +	mv ${TMPDIR}/*.sum ${TOPDIR}

Do not use continuation lines between runtest and the 'mv', as make would
not detect a failure in runtest, and would still try to move the files.
Better let make handle that.

And, why move the result files at all? Why not just do:
    @echo "Result files available in" '$(TMP_DIR)'"

> +clean:
> +	rm -rf gcc-testsuite-${DG_GCC_VERSION}.tar.gz gcc-${DG_GCC_VERSION} ${TMPDIR} *.log *.sum 

Tarball and directory now not handled.

> diff -r 48e107b35ba9 -r 7e1196581995 contrib/gcc-test-suite/README
> --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
> +++ b/contrib/gcc-test-suite/README	Sat May 15 16:45:35 2010 +0200
> @@ -0,0 +1,71 @@
> +
> +Helper Makefile for testing gcc toolchains using the gcc-testsuite
> +==================================================================
> +
> +Requirements
> +------------
> +
> +* DejaGnu 'runtest' v1.4.4+
> +* Make v3.81+
> +* wget

wget not needed, we do no download while running the test-suite.

> +Configuration
> +-------------
> +
> +Edit default.cfg to reflect your toolchain and target configuration.
> +
> +Alternatively, override configuration variables on the command line.
> +
> +Available config variables:

I know most of those sound fairly obvious, but some explanations would
be most welcome. For example, it's not obvious where DG_SRC_DIR should
point to ( yes, reading the code makes it quite obvious, but as this
file is documenting the test-suite, let it be self-sufficient! ;-) )

> +DG_GCC_VERSION
> +DG_GCC_URL

Those two useless, we do no download while running the test-suite.

> +DG_TOOLNAME
> +DG_TARGET

As I see it, DG_TARGET is the tuple, right? In that case, it should
be a constant, and the user should not have to define it a run-time,
As that would be error-prone (note that we currently can not isntall
two or more toolchains in the same prefix).

Plus, you are already setting it in the build script.

> +DG_TARGET_HOSTNAME
> +DG_TARGET_USERNAME
> +DG_C_TESTS
> +DG_CPP_TESTS
> +DG_TOOLCHAIN_DIR
> +DG_SRC_DIR

DG_SRC_DIR could/should be automagically detected, no?

[--SNIP--]
> +SSH automatic login configuration example
> +-----------------------------------------
> +
> +On host do: 
> +ssh-keygen -t rsa (then simply press enter thru all steps)
> +scp ~/.ssh/id_rsa.pub <username>@<target IP>:~/
> +
> +On target do:
> +cd ~
> +mkdir .ssh
> +cat id_rsa.pub >> .ssh/authorized_keys
> +rm id_rsa.pub

As already mentionned, use ssh-copy-id.

> +Author
> +------
> +Martin Lund <mgl@doredevelopment.dk>

Maybe also tell the user he/she can get rid of the test-suite afterwards,
by deleting the test-suite/ sub-directory.

> diff -r 48e107b35ba9 -r 7e1196581995 scripts/build/test_suite.sh
> --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
> +++ b/scripts/build/test_suite.sh	Sat May 15 16:45:35 2010 +0200
> @@ -0,0 +1,41 @@
> +# Wrapper to build the test suite facilities
> +#
> +# Current assumption: test suites are independent of each other
> +#                     - no order handling required.

That's perfectly fine with me. I don't expect dependencies between the
test-suites at build-time, nor at run-time.

> +# List all test suite facilities, and parse their scripts
> +CT_TEST_SUITE_FACILITY_LIST=
> +for f in "${CT_LIB_DIR}/scripts/build/test_suite/"*.sh; do
> +    _f="$(basename "${f}" .sh)"
> +    __f="CT_TEST_SUITE_${_f}"
> +    __f=`echo ${__f} | tr "[:lower:]" "[:upper:]"`
> +    if [ "${!__f}" = "y" ]; then
> +        CT_DoLog DEBUG "Enabling test suite '${_f}'"
> +        . "${f}"
> +        CT_TEST_SUITE_FACILITY_LIST="${CT_TEST_SUITE_FACILITY_LIST} ${_f}"
> +    else
> +        CT_DoLog DEBUG "Disabling test suite '${_f}'"
> +    fi
> +done
> +
> +# Download the test suite facilities
> +do_test_suite_get() {
> +    for f in ${CT_TEST_SUITE_FACILITY_LIST}; do
> +        do_test_suite_${f}_get
> +    done
> +}
> +
> +# Extract and patch the test suite facilities
> +do_test_suite_extract() {
> +    for f in ${CT_TEST_SUITE_FACILITY_LIST}; do
> +        do_test_suite_${f}_extract
> +    done
> +}
> +
> +# Build the test suite facilities
> +do_test_suite() {
> +    for f in ${CT_TEST_SUITE_FACILITY_LIST}; do
> +        do_test_suite_${f}_build
> +    done
> +}
> +
> diff -r 48e107b35ba9 -r 7e1196581995 scripts/build/test_suite/gcc.sh
> --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
> +++ b/scripts/build/test_suite/gcc.sh	Sat May 15 16:45:35 2010 +0200
> @@ -0,0 +1,36 @@
> +# This file adds the functions to build the GCC test suite
> +# Copyright 2010 DorÃDevelopment
> +# Created by Martin Lund <mgl@doredevelopment.dk>
> +# Licensed under the GPL v2. See COPYING in the root of this package
> +
> +do_test_suite_gcc_get() { :; }
> +do_test_suite_gcc_extract() { :; }
> +do_test_suite_gcc_build() { :; }
> +
> +# Overide functions depending on configuration
> +if [ "${CT_TEST_SUITE_GCC}" = "y" ]; then
> +
> +do_test_suite_gcc_build() {
> + 
> +    CT_DoStep INFO "Installing GCC test suite"
> +
> +    CT_DoExecLog ALL mkdir -p "${CT_TEST_SUITE_DIR}/gcc-test-suite/gcc-${CT_CC_VERSION}/gcc"
> +    CT_DoExecLog ALL cp "${CT_TOP_DIR}/contrib/gcc-test-suite/Makefile" \
> +                        "${CT_TEST_SUITE_DIR}/gcc-test-suite"

s/CT_TOP_DIR/CT_LIB_DIR/

> +    CT_DoExecLog ALL cp "${CT_TOP_DIR}/contrib/gcc-test-suite/default.cfg" \
> +                        "${CT_TEST_SUITE_DIR}/gcc-test-suite"

s/CT_TOP_DIR/CT_LIB_DIR/

> +    CT_DoExecLog ALL cp "${CT_TOP_DIR}/contrib/gcc-test-suite/README" \

s/CT_TOP_DIR/CT_LIB_DIR/

> +                        "${CT_TEST_SUITE_DIR}/gcc-test-suite"
> +    CT_DoExecLog ALL cp -r "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/gcc/testsuite" \
> +                           "${CT_TEST_SUITE_DIR}/gcc-test-suite/gcc-${CT_CC_VERSION}/gcc"
> +    sed "s/DG_GCC_VERSION .*/DG_GCC_VERSION = ${CT_CC_VERSION}/g" \
> +        ${CT_TEST_SUITE_DIR}/gcc-test-suite/default.cfg > \
> +        ${CT_TEST_SUITE_DIR}/gcc-test-suite/default.cfg.tmp

DG_GCC_VERSION useless.

> +    sed "s/DG_TARGET .*/DG_TARGET = ${CT_TARGET}/g" \
> +        ${CT_TEST_SUITE_DIR}/gcc-test-suite/default.cfg.tmp > \
> +        ${CT_TEST_SUITE_DIR}/gcc-test-suite/default.cfg
> +    CT_DoExecLog ALL rm -f "${CT_TEST_SUITE_DIR}/gcc-test-suite/default.cfg.tmp"
> +    CT_EndStep
> +}
> +
> +fi # CT_TEST_SUITE_GCC
> diff -r 48e107b35ba9 -r 7e1196581995 scripts/crosstool-NG.sh.in
> --- a/scripts/crosstool-NG.sh.in	Fri Apr 30 22:25:45 2010 +0200
> +++ b/scripts/crosstool-NG.sh.in	Sat May 15 16:45:35 2010 +0200
> @@ -125,6 +125,7 @@
>  . "${CT_LIB_DIR}/scripts/build/libc/${CT_LIBC}.sh"
>  . "${CT_LIB_DIR}/scripts/build/cc/${CT_CC}.sh"
>  . "${CT_LIB_DIR}/scripts/build/debug.sh"
> +. "${CT_LIB_DIR}/scripts/build/test_suite.sh"
>  
>  # Target tuple: CT_TARGET needs a little love:
>  CT_DoBuildTargetTuple
> @@ -159,6 +160,9 @@
>      CT_COMPLIBS_DIR="${CT_BUILD_DIR}/static"
>  fi
>  
> +# Compute test suite install directory
> +CT_TEST_SUITE_DIR=${CT_INSTALL_DIR}/test-suite
> +
>  # Note: we'll always install the core compiler in its own directory, so as to
>  # not mix the two builds: core and final.
>  CT_CC_CORE_STATIC_PREFIX_DIR="${CT_BUILD_DIR}/${CT_CC}-core-static"
> @@ -519,6 +523,7 @@
>          do_cc_get
>          do_libc_get
>          do_debug_get
> +        do_test_suite_get
>          CT_EndStep
>      fi
>  
> @@ -549,6 +554,7 @@
>          do_cc_extract
>          do_libc_extract
>          do_debug_extract
> +        do_test_suite_extract
>          CT_EndStep
>      fi
>  fi
> @@ -597,5 +603,6 @@
>  
>  [ "${CT_LOG_FILE_COMPRESS}" = y ] && bzip2 -9 "${CT_LOG_FILE}"
>  [ "${CT_INSTALL_DIR_RO}" = "y"  ] && chmod -R a-w "${CT_INSTALL_DIR}"
> +[ "${CT_TEST_SUITE}" = "y" ] && chmod -R a+w "${CT_TEST_SUITE_DIR}"
>  
>  trap - EXIT
> diff -r 48e107b35ba9 -r 7e1196581995 steps.mk
> --- a/steps.mk	Fri Apr 30 22:25:45 2010 +0200
> +++ b/steps.mk	Sat May 15 16:45:35 2010 +0200
> @@ -39,6 +39,7 @@
>              libelf_target       \
>              binutils_target     \
>              debug               \
> +            test_suite          \
>              finish              \
>  
>  # Make the list available to sub-processes (scripts/crosstool-NG.sh needs it)

Do you want to handle these issues, or do you want me to munge your patch?

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'



--
For unsubscribe information see http://sourceware.org/lists.html#faq


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]