incubator-nuttx/tools/ci/cibuild.sh

184 lines
3.7 KiB
Bash
Executable File

#!/usr/bin/env bash
############################################################################
# tools/ci/cibuild.sh
#
# SPDX-License-Identifier: Apache-2.0
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership. The
# ASF licenses this file to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance with the
# License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
############################################################################
set -e
set -o xtrace
CID=$(cd "$(dirname "$0")" && pwd)
CIWORKSPACE=$(cd "${CID}"/../../../ && pwd -P)
CIPLAT=${CIWORKSPACE}/nuttx/tools/ci/platforms
nuttx=${CIWORKSPACE}/nuttx
apps=${CIWORKSPACE}/apps
os=$(uname -s)
if [ -f /etc/os-release ]; then
osname=$(grep "^ID=" /etc/os-release | cut -d'=' -f2 | tr -d '"')
else
osname=${os}
fi
function to_do {
echo ""
echo "NuttX TODO: $1"
echo "The $1 platform does not appear to have been added to this project."
echo ""
exit 1
}
function install_tools {
export NUTTXTOOLS=${CIWORKSPACE}/tools
mkdir -p "${NUTTXTOOLS}"
case ${osname} in
alpine)
to_do "alpine"
;;
arch)
to_do "arch"
;;
CYGWIN*)
to_do "CYGWIN"
;;
debian)
to_do "debian"
;;
fedora)
to_do "fedora"
;;
freebsd)
to_do "freebsd"
;;
Darwin)
"${CIPLAT}"/darwin.sh
;;
Linux)
"${CIPLAT}"/linux.sh
;;
manjaro)
to_do "manjaro"
;;
msys2)
"${CIPLAT}"/msys2.sh
;;
ubuntu)
"${CIPLAT}"/ubuntu.sh
;;
*)
to_do "unknown"
;;
esac
source "${CIWORKSPACE}"/tools/env.sh
}
function usage {
echo ""
echo "USAGE: $0 [-i] [-s] [-c] [-*] <testlist>"
echo " $0 -h"
echo ""
echo "Where:"
echo " -i install tools"
echo " -s setup repos"
echo " -c enable ccache"
echo " -* support all options in testbuild.sh"
echo " -h will show this help text and terminate"
echo " <testlist> select testlist file"
echo ""
exit 1
}
function enable_ccache {
export CCACHE_DIR="${CIWORKSPACE}"/tools/ccache
}
function setup_repos {
pushd .
if [ -d "${nuttx}" ]; then
cd "${nuttx}"; git pull
else
git clone https://github.com/apache/nuttx.git "${nuttx}"
cd "${nuttx}"
fi
git log -1
if [ -d "${apps}" ]; then
cd "${apps}"; git pull
else
git clone https://github.com/apache/nuttx-apps.git "${apps}"
cd "${apps}"
fi
git log -1
popd
}
function run_builds {
local ncpus
if [ "X$osname" == "XDarwin" ]; then
ncpus=$(sysctl -n hw.ncpu)
else
ncpus=$(grep -c ^processor /proc/cpuinfo)
fi
options+="-j ${ncpus}"
for build in "${builds[@]}"; do
"${nuttx}"/tools/testbuild.sh ${options} -e "-Wno-cpp -Werror" "${build}"
done
if [ -d "${CCACHE_DIR}" ]; then
# Print a summary of configuration and statistics counters
ccache -s
fi
}
if [ -z "$1" ]; then
usage
fi
while [ -n "$1" ]; do
case "$1" in
-h )
usage
;;
-i )
install_tools
;;
-c )
enable_ccache
;;
-s )
setup_repos
;;
-* )
options+="$1 "
;;
* )
builds=( "$@" )
break
;;
esac
shift
done
run_builds