| #!/bin/bash | |
| # Copyright 2019 The Fuchsia Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| #### CATEGORY=Run, inspect and debug | |
| ### run fuchsia devtools | |
| ## usage: fx fdt [VERSION] | |
| ## VERSION Download (if necessary) and run a specific version of | |
| ## Fuchsia devtools. If not specified, the current version | |
| ## in //prebuilt will be used. | |
| ## VERSION is either a CIPD hash or "latest". | |
| # shellcheck source=/dev/null | |
| source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/vars.sh || exit $? | |
| # Fills $FX_DEVICE_NAME, $FX_DEVICE_ADDR, $FX_SSH_ADDR, and $FX_SSH_PORT if | |
| # there is one device currently attached. | |
| fx-export-device-address | |
| # Addresses are exported before set -e, so that if address resolution fails, | |
| # FX_DEVICE_NAME is still populated, which FDT will use to discover later. | |
| set -e | |
| PREBUILT_DIR="$FUCHSIA_DIR/prebuilt/gui_tools" | |
| DOWNLOAD_DIR="$FUCHSIA_DIR/prebuilt/gui_tools/download" | |
| if [[ $HOST_PLATFORM == "mac-x64" ]]; then | |
| BINARY="Fuchsia DevTools.app" | |
| ZIP="macos.zip" | |
| ZIP_OLD="macos/macos.zip" | |
| DOWNLOAD_ZIP="$DOWNLOAD_DIR/$ZIP" | |
| DOWNLOAD_ZIP_OLD="$DOWNLOAD_DIR/$ZIP_OLD" | |
| DOWNLOAD_UNZIP_DIR="$DOWNLOAD_DIR/fuchsia_devtools/macos-extracted" | |
| DOWNLOAD="$DOWNLOAD_UNZIP_DIR/$BINARY" | |
| PREBUILT_ZIP="$PREBUILT_DIR/$ZIP" | |
| PREBUILT_ZIP_OLD="$PREBUILT_DIR/$ZIP_OLD" | |
| PREBUILT_UNZIP_DIR="$PREBUILT_DIR/fuchsia_devtools/macos-extracted" | |
| PREBUILT="$PREBUILT_UNZIP_DIR/$BINARY" | |
| else | |
| BINARY_OLD="linux/fuchsia_devtools" | |
| PREBUILT_OLD="$PREBUILT_DIR/$BINARY_OLD" | |
| DOWNLOAD_OLD="$DOWNLOAD_DIR/$BINARY_OLD" | |
| BINARY="fuchsia_devtools" | |
| PREBUILT="$PREBUILT_DIR/$BINARY" | |
| DOWNLOAD="$DOWNLOAD_DIR/$BINARY" | |
| fi | |
| # Use prebuilt version if no arguments are passed. | |
| if [[ $# == 0 ]]; then | |
| if [[ $HOST_PLATFORM == "mac-x64" ]]; then | |
| temp_dir="${PREBUILT_UNZIP_DIR}-temp" | |
| # On the mac if we have a prebuilt zip then we are good to go. | |
| if [[ -e "${PREBUILT_ZIP}" ]]; then | |
| rm -rf "${PREBUILT_UNZIP_DIR}" | |
| mkdir -p "${temp_dir}" | |
| if ! unzip -qq "${PREBUILT_ZIP}" -d "${temp_dir}"; then | |
| rm -rf "${temp_dir}" | |
| echo "Prebuilt archive failed to extract." | |
| exit 1 | |
| fi | |
| mv "${temp_dir}" "${PREBUILT_UNZIP_DIR}" | |
| open "$PREBUILT" | |
| exit 0 | |
| elif [[ -e "${PREBUILT_ZIP_OLD}" ]]; then | |
| rm -rf "${PREBUILT_UNZIP_DIR}" | |
| mkdir -p "${temp_dir}" | |
| if ! unzip -qq "${PREBUILT_ZIP_OLD}" -d "${temp_dir}"; then | |
| rm -rf "${temp_dir}" | |
| echo "Prebuilt archive failed to extract." | |
| exit 1 | |
| fi | |
| mv "${temp_dir}" "${PREBUILT_UNZIP_DIR}" | |
| open "$PREBUILT" | |
| exit 0 | |
| fi | |
| else | |
| # else we are on linux | |
| # If the new prebuilt binary exists, run it. | |
| if [[ -x "$PREBUILT" ]]; then | |
| # Maybe add ` > /dev/null 2>&1 &` in the future. | |
| exec "$PREBUILT" | |
| # If the old prebuilt binary exists, run it. | |
| elif [[ $HOST_PLATFORM == "linux-x64" ]] && [[ -x "$PREBUILT_OLD" ]]; then | |
| # Maybe add ` > /dev/null 2>&1 &` in the future. | |
| exec "$PREBUILT_OLD" | |
| fi | |
| fi | |
| # We are on mac and don't have a zip file or we are linux and are missing | |
| # a binary with either the old or new name. This should only happen if the | |
| # jiri fetch for the prebuilt is not configured properly or has not run. | |
| cat << end | |
| To use fdt, JIRI should download it. Please run the following commands: | |
| jiri init -fetch-optional=fuchsia_devtools && jiri fetch-packages --local-manifest=true | |
| end | |
| exit 1; | |
| fi | |
| # If a specific version of FDT is requested, it can be downloaded directly. | |
| # Check that the fuchsia_devtools are downloaded and then run it. | |
| # If the version is already downloaded, it will not be re-downloaded. | |
| # Using "latest" or a CIPD hash. | |
| version="$1" | |
| shift | |
| # Check fuchsia/gui_tools/... first as that is the new location | |
| # shellcheck disable=SC2016 | |
| if ! echo 'fuchsia/gui_tools/fuchsia_devtools/${platform}' "$version" | cipd ensure -ensure-file - -root "$DOWNLOAD_DIR"; then | |
| # Fallback to checking fuchsia_internal/gui_tools... | |
| # shellcheck disable=SC2016 | |
| if ! echo 'fuchsia_internal/gui_tools/fuchsia_devtools/${platform}' "$version" | cipd ensure -ensure-file - -root "$DOWNLOAD_DIR"; then | |
| echo "Failed to download $version." | |
| exit 1 | |
| fi | |
| fi | |
| if [[ $HOST_PLATFORM == "mac-x64" ]]; then | |
| rm -rf "${DOWNLOAD_UNZIP_DIR}" | |
| temp_dir="${DOWNLOAD_UNZIP_DIR}-temp" | |
| if [[ -e "${DOWNLOAD_ZIP}" ]]; then | |
| mkdir -p "${temp_dir}" | |
| if ! unzip -qq "${DOWNLOAD_ZIP}" -d "${temp_dir}"; then | |
| rm -rf "${temp_dir}" | |
| echo "Downloaded archive for $version failed to extract." | |
| exit 1 | |
| fi | |
| mv "${temp_dir}" "${DOWNLOAD_UNZIP_DIR}" | |
| open "$DOWNLOAD" | |
| elif [[ -e "${DOWNLOAD_ZIP_OLD}" ]]; then | |
| mkdir -p "${temp_dir}" | |
| if ! unzip -qq "${DOWNLOAD_ZIP_OLD}" -d "${temp_dir}"; then | |
| rm -rf "${temp_dir}" | |
| echo "Downloaded archive for $version failed to extract." | |
| exit 1 | |
| fi | |
| mv "${temp_dir}" "${DOWNLOAD_UNZIP_DIR}" | |
| open "$DOWNLOAD" | |
| fi | |
| else | |
| # In the future, we should add the following to eliminate the terminal spam: | |
| # > /dev/null 2>&1 & | |
| # For the near term, using this for debug output is important. | |
| if [[ -x "$DOWNLOAD" ]]; then | |
| "$DOWNLOAD" "$@" | |
| elif [[ -x "$DOWNLOAD_OLD" ]]; then | |
| "$DOWNLOAD_OLD" "$@" | |
| else | |
| echo "Failed to find Fuchsia DevTools binary." | |
| exit 1 | |
| fi | |
| fi |