Chromium Code Reviews| Index: platform_tools/barelinux/bin/arm64_download |
| diff --git a/platform_tools/barelinux/bin/arm64_download b/platform_tools/barelinux/bin/arm64_download |
| new file mode 100755 |
| index 0000000000000000000000000000000000000000..598ee89452a013a78519e8897b289fe5be057c6d |
| --- /dev/null |
| +++ b/platform_tools/barelinux/bin/arm64_download |
| @@ -0,0 +1,167 @@ |
| +#!/bin/sh |
| + |
| +# Copyright 2014 Google Inc. |
| +# |
| +# Use of this source code is governed by a BSD-style license that can be |
| +# found in the LICENSE file. |
| + |
| + |
| +usage() { |
| + cat >&2 <<EOF |
| +arm64_download - this script downloads the Linaro's ARMv8 Aarch64 |
| +toolchain and minimal embedded Linux system as well as ARM's |
| +foundation model. The required files are mirrored on Google Cloud. |
| + |
| +If the files are already located in the working directory, the |
| +download can be skipped if the checksums match. |
| + |
| +The script then starts a emulated Arm64 Linux system in the |
| +background. After the boot is complete, you can SSH into the system |
| +at port 8022 via user@localhost. The SSH key will be downloaded into |
| +the working directery as well. |
| + |
| +Requires gsutil, xz, tar, and gunzip. |
| + |
| +Usage: |
| + $0 WORKING_DIRECTORY |
| + ssh-add WORKING_DIRECTORY/key |
| + ...wait... |
| + ssh -p 8022 user@localhost |
| +EOF |
| + return 1 |
| +} |
| + |
| +try() { |
| + # print an error on nonzero return code |
| + "$@" |
| + local ret=$? |
| + if [ $ret != 0 ] ; then |
| + echo "'$@' failed and returned ${ret}." >&2 |
| + return $ret |
| + fi |
| +} |
| + |
| +gsutil_check_get() { |
| + local gurl="$1" |
| + local file="$2" |
| + if ! [ -f "$file" ] || \ |
| + [ "$(gsutil stat "$gurl" | sed -n 's/\W*Hash (md5):\W*//p')" \ |
| + != "$(md5sum < "$file" | sed 's/\W*-//')" ] ; then |
| + try gsutil cp "$gurl" "$file" || return |
| + fi |
| +} |
| + |
| +download_compiler() { |
| + local working_dir="$1" |
| + local location="$2" |
| + local toolchain="$3" |
| + |
| + try cd "$working_dir" || return |
| + |
| + try gsutil_check_get "gs://${location}/${toolchain}.tar.xz" \ |
|
djsollen
2014/02/19 15:40:00
you can do this without requiring gsutil.
http://
hal.canary
2014/02/19 15:43:56
These files have access control.
|
| + "${working_dir}/${toolchain}.tar.xz" || return |
| + ( |
| + cd "$working_dir" |
| + xz --decompress --stdout < "${toolchain}.tar.xz" | tar xf - |
| + ) |
| + local dir="${working_dir}/${toolchain}" |
| + try test -d "$dir" || return |
| + try test -x "${dir}/bin/aarch64-linux-gnu-gcc" || return |
| + try test -x "${dir}/bin/aarch64-linux-gnu-g++" || return |
| +} |
| + |
| +download_runtime() { |
| + local working_dir="$1" |
| + local location="$2" |
| + local firmware="$3" |
| + local compressed_rootfs="$4" |
| + local compressed_foundation_model="$5" |
| + local keyfile="$6" |
| + |
| + try gsutil_check_get "gs://${location}/${firmware}" \ |
| + "${working_dir}/firmware" || return |
| + |
| + try gsutil_check_get "gs://${location}/${compressed_rootfs}" \ |
| + "${working_dir}/${compressed_rootfs}" || return |
| + |
| + try xz --decompress --stdout \ |
| + < "${working_dir}/${compressed_rootfs}" \ |
| + > "${working_dir}/rootfs" || return |
| + try test -f "${working_dir}/rootfs" || return |
| + |
| + try gsutil_check_get "gs://${location}/${compressed_foundation_model}" \ |
| + "${working_dir}/${compressed_foundation_model}" || return |
| + ( |
| + try cd "$working_dir" || return |
| + try gunzip -c "$compressed_foundation_model" | try tar xf - || return |
| + try test -d "Foundation_v8pkg" || return # Assert. |
| + ) |
| + |
| + try gsutil_check_get "gs://${location}/${keyfile}" \ |
| + "${working_dir}/key" || return |
| + chmod go= "${working_dir}/key" |
| +} |
| + |
| +start_arm64_image() { |
| + local working_dir="$1" |
| + local foundation_dir="${working_dir}/Foundation_v8pkg" |
| + local foundation="${foundation_dir}/models/Linux64_GCC-4.1/Foundation_v8" |
| + local firmware="${working_dir}/firmware" |
| + local rootfs="${working_dir}/rootfs" |
| + |
| + try test -d "$foundation_dir" || return |
| + try test -x "$foundation" || return |
| + try test -f "$firmware" || return |
| + try test -f "$rootfs" || return |
| + |
| + for PID in $(ps -o 'pid=' -C 'Foundation_v8') ; do |
| + kill $PID |
| + done |
| + |
| + DISPLAY='' nohup \ |
| + "$foundation" \ |
| + --image="${firmware}" \ |
| + --cores=4 \ |
| + --block-device="${rootfs}" \ |
| + --network="nat" \ |
| + --network-nat-subnet="192.168.31.0/24" \ |
| + --network-nat-ports="8022=22" \ |
| + > /dev/null 2>&1 & |
| + echo 'Listening to SSH on port 8022.' |
| +} |
| + |
| +arm64_download() { |
| + local working_directory="$1" |
| + local location="chromium-skia-gm/arm64env" |
| + try mkdir -p "$working_directory" || return |
| + |
| + try download_compiler \ |
| + "$working_directory" \ |
| + "$location" \ |
| + 'gcc-linaro-aarch64-linux-gnu-4.8-2013.12_linux' \ |
| + || return |
| + |
| + local rootfs='vexpress64-openembedded_lamp-armv8-gcc-4.8_20131215-557' |
| + try download_runtime \ |
| + "$working_directory" \ |
| + "$location" \ |
| + 'img-foundation.axf' \ |
| + "${rootfs}.img.CLEAN_AND_CONFIGURED.xz" \ |
| + 'FM000-KT-00035-r0p8-52rel06.tgz' \ |
| + 'CLEAN_AND_CONFIGURED_key' \ |
| + || return |
| + |
| + try start_arm64_image \ |
| + "$working_directory" \ |
| + || return |
| + |
| +} |
| + |
| +for command in gsutil xz tar gunzip; do |
| + try command -v "$command" > /dev/null || usage || exit |
| +done |
| + |
| +if [ -z "$1" ] ; then |
| + usage || exit |
| +fi |
| +try arm64_download "$1" || exit |