blob: 0bbf14037de04124eed72dcb15aabfca03d4897b [file] [log] [blame] [edit]
#!/bin/bash
set -ex
set -eo pipefail
CONTAINERS="ubuntu2004 fedora32"
SDK_ONLY=0
opt=$(getopt -o 's:Sab:p:c:hr' -- "$@")
if [ $? -ne 0 ] ; then
echo "Invalid arguments"
exit 1
fi
eval set -- "$opt"
unset opt
while true; do
case "$1" in
'-s')
shift
echo "SDK Cache dir: $1"
SDK_CACHE="$1"
;;
'-S')
echo "Build SDK Only"
SDK_ONLY=1
;;
'-a')
echo "Build firmware images for all the platforms"
PLATFORMS=""
;;
'-b')
shift
echo "Directory to bind to container: $1"
BIND="$1"
;;
'-p')
shift
echo "Build firmware images for the platforms: $1"
PLATFORMS="$1"
;;
'-c')
shift
echo "Build in container: $1"
CONTAINERS="$1"
;;
'-h')
echo "Usage: ./ci/build.sh [options]"
echo "-h Print this help and exit successfully."
echo "-a Build firmware images for all the platform defconfig's."
echo "-b DIR Bind DIR to container."
echo "-p List of comma separated platform names to build images for particular platforms."
echo "-s DIR SDK cache dir (must exist)."
echo "-S Build SDK only"
echo "-c Container to run in"
echo ""
echo "Note: set environment variables HTTP_PROXY and HTTPS_PROXY if a proxy is required."
echo ""
echo "Example:DOCKER_PREFIX=sudo ./ci/build.sh -a"
echo -e "\tDOCKER_PREFIX=sudo ./ci/build.sh -p firestone"
echo -e "\tDOCKER_PREFIX=sudo ./ci/build.sh -p garrison,palmetto,opal"
exit 1
;;
'-r')
echo "Build for release"
release_args="-r"
;;
'--')
shift
break
;;
*)
echo "Internal Error!"
exit 1
;;
esac
shift
done
if [ ! -d "$SDK_CACHE" ]; then
echo "Error: SDK Cache dir doesn't exist: $SDK_CACHE"
exit 1
fi
function run_docker
{
if [ -n "$BIND" ]; then
BINDARG="--mount=type=bind,src=${BIND},dst=${BIND}"
else
BINDARG="--mount=type=bind,src=${PWD},dst=${PWD}"
fi
$DOCKER_PREFIX docker run --init --cap-add=sys_admin --net=host --rm=true \
--user="${USER}" -w "${PWD}" "${BINDARG}" \
-t $1 $2
}
env
for distro in $CONTAINERS;
do
base_dockerfile=ci/Dockerfile/$distro.`uname -m`
if [ ! -f $base_dockerfile ]; then
echo "$distro not supported on $(uname -m).";
continue
fi
if [[ -n "$HTTP_PROXY" ]]; then
http_proxy=$HTTP_PROXY
HTTP_PROXY_ENV="ENV http_proxy $HTTP_PROXY"
fi
if [[ -n "$HTTPS_PROXY" ]]; then
https_proxy=$HTTPS_PROXY
HTTPS_PROXY_ENV="ENV https_proxy $HTTPS_PROXY"
fi
if [[ -n "$http_proxy" ]]; then
if [[ "$distro" == fedora30 ]]; then
PROXY="RUN echo \"proxy=${http_proxy}\" >> /etc/dnf/dnf.conf"
fi
if [[ "$distro" == ubuntu1804 ]]; then
PROXY="RUN echo \"Acquire::http::Proxy \\"\"${http_proxy}/\\"\";\" > /etc/apt/apt.conf.d/000apt-cacher-ng-proxy"
fi
fi
if [ ! -z ${DL_DIR+x} ]; then
DL_DIR_ENV="ENV DL_DIR $DL_DIR"
fi
if [ ! -z ${CCACHE_DIR+x} ]; then
CCACHE_DIR_ENV="ENV CCACHE_DIR $CCACHE_DIR"
fi
Dockerfile=$(head -n1 $base_dockerfile; echo ${PROXY}; tail -n +2 $base_dockerfile; cat << EOF
${PROXY}
RUN useradd -d ${HOME} -m -u ${UID} ${USER}
ENV HOME ${HOME}
${HTTP_PROXY_ENV}
${HTTPS_PROXY_ENV}
${DL_DIR_ENV}
${CCACHE_DIR_ENV}
EOF
)
$DOCKER_PREFIX docker build --network=host -t openpower/op-build-$distro - <<< "${Dockerfile}"
if [ -n "$PLATFORMS" ]; then
platform_args="-p $PLATFORMS"
else
platform_args=""
fi
if [ $SDK_ONLY -ne 0 ]; then
sdk_args="-S"
else
sdk_args=""
fi
run_docker openpower/op-build-$distro "./ci/build-all-defconfigs.sh -o `pwd`/output-$distro ${platform_args} ${release_args} ${sdk_args} -s $SDK_CACHE"
if [ $? -ne 0 ]; then
exit $?;
fi
done;