[PATCH 1 of 1] test-suite: Added new test suite feature (experimental)
Yann E. MORIN
yann.morin.1998@anciens.enib.fr
Sun May 16 15:09:00 GMT 2010
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
More information about the crossgcc
mailing list