| #!/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 "$@" |