| #!/bin/bash |
| # Copyright 2018 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=Software delivery |
| ### build Fuchsia and push to device |
| |
| ## usage: fx run [--no-build|[NINJA OPTION,...]] [--no-pkg-check] [--no-kill] TARGET [ARG,...] |
| ## |
| ## Build ALL targets. |
| ## Execute 'fx shell killall TARGET'. |
| ## Execute 'fx shell run TARGET [ARGS]. |
| ## |
| ## --no-build do not execute a build |
| ## --no-pkg-check do not check for a package server |
| ## --no-kill do not kill all instances of matching components |
| ## |
| ## NINJA OPTION |
| ## The following ninja options are passed to the build if invoked: |
| ## -C, -f, -j, -k, -l, -t, -w. |
| ## See fx ninja --help for more information on these flags. |
| ## |
| ## TARGET is any form that 'run' on the target device accepts, as such it may |
| ## be a package url, or a non-ambiguous short-form. |
| ## ARG is passed to target without interpretation. All arguments after TARGET |
| ## are passed to TARGET. |
| |
| set -e |
| |
| source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/vars.sh || exit $? |
| source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/updates.sh || exit $? |
| fx-config-read |
| |
| function main { |
| local ninja_args=() |
| local targets=() |
| local build=true |
| local pkg_check=true |
| local kill_components=true |
| while (($#)); do |
| case "$1" in |
| --no-build) |
| build=false |
| ;; |
| --no-pkg-check) |
| pkg_check=false |
| ;; |
| --no-kill) |
| kill_components=false |
| ;; |
| -C|-f|-j|-k|-l|-t|-w) |
| ninja_args+=("$1") |
| shift |
| ninja_args+=("$1") |
| ;; |
| -n|-v) |
| ninja_args+=("$1") |
| ;; |
| *) |
| target+=("$1") |
| shift |
| break |
| esac |
| shift |
| done |
| |
| if $build; then |
| fx-command-run build "${ninja_args[@]}" |
| fi |
| |
| if $pkg_check; then |
| check-for-package-server || return 1 |
| fi |
| |
| local r=0 |
| # As running components are typically named after their cmx, the |
| # basename here avoids the case where a user has provided a full |
| # URL such as `fx run |
| # fuchsia-pkg://fuchsia.com/rolldice#meta/rolldice.cmx`. This |
| # strategy could be improved if implemented in a more featureful |
| # environment. |
| if $kill_components; then |
| echo >&2 "Stopping ${target} with killall $(basename "${target}") ..." |
| fx-command-run shell killall "$(basename "${target}")" || true |
| fi |
| echo >&2 "Running ${target} with run "${target}" ..." |
| fx-command-run shell run "${target}" "$@" |
| ((r += $?)) |
| echo >&2 |
| fx-info "If this component exposes protocols, you may want to restart its clients." |
| fx-info "Use `ffx session restart` to restart the session or `ffx component reload`" |
| fx-info "to reload a component." |
| return r |
| } |
| |
| main "$@" |