zephyr/scripts/sanity_chk/regression_chk
Peter Mitsis d902e9e514 sanity: Key off platform instead of BSP
Deprecates (and hides) the -B option in favor of using the -P option.
The -B option is used to specify the BSP, whereas the -P option specifies
the platform.

Change-Id: Ie1d3cd6383f08a84e5d994221b253153152a0658
Signed-off-by: Peter Mitsis <peter.mitsis@windriver.com>
2016-02-05 20:14:21 -05:00

242 lines
6.2 KiB
Bash
Executable File

#!/bin/bash
# Copyright (c) 2015 Wind River Systems, Inc.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# 3) Neither the name of Wind River Systems nor the names of its contributors
# may be used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
# Script to regression test kernel operation
# Import common sanity check definitions
#
if [ -z ${ZEPHYR_BASE} ]; then
echo "shell variables required to build Zephyr OS are not set"
exit 1
fi
if [ ! -d ${ZEPHYR_BASE} ] ; then
echo "directory ${ZEPHYR_BASE} not found"
exit 1
fi
source ${ZEPHYR_BASE}/scripts/sanity_chk/common.defs
# Location of master project directory
#
PRJ_PATH=${ZEPHYR_BASE}/samples
# Identify the file containing the projects to be built (or cleaned)
#
PRJ_LIST=${ZEPHYR_BASE}/scripts/sanity_chk/regression_chk.data
# print script usage
#
help() {
cat << EOF
Usage : ${SCRIPT_NAME} [-hHcqbl] [-A <arch>] [-P <platform>]
-h display this help message
-H display more detailed documentation
-c just clean projects and delete execution logs
-q just do quick sanity check
-b just build projects
-l keep successful project execution logs
-A build projects for the specified architecture
-P build projects for the specified platform
EOF
}
# print long help
#
long_help() {
cat << EOF
Script to regression test kernel operation.
The sanity check builds all sample projects supported by the specified platform;
if no platform has been specified, a default platform for each project is used.
The script also runs each sample project using QEMU, where possible; if desired
the script can be instructed to skip the QEMU execution step.
The script returns 0 on success. If an error is encountered at any point
the script returns the exit value of the command that failed, the function
and line of the script where the error was detected, as well as the full path
of the script (to help debug path issues).
*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=
QEMU output from a project is sent to a log file identified by the script;
it is typically located in the associated sample project directory.
You can monitor execution by doing 'tail -f <log filename>' in another shell.
A project's log file is normally retained only if execution fails; however,
invoking the script with the '-l' option keeps the log file in all cases.
*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=*-=
All object code and executable files persist after completion. Re-run the script
with the '-c' option to delete the sample project object code and log files.
EOF
}
# main routine building and running nanokernel sample projects
#
main() {
# set up default behaviors
clean_only=0
quick_sanity=0
build_only=0
BSP_NAME=""
PLATFORM_NAME=""
ARCH_NAME=""
KEEP_LOGS=0
# process command options
while getopts ":hHcqbklA:B:P:" arg $*
do
case $arg in
h)
help
exit 0
;;
H)
long_help
exit 0
;;
c)
clean_only=1
;;
q)
quick_sanity=1
;;
b)
build_only=1
;;
l)
KEEP_LOGS=1
;;
A)
ARCH_NAME=$OPTARG
;;
B)
# Unlisted option. Exists only until migration to
# -P <platform> is complete
BSP_NAME=$OPTARG
BSP_SPECIFIED=1
;;
P)
PLATFORM_NAME=$OPTARG
PLATFORM_SPECIFIED=1
;;
\?)
${ECHO} "invalid option -$OPTARG"
help
exit 1
;;
:)
${ECHO} "missing argument for option -$OPTARG"
help
exit 1
;;
esac
done
# ensure no unexpected arguments have been provided
shift $((OPTIND-1))
if [ x$1 != x ] ; then
${ECHO} "unexpected argument $1"
exit 1
fi
# Do not permit the use of both -P and deprecated -B options
if [ x${BSP_SPECIFIED} != x ] && [ x${PLATFORM_SPECIFIED} != x ] ; then
${ECHO} "Do not use both the -P and the deprecated -B options"
exit 1;
fi
# handle case where we're just cleaning up
if [ ${clean_only} = 1 ] ; then
print_header
${ECHO} "Cleaning all regression test sample projects"
${ECHO}
clean_all_projects
${ECHO}
print_header
${ECHO} "${SCRIPT_NAME} cleanup completed successfully"
exit 0
fi
# set up environment info used to build projects
build_info_set
# set up project info used to build projects
proj_info_set
# build (and optionally execute) projects
PRJ_CLASS="regression"
let cur_proj=0
let build_proj=0
let run_proj=0
while [ ${cur_proj} -lt ${NUM_PROJ} ] ; do
let cur_proj++
print_header
# skip non-essential projects when doing quick sanity check
if [ ${quick_sanity} = 1 -a x${PRJ_FLAG[${cur_proj}]:1:1} != xq ] ; then
skip_project ${cur_proj}
continue
fi
# build project
build_project ${cur_proj}
let build_proj++
# skip non-executable projects (or when doing "build only")
if [ ${build_only} = 1 -o x${PLATFORM_FLAG[${cur_proj}]} = x ] ; then
continue
fi
# execute project
qemu_project ${cur_proj}
let run_proj++
done
${ECHO}
print_header
${ECHO} "${SCRIPT_NAME} completed successfully "\
"(built ${build_proj} projects and ran ${run_proj} of them)"
}
# invoke main routine passing all parameters passed to the script
#
main $*
# exit with success
exit 0