summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/config.in1
-rw-r--r--config/test_suite.in30
-rw-r--r--contrib/gcc-test-suite/Makefile75
-rw-r--r--contrib/gcc-test-suite/README71
-rw-r--r--contrib/gcc-test-suite/default.cfg17
-rw-r--r--scripts/build/test_suite.sh41
-rw-r--r--scripts/build/test_suite/gcc.sh36
-rw-r--r--scripts/crosstool-NG.sh.in7
-rw-r--r--steps.mk1
9 files changed, 279 insertions, 0 deletions
diff --git a/config/config.in b/config/config.in
index f4beffe..5aa111e 100644
--- a/config/config.in
+++ b/config/config.in
@@ -9,3 +9,4 @@ source "config/libc.in"
source "config/debug.in"
source "config/companion_libs.in"
source "config/companion_tools.in"
+source "config/test_suite.in"
diff --git a/config/test_suite.in b/config/test_suite.in
new file mode 100644
index 0000000..0ac2f49
--- /dev/null
+++ b/config/test_suite.in
@@ -0,0 +1,30 @@
+# Test suite config options
+
+if EXPERIMENTAL
+
+menu "Test suite"
+
+config TEST_SUITE
+ bool
+ default n
+
+config TEST_SUITE_GCC
+ bool
+ prompt "GCC test suite"
+ depends on EXPERIMENTAL
+ default n
+ select TEST_SUITE
+ help
+ Select this option to install the GCC test suite in $CT_PREFIX_DIR/test_suite.
+
+ The GCC test suite includes a collection of various toolchain tests for GCC -
+ it utilizes the DejaGnu test framework.
+
+ For some tests a network enabled target with ssh server is required.
+
+ A helper Makefile is provided for running the tests - please see the included
+ README for information on how to run the test suite.
+
+endmenu
+
+endif
diff --git a/contrib/gcc-test-suite/Makefile b/contrib/gcc-test-suite/Makefile
new file mode 100644
index 0000000..96b954d
--- /dev/null
+++ b/contrib/gcc-test-suite/Makefile
@@ -0,0 +1,75 @@
+# Helper makefile which downloads (if required) and runs the GCC test suite (DejaGnu)
+#
+# Note: Before run please make sure to have your toolchain available in your path.
+#
+# Copyright 2010 DoréDevelopment
+#
+# Author: Martin Lund <mgl@doredevelopment.dk>
+#
+# 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 2 of the License, or (at your
+# option) any later version.
+#
+
+# Internal directory configuration
+TOPDIR=${shell pwd}
+TMPDIR=${TOPDIR}/tmp
+
+# Include default configuration
+include default.cfg
+
+# Add toolchain to path
+PATH:=${DG_TOOLCHAIN_DIR}:${PATH}
+
+# Select test set
+ifeq (${DG_TOOLNAME},gcc)
+ DG_TESTS=$(DG_C_TESTS)
+endif
+ifeq (${DG_TOOLNAME},g++)
+ DG_TESTS=$(DG_CPP_TESTS)
+endif
+
+# Check that we have 'runtest' installed
+RUNTEST=$(shell which runtest)
+ifeq "${RUNTEST}" ""
+ $(error "DejaGnu 'runtest' not found - please install (eg. apt-get install dejagnu)")
+endif
+
+# 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
+
+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
+
+test: gcc-${DG_GCC_VERSION} config
+ cd ${TMPDIR} && \
+ runtest --tool ${DG_TOOLNAME} \
+ --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}
+
+clean:
+ rm -rf gcc-testsuite-${DG_GCC_VERSION}.tar.gz gcc-${DG_GCC_VERSION} ${TMPDIR} *.log *.sum
+
+.PHONY: config test clean
diff --git a/contrib/gcc-test-suite/README b/contrib/gcc-test-suite/README
new file mode 100644
index 0000000..99d61cc
--- /dev/null
+++ b/contrib/gcc-test-suite/README
@@ -0,0 +1,71 @@
+
+Helper Makefile for testing gcc toolchains using the gcc-testsuite
+==================================================================
+
+Requirements
+------------
+
+* DejaGnu 'runtest' v1.4.4+
+* Make v3.81+
+* wget
+
+
+Configuration
+-------------
+
+Edit default.cfg to reflect your toolchain and target configuration.
+
+Alternatively, override configuration variables on the command line.
+
+Available config variables:
+
+DG_GCC_VERSION
+DG_GCC_URL
+DG_TOOLNAME
+DG_TARGET
+DG_TARGET_HOSTNAME
+DG_TARGET_USERNAME
+DG_C_TESTS
+DG_CPP_TESTS
+DG_TOOLCHAIN_DIR
+DG_SRC_DIR
+
+
+Run examples
+------------
+
+The first two examples require a networked target with ssh access and automatic
+ssh login (see section below). Target SW should be compiled with the toolchain
+to be tested.
+
+Run default gcc compile/execution tests:
+$ make DG_TOOLNAME=gcc DG_TARGET_HOSTNAME=192.168.17.93 DG_TARGET_USERNAME=root
+
+Run default g++ compile/execution tests:
+$ make DG_TOOLNAME=g++ DG_TARGET_HOSTNAME=192.168.17.93 DG_TARGET_USERNAME=root
+
+Run selected gcc compile only tests (no target required):
+$ make DG_TOOLNAME=gcc DG_C_TESTS="compile.exp noncompile.exp"
+
+
+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
+
+Now automatic ssh login should work - test by doing a simple ssh session to target.
+
+Note: The procedure might be slightly different for your particular target.
+
+
+Author
+------
+Martin Lund <mgl@doredevelopment.dk>
diff --git a/contrib/gcc-test-suite/default.cfg b/contrib/gcc-test-suite/default.cfg
new file mode 100644
index 0000000..d9e2bfe
--- /dev/null
+++ b/contrib/gcc-test-suite/default.cfg
@@ -0,0 +1,17 @@
+# Default test suite configuration
+
+# GCC configuration
+DG_GCC_VERSION = 4.3.2
+DG_GCC_URL = ftp://gcc.gnu.org/pub/gcc/releases/gcc-${DG_GCC_VERSION}/gcc-testsuite-${DG_GCC_VERSION}.tar.gz
+
+# Default DejaGnu configuration
+DG_TOOLNAME = gcc
+DG_TARGET_HOSTNAME = 127.0.0.1
+DG_TARGET_USERNAME = root
+DG_TARGET = powerpc-unknown-linux-gnu
+DG_SRC_DIR = ${TOPDIR}/gcc-${DG_GCC_VERSION}/gcc/testsuite
+DG_TOOLCHAIN_DIR = ${TOPDIR}/../../bin
+
+# Default tests
+DG_C_TESTS =
+DG_CPP_TESTS =
diff --git a/scripts/build/test_suite.sh b/scripts/build/test_suite.sh
new file mode 100644
index 0000000..8fabf42
--- /dev/null
+++ b/scripts/build/test_suite.sh
@@ -0,0 +1,41 @@
+# Wrapper to build the test suite facilities
+#
+# Current assumption: test suites are independent of each other
+# - no order handling required.
+
+# 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 --git a/scripts/build/test_suite/gcc.sh b/scripts/build/test_suite/gcc.sh
new file mode 100644
index 0000000..1b65269
--- /dev/null
+++ b/scripts/build/test_suite/gcc.sh
@@ -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"
+ CT_DoExecLog ALL cp "${CT_TOP_DIR}/contrib/gcc-test-suite/default.cfg" \
+ "${CT_TEST_SUITE_DIR}/gcc-test-suite"
+ CT_DoExecLog ALL cp "${CT_TOP_DIR}/contrib/gcc-test-suite/README" \
+ "${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
+ 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 --git a/scripts/crosstool-NG.sh.in b/scripts/crosstool-NG.sh.in
index cc54202..29ae4a1 100644
--- a/scripts/crosstool-NG.sh.in
+++ b/scripts/crosstool-NG.sh.in
@@ -125,6 +125,7 @@ CT_DoLog INFO "Building environment variables"
. "${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 @@ else
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"
@@ -518,6 +522,7 @@ if [ -z "${CT_RESTART}" ]; then
do_cc_get
do_libc_get
do_debug_get
+ do_test_suite_get
CT_EndStep
fi
@@ -548,6 +553,7 @@ if [ -z "${CT_RESTART}" ]; then
do_cc_extract
do_libc_extract
do_debug_extract
+ do_test_suite_extract
CT_EndStep
fi
fi
@@ -596,5 +602,6 @@ exec >/dev/null 2>&1
[ "${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 --git a/steps.mk b/steps.mk
index 7d6ea80..63d5a47 100644
--- a/steps.mk
+++ b/steps.mk
@@ -39,6 +39,7 @@ CT_STEPS := libc_check_config \
libelf_target \
binutils_target \
debug \
+ test_suite \
finish \
# Make the list available to sub-processes (scripts/crosstool-NG.sh needs it)