| #!/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 characterize kernel footprint |
| |
| # 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 |
| |
| # Additional commands used in script |
| SIZE="${ZEPHYR_BASE}/scripts/truesize" |
| |
| # 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/footprint_chk.data |
| |
| # print script usage |
| # |
| help() { |
| cat << EOF |
| |
| Usage : ${SCRIPT_NAME} [-hHcqb] [-A <arch>] [-P <platform>] |
| -h display this help message |
| -H display more detailed documentation |
| -c just clean projects |
| -q just do quick sanity check |
| -b just build projects |
| -A build projects for the specified architecture |
| -P build projects for the specified platform |
| |
| EOF |
| } |
| |
| # print long help |
| # |
| long_help() { |
| cat << EOF |
| |
| Script to determine kernel footprint characteristics. |
| |
| The script builds nanokernel and microkernel footprint |
| projects for their various configurations and measures the size of the |
| resulting images. |
| |
| EOF |
| } |
| |
| # main routine activates a random host-related microkernel demo project |
| # |
| main() { |
| # set up default behaviors |
| clean_only=0 |
| quick_sanity=0 |
| build_only=0 |
| ARCH_NAME="" |
| BSP_NAME="" |
| PLATFORM_NAME="" |
| |
| # process command options |
| # |
| # note: must handle all options that can be passed in by "sanity_chk", |
| # including ones that aren't applicable to this script |
| while getopts ":hHcqblA: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) |
| # do nothing |
| ;; |
| 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 footprint 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 measure footprint of) projects |
| PRJ_CLASS="footprint" |
| let cur_proj=0 |
| let build_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++ |
| |
| # report footprint info (unless doing "build only") |
| if [ ${build_only} = 0 ] ; then |
| ${ECHO} |
| ${ECHO} "Footprint for ${PRJ_NAME[${cur_proj}]}" |
| ${ECHO} |
| ${ECHO} "target: ${PLATFORM[${cur_proj}]}" |
| ${ECHO} "arguments: ${PRJ_ARGS[$cur_proj]}" |
| ${ECHO} |
| ${SIZE} outdir/*.elf |
| ${ECHO} |
| fi |
| done |
| |
| ${ECHO} |
| print_header |
| ${ECHO} "${SCRIPT_NAME} completed successfully "\ |
| "(built ${build_proj} projects)" |
| } |
| |
| # invoke main routine passing all parameters passed to the script |
| # |
| main $* |
| |
| # exit with success |
| exit 0 |