blob: d27b38265294c84a98457f736c1215b9e6f689f3 [file] [log] [blame]
#!/bin/bash
# Copyright 2015 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# This script builds mali-drivers for a list of boards. It uploads the binaries
# to Google storage and makes them available in the public repository.
. "$(dirname "$0")/common.sh" || exit 1
DEFINE_boolean dryrun ${FLAGS_FALSE} \
"dry run, don't upload anything and don't delete temporary dirs" n
# Parse command line.
FLAGS "$@" || exit 1
eval set -- "${FLAGS_ARGV}"
PN=mali-drivers
PNBIN=${PN}-bin
# Build board names.
BOARDS=(
daisy
daisy_freon
peach_pit
peach_pit-freon
veyron_jerry
veyron_jaq
)
# Suffixes for tarball name.
SUFFIXES=(
daisy
daisy-freon
peach
peach-freon
veyron
veyron-x11
)
# Board names for overlay with mali-drivers-bin.ebuild.
OBOARDS=(
daisy
daisy_freon
peach
peach_pit-freon
veyron
X11
)
# Overlay paths for each board.
OPATHS=(
overlay-daisy
overlay-variant-daisy-freon
overlay-peach
overlay-variant-peach-pit-freon
overlay-veyron
X11
)
# Script must run inside the chroot
restart_in_chroot_if_needed "$@"
create_run_script() {
local script="$1"
local outputtarball="$2"
cat > "${script}" <<\__HDREOF__
#!/bin/sh
#
# Copyright 2015 The Chromium OS Authors. All rights reserved.
#
# Usage is subject to the enclosed license agreement.
# To be generated by Makeself 1.5.3
skip=@HDRSZ@
echo
echo The license for this software will now be displayed.
echo You must agree to this license before using this software.
echo
more << __EOF__
__HDREOF__
cat "${SRC_ROOT}/third_party/chromiumos-overlay/licenses/Google-TOS" >> "${script}"
echo __EOF__ >> "${script}"
cat >> "${script}" <<\__BODYEOF__
if [ $? != 0 ]; then
echo "ERROR: Couldn't display license file" 1>&2
exit 1
fi
echo
printf 'Type "y" if you agree to the terms of the license: '
read typed
if [ "${typed}" != y ]; then
echo
echo "You didn't accept the license. Extraction aborted."
exit 2
fi
echo
tail -n +${skip} "$0" | tar xjv 2>/dev/null
if [ $? -ne 0 ]; then
echo
echo "ERROR: Couldn't extract files." 1>&2
exit 3
else
echo
echo "Files extracted successfully."
fi
exit 0
__BODYEOF__
local hdrsize=$(wc -l < "${script}")
sed -i "s/@HDRSZ@/$(( hdrsize + 1 ))/g" "${script}"
cat "${outputtarball}" >> "${script}"
chmod +x "${script}"
du -b "${script}"
}
# arguments:
# $1 board name (Chrome OS board name to build)
# $2 binary package suffix (suffix added to tar package name)
# $3 overlay board name
# $4 overlay path
build_mali_board() {
local board=$1
local suffix=$2
local oboard=$3
local opath=$4
echo "Board is ${board}"
if [[ "$oboard" != "X11" ]]; then
setup_board --board="${oboard}"
fi
setup_board --board="${board}"
if [[ $? != 0 ]]; then
die_notrace "Setting up board ${board} failed."
fi
# Make sure we are not building -9999 ebuild.
# This could fail if cros_workon is already stopped so ignore return code.
cros_workon --board="${board}" stop ${PN}
if [[ "$oboard" == "X11" ]]; then
echo "Building special X11 package"
USE=X emerge-${board} ${PN}
else
emerge-${board} ${PN}
fi
if [[ $? != 0 ]]; then
die_notrace "Emerging ${PN} for ${board} failed."
fi
local pv=$("equery-${board}" -q list -p -o --format="\$fullversion" ${PN} | sort | head -n 1)
local category=$("equery-${board}" -q list -p -o --format="\$category" ${PN} | sort | head -n 1)
local inputtarball="/build/${board}/packages/${category}/${PN}-${pv}.tbz2"
local outputtarball="${PN}-${suffix}-${pv}.tbz2"
local script="${PN}-${suffix}-${pv}.run"
local gspath="gs://chromeos-localmirror/distfiles"
echo "Current version is ${pv}"
echo "Input tarball is ${inputtarball}"
echo "Output tarball is ${outputtarball}"
echo "Script is ${script}"
local temp=`mktemp -d`
echo "Temp dir is ${temp}"
pushd "${temp}" >& /dev/null
mkdir work
if [[ $? != 0 ]]; then
die_notrace "Couldn't create work directory."
fi
tar -C work -xpjvf "${inputtarball}"
if [[ $? != 0 ]]; then
die_notrace "Couldn't decompress package tarball ${inputtarball}."
fi
tar -C work --exclude=usr/lib/debug -cpjvf "${outputtarball}" ./
if [[ $? != 0 ]]; then
die_notrace "Couldn't create ${outputtarball}."
fi
create_run_script "${script}" "${outputtarball}"
echo "Uploading tarball to ${gspath}/${script}"
if [[ ${FLAGS_dryrun} -eq ${FLAGS_TRUE} ]]; then
echo "Would run: gsutil cp -a public-read \"${script}\" \"${gspath}/${script}\""
else
gsutil cp -a public-read "${script}" "${gspath}/${script}"
if [[ $? != 0 ]]; then
die_notrace "Couldn't upload ${script} to ${gspath}/${script}."
fi
rm -rf "${temp}"
fi
if [[ "${oboard}" != "X11" ]]; then
local pvbin=$("equery-${board}" -q list -p -o --format="\$fullversion" ${PNBIN} | sort | head -n 1)
echo "Current version is ${pv} current binary version is ${pvbin}"
# Uprev ebuild in git if it exists.
if [[ -d "${SRC_ROOT}/overlays/${opath}/${category}/${PNBIN}" ]]; then
cd "${SRC_ROOT}/overlays/${opath}/${category}/${PNBIN}"
# following git commands may fail if they have been issued previously
git checkout -b malidriverbinupdate m/master
git mv "${PNBIN}-${pvbin}.ebuild" "${PNBIN}-${pv}.ebuild"
"ebuild-${oboard}" "${PNBIN}-${pv}.ebuild" manifest
fi
fi
popd >& /dev/null
}
main() {
local idx
local typed
echo 'This script builds mali-drivers for a list of boards. It uploads the'
echo 'binaries to Google storage and makes them available in the public'
echo 'repository. It expects you have configured gsutil.'
printf 'Type "y" if you know what you are doing and want to go ahead: '
read typed
if [[ "${typed}" != y ]]; then
echo
echo "Good choice."
exit 2
fi
if [[ ! -f "${HOME}/.boto" ]]; then
die_notrace "You did not configure gsutil after all."
fi
for (( idx = 0; idx < ${#BOARDS[@]}; ++idx )); do
build_mali_board ${BOARDS[${idx}]} ${SUFFIXES[${idx}]} ${OBOARDS[${idx}]} ${OPATHS[${idx}]}
done
}
main "$@"