Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(327)

Unified Diff: platform_tools/barelinux/bin/arm64_download

Issue 152513007: Build Skia for a bare-bones embedded Linux system. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: again Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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" \
+ "${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

Powered by Google App Engine
This is Rietveld 408576698