[fx][set] Switch to set2
After this CL, "fx set" runs the new set command, which was previously
called "set2". The old set command is available as "fx oldset".
Change-Id: Ic524231d86f3d3846a4a6b652367215601322816
diff --git a/docs/development/benchmarking/running_on_ci.md b/docs/development/benchmarking/running_on_ci.md
index 82639b8..4ac0ebc 100644
--- a/docs/development/benchmarking/running_on_ci.md
+++ b/docs/development/benchmarking/running_on_ci.md
@@ -46,11 +46,10 @@
successfully. Run the following in a shell:
```sh
-fx set-petal $layer
jiri update -gc
# Benchmarks are not included in production packages, so use $layer/packages/kitchen_sink
# or they will not be built.
-fx set <arch> --monolith $layer/packages/kitchen_sink
+fx set core.<board> --with //bundles:kitchen_sink
fx full-build && fx run
```
diff --git a/docs/development/build/build_information.md b/docs/development/build/build_information.md
index a2f9b34..667b949 100644
--- a/docs/development/build/build_information.md
+++ b/docs/development/build/build_information.md
@@ -10,16 +10,16 @@
`/config/build-info/product`
## Description
-String describing the product configuration used at build time. Defaults to the value passed to “--products” in fx set.
-Example: “garnet/products/default.gni”, “topaz/products/dashboard.gni”
+String describing the product configuration used at build time. Defaults to the value passed as PRODUCT in fx set.
+Example: “products/core.gni”, “products/workstation.gni”
# Board
## Location
`/config/build-info/board`
## Description
-String describing the board configuration used at build time to specify the target hardware. Defaults to the value passed to “--boards” in fx set.
-Example: “garnet/boards/x64.gni”
+String describing the board configuration used at build time to specify the target hardware. Defaults to the value passed as BOARD in fx set.
+Example: “boards/x64.gni”
# Version
## Location
diff --git a/docs/development/build/overview.md b/docs/development/build/overview.md
index 12d36ef..325707d 100644
--- a/docs/development/build/overview.md
+++ b/docs/development/build/overview.md
@@ -81,19 +81,17 @@
Then configure the content of the generated image by choosing the top level
product to build:
```
-# --product can be omitted to use the defaults, which is
-# $layer/products/default.gni.
-$ buildtools/gn gen out/x64 --args='import("//products/core.gni") monolith+=["garnet/packages/my_stuff"]'
+$ buildtools/gn gen out/default --args='import("//boards/x64.gni") import("//products/core.gni")'
```
-This will create an `out/x64` directory containing Ninja files.
+This will create an `out/default` directory containing Ninja files.
The equivalent fx set command is:
```
-$ scripts/fx set x64 --product core --monolith garnet/packages/my_stuff
+$ scripts/fx set core.x64
```
-For a list of all GN build arguments, run `buildtools/gn args out/x64 --list`.
+For a list of all GN build arguments, run `buildtools/gn args out/default --list`.
For documentation on the `select_variant` argument, see [Variants](variants.md).
### C
@@ -136,13 +134,13 @@
### Inspecting the content of a GN target
```bash
-$ buildtools/gn desc out/x64 //path/to/my:target
+$ buildtools/gn desc out/default //path/to/my:target
```
### Finding references to a GN target
```bash
-$ buildtools/gn refs out/x64 //path/to/my:target
+$ buildtools/gn refs out/default //path/to/my:target
```
### Referencing targets for the build host
@@ -165,7 +163,7 @@
If a target is defined in a GN build file as `//foo/bar/blah:dash`, that target
(and its dependencies) can be built with:
```bash
-$ buildtools/ninja -C out/x64 -j64 foo/bar/blah:dash
+$ buildtools/ninja -C out/default -j64 foo/bar/blah:dash
```
Note that this only works for targets in the default toolchain.
@@ -180,7 +178,7 @@
You can also browse the set of Ninja targets currently defined in your output
directory with:
```bash
-$ buildtools/ninja -C out/x64 -t browse
+$ buildtools/ninja -C out/default -t browse
```
Note that the presence of a Ninja target does not mean it will be built - for
that it needs to depend on the “default” target.
diff --git a/docs/development/build/variants.md b/docs/development/build/variants.md
index 27271e3..52ed629 100644
--- a/docs/development/build/variants.md
+++ b/docs/development/build/variants.md
@@ -19,15 +19,15 @@
Using `fx set`:
```sh
-fx set x64 --variant={host_asan,asan/cat,asan/ledger} --board=topaz/boards/x64.gni
+fx set core.x64 --variant={host_asan,asan/cat,asan/ledger}
```
Alternatively, you can add or modify the variants on an existing build by
editing the GN args (substituting your build's GN output directory
-for `out/x64` as necessary):
+for `out/default` as necessary):
```sh
-./buildtools/gn args out/x64
+./buildtools/gn args out/default
```
That command will bring up an editor. Append to that file:
diff --git a/docs/development/languages/rust/README.md b/docs/development/languages/rust/README.md
index b666e0f..3899f9d 100644
--- a/docs/development/languages/rust/README.md
+++ b/docs/development/languages/rust/README.md
@@ -19,7 +19,7 @@
cargo, you can set the `rustc_prefix` argument to `fx set`, like this:
```
-fx set x64 --release --args "rustc_prefix=\"/path/to/bin/dir\""
+fx set core.x64 --release --args "rustc_prefix=\"/path/to/bin/dir\""
```
## Cargo.toml
diff --git a/docs/development/sdk/README.md b/docs/development/sdk/README.md
index 52086ed..2414964 100644
--- a/docs/development/sdk/README.md
+++ b/docs/development/sdk/README.md
@@ -107,13 +107,13 @@
For example, to build the topaz SDK for x64:
```sh
-$ fx set x64 --product sdk_image --available //topaz/packages/sdk:topaz \
+$ fx set sdk_image.x64 --with //topaz/packages/sdk:topaz \
--args build_sdk_archives=true
$ fx build-zircon
$ fx build topaz/public/sdk:topaz
```
-Then the archive file will be in `out/x64/sdk/archive/topaz.tar.gz`.
+Then the archive file will be in `out/default/sdk/archive/topaz.tar.gz`.
### Adding content to an SDK
diff --git a/docs/development/workflows/build_and_pave_quickstart.md b/docs/development/workflows/build_and_pave_quickstart.md
index 2ea1eb9..ee5dfc2 100644
--- a/docs/development/workflows/build_and_pave_quickstart.md
+++ b/docs/development/workflows/build_and_pave_quickstart.md
@@ -8,8 +8,10 @@
The initial build and deploy workflow using `fx` is as follows:
-1. `fx set <arch>`
- Configures the build for <arch>: one of [x64, arm64].
+1. `fx set core.x64`
+ Configures the build to build the "core" product on a generic x64 board.
+ See `fx list-products` and `fx list-boards` for lists of available products
+ and boards, respectively.
1. `fx full-build`
Builds Zircon, then the rest of Fuchsia.
1. `fx mkzedboot <usb_drive_device_path>`
diff --git a/docs/development/workflows/fx.md b/docs/development/workflows/fx.md
index bf7bf07..350b3d0 100644
--- a/docs/development/workflows/fx.md
+++ b/docs/development/workflows/fx.md
@@ -53,7 +53,6 @@
with this:
* `fx set` [configure a build](#configure-a-build)
-* `fx set2` [configure a build (BETA)](#configure-a-build-beta)
* `fx full-build` [execute a build](#execute-a-build)
* `fx flash ; fx mkzedboot` [flash a target; or prepare a zedboot USB key](#flash-a-board)
* `fx serve` [serve a build](#serve-a-build)
@@ -72,15 +71,6 @@
## Configure a build
-Armed with our above choices (if you didn't read above, do so now), you are
-ready to configure your build:
-
-```shell
-$ fx set x64 --product workstation --board x64 --preinstall bundles/tools --available bundles/tests
-```
-
-## Configure a build (BETA)
-
*We are working on a new command for configuring a build. This section describes
the new command, which is currently being beta-tested.*
@@ -88,7 +78,7 @@
ready to configure your build:
```shell
-$ fx set2 workstation.x64 --with //bundles:tools,//bundles:tests
+$ fx set workstation.x64 --with //bundles:tools,//bundles:tests
```
This command stores the configuration in an `args.gn` file in the build
@@ -449,11 +439,11 @@
setup as follows:
```shell
-$ fx set x64 out/workstation --product workstation
+$ fx set workstation.x64 --build-dir out/workstation
$ fx full-build
$ fx set-device <workstation-node-name>
-$ fx set arm64 out/core --product core
+$ fx set core.arm64 --build-dir out/core
$ fx full-build
$ fx set-device <core-node-name>
@@ -465,14 +455,6 @@
$ fx shell
```
-If you are using the `fx set2` command, which will eventually replace `fx set`,
-the corresponding commands are below:
-
-```shell
-$ fx set2 workstation.x64 --build-dir out/workstation
-$ fx set2 core.arm64 --build-dir out/core
-```
-
Additionally, for users who wish to execute a command against a single
Fuchsia device from the current default build directory, as a one-off
command, the `fx` global flag `-d` allows overriding the target node name for
diff --git a/docs/development/workflows/libfuzzer.md b/docs/development/workflows/libfuzzer.md
index fa41c07..4ace92c 100644
--- a/docs/development/workflows/libfuzzer.md
+++ b/docs/development/workflows/libfuzzer.md
@@ -8,7 +8,7 @@
* Fuchsia: Add a [`fuzz-target`][gn fuzz target] and [`fuzz-package`][gn fuzz package] to the
library's BUILD.gn
* Zircon: Add a [`fuzztest`](#q-how-do-i-create-a-zircon-fuzzer-) to the library's rules.mk.
-1. `fx set --fuzz-with asan`, `fx build`, and boot.
+1. `fx set core.x64 --fuzz-with asan`, `fx build`, and boot.
1. Run `fx fuzz list` to display fuzzers.
1. Run `fx fuzz start <fuzzer>` to start a fuzzer.
1. Run `fx fuzz check <fuzzer>` to see if the fuzzer found crashes.
@@ -260,7 +260,7 @@
instrument them for fuzzing with an appropriate sanitizer. The easiest way to achieve this is using
the `--fuzz-with <sanitizer>` flag with `fx set`, e.g:
```
-$ fx set x64 --fuzz-with asan --monolith garnet/packages/tests/all
+$ fx set core.x64 --fuzz-with asan --with //bundles:tests
$ fx full-build
```
@@ -328,7 +328,7 @@
include the correct dependencies for you Zircon fuzzer in a Fuchsia build:
```sh
-$ fx set x64 --fuzz-with asan --monolith garnet/packages/garnet --monolith garnet/packages/tests/zircon
+$ fx set core.x64 --fuzz-with asan --with //garnet/packages/tests:zircon
$ fx full-build
$ fx fuzz zbi
```
diff --git a/docs/development/workflows/paving.md b/docs/development/workflows/paving.md
index 8ba99d9..dc64ccf 100644
--- a/docs/development/workflows/paving.md
+++ b/docs/development/workflows/paving.md
@@ -99,4 +99,4 @@
booting. By default the system boots locally with a 1-second delay in Gigaboot
to allow you to select a different mode. To change this default to Zedboot,
supply the `always_zedboot` argument when calling your set command, for example
-`fx set <target_type> --args "always_zedboot=true"`.
+`fx set <goal> --args "always_zedboot=true"`.
diff --git a/docs/development/workflows/workflow_tips_and_faq.md b/docs/development/workflows/workflow_tips_and_faq.md
index b5788ad..6442a82 100644
--- a/docs/development/workflows/workflow_tips_and_faq.md
+++ b/docs/development/workflows/workflow_tips_and_faq.md
@@ -280,20 +280,20 @@
```shell
# We start with bringup, because it's small, but it doesn't matter which you start with:
-$ fx set x64 out/bringup.x64 --product bringup
+$ fx set bringup.x64 out/bringup.x64
$ fx --dir=out/bringup.x64 full-build
```
Now you have Zircon built, you can start building several other builds concurrently:
```shell
-$ fx set x64 out/workstation.x64 --product workstation
+$ fx set workstation.x64 out/workstation.x64
$ fx --dir out/workstation.x64 full-build > workstation.x64.build.log &
-$ fx set arm64 out/core.vim2 --product core
+$ fx set core.arm64 out/core.vim2
$ fx --dir out/core.vim2 full-build > core.vim2.build.log &
-$ fx set arm64 out/workstation.vim2 --product workstation
+$ fx set workstation.arm64 out/workstation.vim2
$ fx --dir out/workstation.vim2 full-build > workstation.vim2.build.log &
```
diff --git a/docs/getting_started.md b/docs/getting_started.md
index 394d002..42c74be 100644
--- a/docs/getting_started.md
+++ b/docs/getting_started.md
@@ -54,7 +54,7 @@
available as `scripts/fx`.
```
-fx set x64 --available bundles/kitchen_sink
+fx set core.x64 --with //bundles:kitchen_sink
fx full-build
```
@@ -79,9 +79,9 @@
Run `fx set` to see a list of build options. Some examples:
```
-fx set x64 # x64 debug build
-fx set arm64 # arm64 debug build
-fx set x64 --release # x64 release build
+fx set workstation.x64 # x64 debug build
+fx set core.arm64 # arm64 debug build
+fx set core.x64 --release # x64 release build
```
#### [optional] Accelerate builds with `ccache` and `goma`
diff --git a/scripts/devshell/list-boards b/scripts/devshell/list-boards
index 1ebe030..56e293d 100755
--- a/scripts/devshell/list-boards
+++ b/scripts/devshell/list-boards
@@ -8,7 +8,7 @@
## usage: fx list-boards
##
## Lists all boards that are available for building. These are names that
-## can be passed to `fx set --board`
+## can be passed to `fx set`
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/vars.sh || exit $?
diff --git a/scripts/devshell/list-products b/scripts/devshell/list-products
index 9c462ee..17f4dbd 100755
--- a/scripts/devshell/list-products
+++ b/scripts/devshell/list-products
@@ -8,7 +8,7 @@
## usage: fx list-products
##
## Lists all products that are available for building. These are names that
-## can be passed to `fx set --product`
+## can be passed to `fx set`
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/vars.sh || exit $?
diff --git a/scripts/devshell/oldset b/scripts/devshell/oldset
new file mode 100755
index 0000000..b6be026
--- /dev/null
+++ b/scripts/devshell/oldset
@@ -0,0 +1,489 @@
+#!/bin/bash
+# Copyright 2017 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.
+
+### set up a build directory
+
+## usage: fx oldset TARGET [OUTDIR]
+## [--board NAME|PATH]
+## [--product NAME|PATH]
+## [--monolith PATH]
+## [--preinstall PATH]
+## [--available PATH]
+## [--netboot]
+## [--args ARG] [--help-args [ARG]] [--variant VARIANT]
+## [--goma|--no-goma] [--no-ensure-goma]
+## [--goma-dir DIR]
+## [--ccache|--no-ccache]
+## [--release]
+## [--zircon-arg ARG]
+##
+## where TARGET is x64 or arm64
+##
+## OUTDIR is the directory where the build output goes.
+## If it begins with `//` or `out/` then it's taken as relative to FUCHSIA_DIR.
+## Otherwise it should be an absolute path or a path relative to the current
+## working directory that winds up in `FUCHSIA_DIR/out`.
+## It defaults to `out/TARGET`.
+##
+## This is a wrapper around running `gn gen --check OUTDIR --args ...`.
+## If GN fails with an error, `fx oldset` does not change anything.
+## If GN succeeds, this also points subsequent `fx` commands at OUTDIR,
+## just as `fx use` does and ensures Goma is ready (if enabled).
+##
+## NAME|PATH can be provided as arguments to --board and --product. In the
+## case of NAME the name is searched for in //layer/board/NAME.gni, otherwise it
+## is treated as a PATH.
+##
+## optional arguments:
+## --board Use the given board target definition. Board
+## configurations are used to modulate hardware specific
+## behavior, such as configuring the set of drivers
+## included, or adding peripheral specific configurations.
+## If no board is given, a default board for the architecture
+## is selected from the current layer, e.g.
+## garnet/boards/x64.gni.
+## --product Include the given product in the build. Defaults to
+## the default product for the current layer (e.g.,
+## "garnet/products/default.gni" for the Garnet layer).
+## Product configurations define a set of packages to be
+## included in the monolith, preinstall and available
+## package sets, as well as product oriented configurations.
+## --monolith Additional packages to be built and included in the
+## monolithic system image. Monolith is the set of packages
+## that make up an OTA image.
+## If the --monolith argument is given multiple times,
+## all the specified packages are included in this set.
+## These packages are added to the available set defined
+## by the board and product specifications.
+## --preinstall Additional packages to be built and included in the
+## system image alongside the monolithic system image.
+## Packages in preinstall are not part of OTA updates,
+## instead they are updated dynamically.
+## If the --preinstall argument is given multiple times,
+## all the specified packages are included in this set.
+## These packages are added to the available set defined
+## by the board and product specifications.
+## --available Additional packages to be built and included in the
+## set of packages available for pushing dynamically.
+## If the --available argument is given multiple times,
+## all the specified available are included in this set.
+## These packages are added to the available set defined
+## by the board and product specifications.
+## --netboot Ensure that a network ramboot image is always built.
+## --variant Pass a `select_variant=[VARIANT*,...]` GN build argument
+## collecting all the --variant arguments in order.
+## --fuzz-with Pass a sanitizer name, e.g. "--fuzz-with asan" to
+## enable ALL supporting fuzzers. Use --variant for
+## individual fuzzers, e.g. "--variant asan-fuzzer/foo".
+## --args Additional argument to pass to gn. If the --args
+## argument is given multiple times, all the specified
+## arguments are passed to gn.
+## N.B. Arguments must be expressed using GN's syntax.
+## In particular this means that for strings they must
+## be quoted with double-quotes, and the quoting must
+## survive, for example, the shell. Thus when passing
+## an argument that takes a string, pass it with
+## something like --args=foo='"bar"'. E.g.,
+## bash$ fx oldset x64 --args=foo='"bar"'
+## More complicated arguments, e.g., lists, require
+## their own special syntax. See GN documentation
+## for the syntax of each kind of argument.
+## --help-args Display GN arguments documentation. If --help-args
+## is followed by a GN build argument identifier, just
+## that argument's documentation is displayed.
+## If --help-args is used alone, all GN build arguments
+## are displayed (lots of output).
+## This option requires an existing build directory.
+## --goma|--no-goma Whether to use the goma service during the build. Goma
+## attempts to make builds faster using remote build
+## servers. Defaults to detecting whether goma is installed
+## on your machine.
+## --no-ensure-goma Skip ensuring that goma is started when using goma.
+## --goma-dir The directory where goma is installed. Defaults to
+## ~/goma.
+## --ccache|--no-ccache Whether to use ccache during the build. Ccache attempts
+## to make builds faster by caching build artifacts.
+## Defaults to detecting whether the CCACHE_DIR environment
+## variable is set to a directory.
+## --ide Pass --ide=VALUE to gn when generating to create project
+## files usable with that IDE. Useful values include "vs"
+## for Visual Studio or "xcode" for Xcode.
+## --release an alias for "--args=is_debug=false"
+##
+## Deprecated flags:
+##
+## --zircon-arg ARG Additional arguments to pass to build-zircon.sh.
+## Can be given multiple times.
+##
+## Example:
+##
+## $ fx oldset x64 kitchensink --product ermine --available topaz/packages/kitchen_sink
+## -> architecture: x64
+## build directory: out/kitchensink
+## board: topaz/boards/x64.gni
+## product: products/ermine.gni
+## available: topaz/packages/kitchen_sink (all other packages)
+
+source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/vars.sh || exit $?
+
+function guess_config_location {
+ local config_type="$1"
+ local config_name="$2"
+ local __resultvar="$3"
+
+ # If there is a vendor repository checked out, look there.
+ local vendor_repo
+ vendor_repo="$(${FUCHSIA_DIR}/build/gn/find_vendor_repo.py)" || return 1
+ readonly vendor_repo
+
+ if [[ -n "${vendor_repo}" ]]; then
+ guessed_config="${vendor_repo}/${config_type}/${config_name}.gni"
+ if [[ -a "${FUCHSIA_DIR}/${guessed_config}" ]]; then
+ eval "${__resultvar}"="${guessed_config}"
+ return
+ fi
+ fi
+
+ # Otherwise look at the top level location
+ # Check if the configuration is in the top-level location
+ guessed_config="${config_type}/${config_name}.gni"
+ if [[ -a "${FUCHSIA_DIR}/${guessed_config}" ]]; then
+ eval "${__resultvar}"="${guessed_config}"
+ return
+ fi
+
+ fx-error "Could not guess a ${config_type} configuration matching \"${config_name}\""
+ fx-error "Please specify the full path from the root of the checkout such as"
+ fx-error "${config_type}/core.gni"
+ exit 1
+}
+
+
+function main {
+ fx-standard-switches "$@"
+ set -- "${FX_ARGV[@]}"
+
+ if [[ $# -lt 1 ]]; then
+ fx-command-help
+ return 1
+ fi
+
+ local arch=
+ case $1 in
+ x64 | x86 | x64-64)
+ arch=x64
+ ;;
+ arm64 | aarch64)
+ arch=arm64
+ ;;
+ *)
+ # TODO(alainv): Add support for extracting arch from board configs.
+ fx-error Unknown target \"$1\"
+ fx-command-help
+ return 1
+ ;;
+ esac
+ shift
+
+ cd "${FUCHSIA_DIR}"
+
+ local gn_cmd='gen'
+ local -a gn_switches=(--check)
+ local gn_args="target_cpu=\"${arch}\""
+ local gn_after_args=""
+ local boards=()
+ local products=()
+ local available=()
+ local preinstall=()
+ local monolith=()
+ local zircon_args=(-v -g -t "$arch")
+ local build_dir=
+ local variant=
+ local use_goma
+ local goma_dir
+ local ensure_goma=1
+ local ccache
+ while [[ $# -ne 0 ]]; do
+ case "$1" in
+ --board)
+ if [[ $# -lt 2 ]]; then
+ fx-command-help
+ return 1
+ fi
+ boards+=("$2")
+ shift
+ ;;
+ --product)
+ if [[ $# -lt 2 ]]; then
+ fx-command-help
+ return 1
+ fi
+ products+=("$2")
+ shift
+ ;;
+ --available)
+ if [[ $# -lt 2 ]]; then
+ fx-command-help
+ return 1
+ fi
+ IFS=, available+=("$2")
+ shift
+ ;;
+ --preinstall)
+ if [[ $# -lt 2 ]]; then
+ fx-command-help
+ return 1
+ fi
+ IFS=, preinstall+=("$2")
+ shift
+ ;;
+ --monolith)
+ if [[ $# -lt 2 ]]; then
+ fx-command-help
+ return 1
+ fi
+ IFS=, monolith+=("$2")
+ shift
+ ;;
+ --zircon-arg)
+ fx-warn "--zircon-arg is deprecated, common use case is no longer required"
+ if [[ $# -lt 2 ]]; then
+ fx-command-help
+ return 1
+ fi
+ zircon_args+=("$2")
+ shift
+ ;;
+ --netboot)
+ gn_after_args+=" enable_netboot=true"
+ ;;
+ --goma)
+ use_goma=1
+ ;;
+ --no-goma)
+ use_goma=0
+ ;;
+ --no-ensure-goma)
+ ensure_goma=0
+ ;;
+ --goma-dir)
+ if [[ $# -lt 2 ]]; then
+ fx-command-help
+ return 1
+ fi
+ goma_dir=$2
+ if [[ ! -d "${goma_dir}" ]]; then
+ fx-error "GOMA directory does not exist: "${goma_dir}""
+ return 1
+ fi
+ shift
+ ;;
+ --release)
+ gn_args+=" is_debug=false"
+ ;;
+ --variant)
+ if [[ $# -lt 2 ]]; then
+ fx-command-help
+ return 1
+ fi
+ variant+="\"$2\","
+ shift
+ ;;
+ --fuzz-with)
+ if [[ $# -lt 2 ]]; then
+ fx-command-help
+ return 1
+ fi
+ variant+="{variant=\"$2-fuzzer\" target_type=[\"fuzzed_executable\"]},"
+ shift
+ ;;
+ --args)
+ if [[ $# -lt 2 ]]; then
+ fx-command-help
+ return 1
+ fi
+ gn_args+=" $2"
+ shift
+ ;;
+ --help-args)
+ gn_cmd=args
+ if [[ $# -ge 2 ]] && [[ "$2" != '--*' ]]; then
+ gn_switches+=("--list=$2")
+ shift
+ else
+ gn_switches+=(--list)
+ fi
+ ;;
+ --ccache)
+ ccache=1
+ ;;
+ --no-ccache)
+ ccache=0
+ ;;
+ --ide)
+ if [[ $# -lt 2 ]]; then
+ fx-command-help
+ return 1
+ fi
+ gn_switches+=("--ide=$2")
+ shift
+ ;;
+ --*)
+ fx-command-help
+ return 1
+ ;;
+ *)
+ # A non-option argument is the build_dir, but there can be only one.
+ if [[ -n "$build_dir" ]]; then
+ fx-command-help
+ return 1
+ fi
+ build_dir="$1"
+ ;;
+ esac
+ shift
+ done
+
+ if [[ -z "${products}" ]]; then
+ # This is the default logic GN would use, but if a user specified --netboot
+ # we would short-circuit the logic, so repeat it here.
+ local vendor_repo
+ vendor_repo="$(${FUCHSIA_DIR}/build/gn/find_vendor_repo.py)" || return 1
+ readonly vendor_repo
+ if [[ -n "${vendor_repo}" ]]; then
+ products+="${vendor_repo}/products/default.gni"
+ else
+ products+="products/core.gni"
+ fi
+ fi
+
+ if [[ -z "${boards}" ]]; then
+ boards="boards/$arch.gni"
+ fi
+
+ # Remove any trailing slash from build directory name.
+ build_dir="${build_dir%/}"
+
+ local config_build_dir
+ case "$build_dir" in
+ '')
+ # Default is "//out/$target_cpu". Store it as relative.
+ config_build_dir="out/${arch}"
+ build_dir="${FUCHSIA_DIR}/${config_build_dir}"
+ ;;
+ //*|out/*)
+ # GN-style "source-relative" path or relative out/something.
+ config_build_dir="${build_dir#//}"
+ build_dir="${FUCHSIA_DIR}/${config_build_dir}"
+ ;;
+ *)
+ # Absolute or relative path. Canonicalize it to source-relative.
+ local abs_build_dir
+ abs_build_dir="$(cd "${build_dir%/*}" >/dev/null 2>&1; pwd)/${build_dir##*/}" || {
+ fx-error "Missing parent directories for ${build_dir}"
+ return 1
+ }
+ if [[ "$abs_build_dir" == "${FUCHSIA_DIR}"/out/* ]]; then
+ config_build_dir="${abs_build_dir#${FUCHSIA_DIR}/}"
+ else
+ fx-warn "${abs_build_dir} is not a subdirectory of ${FUCHSIA_DIR}/out"
+ config_build_dir="$abs_build_dir"
+ fi
+ ;;
+ esac
+
+ # If a goma directory wasn't specified explicitly then default to "~/goma".
+ if [[ -z "${goma_dir}" ]]; then
+ goma_dir="$HOME/goma"
+ fi
+
+ # Automatically detect goma and ccache if not specified explicitly.
+ if [[ -z "${use_goma}" ]] && [[ -z "${ccache}" ]]; then
+ if [[ -d "${goma_dir}" ]]; then
+ use_goma=1
+ elif [[ -n "${CCACHE_DIR}" ]] && [[ -d "${CCACHE_DIR}" ]]; then
+ ccache=1
+ fi
+ fi
+
+ if [[ -z "${boards}" ]]; then
+ guess_config_within_layer "boards" "${arch}" boards
+ fi
+
+ for board in ${boards[@]}; do
+ if [[ ! -f "${FUCHSIA_DIR}/${board}" ]]; then
+ local guessed_board=""
+ guess_config_location "boards" "${board}" guessed_board
+ board="${guessed_board}"
+ fi
+ gn_args+=" import(\"//${board}\")"
+ done
+
+ # Add goma or ccache settings as appropriate.
+ if [[ "${use_goma}" -eq 1 ]]; then
+ gn_args+=" use_goma=true goma_dir=\"${goma_dir}\""
+ zircon_args+=(use_goma=true "goma_dir=\"${goma_dir}\"")
+ elif [[ "${ccache}" -eq 1 ]]; then
+ gn_args+=" use_ccache=true"
+ fi
+
+ for product in ${products[@]}; do
+ if [[ ! -a "${FUCHSIA_DIR}/${product}" ]]; then
+ local guessed_product=""
+ guess_config_location "products" "${product}" guessed_product
+ product="${guessed_product}"
+ fi
+ gn_args+=" import(\"//${product}\")"
+ done
+
+ gn_args+=" if (!defined(available)) { available = [] }"
+ gn_args+=" available+=["
+ for package in ${available[@]}; do
+ gn_args+="\"${package}\","
+ done
+ gn_args+="]"
+
+ gn_args+=" if (!defined(preinstall)) { preinstall = [] }"
+ gn_args+=" preinstall+=["
+ for package in ${preinstall[@]}; do
+ gn_args+="\"${package}\","
+ done
+ gn_args+="]"
+ gn_args+=" if (!defined(monolith)) { monolith = [] }"
+ gn_args+=" monolith+=["
+ for package in ${monolith[@]}; do
+ gn_args+="\"${package}\","
+ done
+ gn_args+="]"
+
+ if [[ -n "${variant}" ]]; then
+ gn_args+=" select_variant=[${variant}]"
+ fi
+
+ gn_args+="${gn_after_args}"
+
+ # Using a subshell with -x prints out the gn command precisely with shell
+ # quoting so a cut&paste to the command line works. Always show the real
+ # meaning of what this script does so everyone learns how GN works.
+ (
+ set -x -e
+ # Zircon's `gn gen` phase has to be done before Fuchsia's `gn gen`.
+ # The former produces the legacy-$cpu.json file consumed by the latter.
+ "${FUCHSIA_DIR}/scripts/build-zircon.sh" "${zircon_args[@]}"
+ "${FUCHSIA_DIR}/buildtools/gn" ${gn_cmd} "${build_dir}" \
+ "${gn_switches[@]}" --args="${gn_args}" "$@"
+ # If GN failed, don't update .config.
+ ) || return
+
+ fx-config-write "${config_build_dir}"
+
+ if [[ "${use_goma}" -eq 1 ]] && [[ "${ensure_goma}" -eq 1 ]]; then
+ if ! [[ $("${goma_dir}/gomacc" port) =~ ^[0-9]+$ ]]; then
+ "${goma_dir}/goma_ctl.py" ensure_start || return $?
+ fi
+ fi
+}
+
+main "$@"
diff --git a/scripts/devshell/set b/scripts/devshell/set
index ce4d4ff..d936a7c 100755
--- a/scripts/devshell/set
+++ b/scripts/devshell/set
@@ -1,79 +1,53 @@
#!/bin/bash
-# Copyright 2017 The Fuchsia Authors. All rights reserved.
+# 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.
-### set up a build directory
+### set up a build directory (EXPERIMENTAL)
-## usage: fx set TARGET [OUTDIR]
-## [--board NAME|PATH]
-## [--product NAME|PATH]
-## [--monolith PATH]
-## [--preinstall PATH]
-## [--available PATH]
-## [--netboot]
+## usage: fx set PRODUCT.BOARD [--with GNLABEL1,GNLABEL2,...]
+## [--release] [--build-dir BUILDDIR]
## [--args ARG] [--help-args [ARG]] [--variant VARIANT]
-## [--goma|--no-goma] [--no-ensure-goma]
-## [--goma-dir DIR]
-## [--ccache|--no-ccache]
-## [--release]
-## [--zircon-arg ARG]
+## [--with-base GNLABEL1,GNLABEL2,...]
##
-## where TARGET is x64 or arm64
+## where PRODUCT is an entry from `//products` or `//vendor/*/products` and
+## BOARD is an entry from `//boards` or `//vendor/*/boards`. Use the
+## `fx list-products` and `fx list-boards` commands to see a list of
+## possible products and boards (respectively). See the README.md in those
+## directories for a description of the various options.
##
-## OUTDIR is the directory where the build output goes.
+## BUILDDIR is the directory where the build output goes.
## If it begins with `//` or `out/` then it's taken as relative to FUCHSIA_DIR.
## Otherwise it should be an absolute path or a path relative to the current
## working directory that winds up in `FUCHSIA_DIR/out`.
-## It defaults to `out/TARGET`.
+## It defaults to `out/default`.
##
-## This is a wrapper around running `gn gen --check OUTDIR --args ...`.
+## This command store the location of the build directory in the //.config file,
+## which causes subsequent `fx` commands to use that build directory. Use
+## `fx use` to switch build directories.
+##
+## Ensures Goma is ready (if Goma is enabled).
+##
+## This is a wrapper around running `gn gen --check BUILDDIR --args ...`.
## If GN fails with an error, `fx set` does not change anything.
-## If GN succeeds, this also points subsequent `fx` commands at OUTDIR,
-## just as `fx use` does and ensures Goma is ready (if enabled).
-##
-## NAME|PATH can be provided as arguments to --board and --product. In the
-## case of NAME the name is searched for in //layer/board/NAME.gni, otherwise it
-## is treated as a PATH.
##
## optional arguments:
-## --board Use the given board target definition. Board
-## configurations are used to modulate hardware specific
-## behavior, such as configuring the set of drivers
-## included, or adding peripheral specific configurations.
-## If no board is given, a default board for the architecture
-## is selected from the current layer, e.g.
-## garnet/boards/x64.gni.
-## --product Include the given product in the build. Defaults to
-## the default product for the current layer (e.g.,
-## "garnet/products/default.gni" for the Garnet layer).
-## Product configurations define a set of packages to be
-## included in the monolith, preinstall and available
-## package sets, as well as product oriented configurations.
-## --monolith Additional packages to be built and included in the
-## monolithic system image. Monolith is the set of packages
-## that make up an OTA image.
-## If the --monolith argument is given multiple times,
-## all the specified packages are included in this set.
-## These packages are added to the available set defined
-## by the board and product specifications.
-## --preinstall Additional packages to be built and included in the
-## system image alongside the monolithic system image.
-## Packages in preinstall are not part of OTA updates,
-## instead they are updated dynamically.
-## If the --preinstall argument is given multiple times,
-## all the specified packages are included in this set.
-## These packages are added to the available set defined
-## by the board and product specifications.
-## --available Additional packages to be built and included in the
-## set of packages available for pushing dynamically.
-## If the --available argument is given multiple times,
-## all the specified available are included in this set.
-## These packages are added to the available set defined
-## by the board and product specifications.
-## --netboot Ensure that a network ramboot image is always built.
-## --variant Pass a `select_variant=[VARIANT*,...]` GN build argument
-## collecting all the --variant arguments in order.
+## --with GNLABEL Labels of additional packages to include in the
+## universe of available packages. These packages can
+## be run ephemerally. Multiple labels can be provided
+## delimited by commas or the --with argument can be
+## provided multiple times.
+## --variant Selects which runtime variant to use (e.g., asan) by
+## passing a `select_variant=[VARIANT*,...]` argument
+## to gn that collects all the --variant arguments in
+## order. Variants are normal builds in most respects,
+## but allow users to test different runtime settings
+## for either the whole build or for a specific target.
+## This can be specified by passing the variant name
+## to this argument (e.g. `--variant asan`) for the
+## former, or the variant name and the target name
+## separated by a slash (e.g. `--variant asan/my_test`)
+## for the latter.
## --fuzz-with Pass a sanitizer name, e.g. "--fuzz-with asan" to
## enable ALL supporting fuzzers. Use --variant for
## individual fuzzers, e.g. "--variant asan-fuzzer/foo".
@@ -86,10 +60,11 @@
## survive, for example, the shell. Thus when passing
## an argument that takes a string, pass it with
## something like --args=foo='"bar"'. E.g.,
-## bash$ fx set x64 --args=foo='"bar"'
+## bash$ fx set core.x64 --args=foo='"bar"'
## More complicated arguments, e.g., lists, require
## their own special syntax. See GN documentation
## for the syntax of each kind of argument.
+## --netboot Ensure that a network ramboot image is always built.
## --help-args Display GN arguments documentation. If --help-args
## is followed by a GN build argument identifier, just
## that argument's documentation is displayed.
@@ -111,94 +86,94 @@
## files usable with that IDE. Useful values include "vs"
## for Visual Studio or "xcode" for Xcode.
## --release an alias for "--args=is_debug=false"
-##
-## Deprecated flags:
-##
-## --zircon-arg ARG Additional arguments to pass to build-zircon.sh.
-## Can be given multiple times.
+## --with-base GNLABEL Labels of additional packages to include in the
+## base set of packages. These packages are included in
+## the system image and can be updated only with an OTA.
+## Multiple labels can be provided delimited by commas
+## or the --with-base argument can be provided multiple
+## times.
##
## Example:
##
-## $ fx set x64 kitchensink --product ermine --available topaz/packages/kitchen_sink
-## -> architecture: x64
-## build directory: out/kitchensink
-## board: topaz/boards/x64.gni
-## product: products/ermine.gni
-## available: topaz/packages/kitchen_sink (all other packages)
+## $ fx set core.x64 --with //bundles:tests
+## -> build directory: out/default
+## board: //boards/x64.gni
+## product: //products/core.gni
+## universe: //bundles:tests (all test packages)
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/vars.sh || exit $?
-function guess_config_location {
+set -e
+
+function find_config {
local config_type="$1"
local config_name="$2"
- local __resultvar="$3"
- # If there is a vendor repository checked out, look there.
- local vendor_repo
- vendor_repo="$(${FUCHSIA_DIR}/build/gn/find_vendor_repo.py)" || return 1
- readonly vendor_repo
-
- if [[ -n "${vendor_repo}" ]]; then
- guessed_config="${vendor_repo}/${config_type}/${config_name}.gni"
- if [[ -a "${FUCHSIA_DIR}/${guessed_config}" ]]; then
- eval "${__resultvar}"="${guessed_config}"
+ for directory in vendor/*/"${config_type}" "${config_type}"; do
+ local guessed_config="${directory}/${config_name}.gni"
+ if [[ -a "${guessed_config}" ]]; then
+ echo "${guessed_config}"
return
fi
- fi
+ done
- # Otherwise look at the top level location
- # Check if the configuration is in the top-level location
- guessed_config="${config_type}/${config_name}.gni"
- if [[ -a "${FUCHSIA_DIR}/${guessed_config}" ]]; then
- eval "${__resultvar}"="${guessed_config}"
- return
- fi
-
- fx-error "Could not guess a ${config_type} configuration matching \"${config_name}\""
- fx-error "Please specify the full path from the root of the checkout such as"
- fx-error "${config_type}/core.gni"
+ fx-error "Could not find a ${config_type} configuration matching \"${config_name}\""
+ fx-error "Checked:"
+ for directory in vendor/*/"${config_type}" "${config_type}"; do
+ local guessed_config="${directory}/${config_name}.gni"
+ fx-error " ${guessed_config}"
+ done
exit 1
}
+function explain-goal-argument {
+ fx-error You must specify which product and which board you wish to build.
+ fx-error Example:
+ fx-error " fx set core.x64"
+ fx-error
+ fx-error Run \"fx list-products\" to see the available products.
+ fx-error Run \"fx list-boards\" to see the available boards.
+ fx-error Run \"fx set --help\" to see full usage.
+ return 0
+}
function main {
fx-standard-switches "$@"
set -- "${FX_ARGV[@]}"
if [[ $# -lt 1 ]]; then
- fx-command-help
- return 1
+ fx-error Missing an explicit PRODUCT.BOARD goal.
+ explain-goal-argument
+ return 1
fi
- local arch=
- case $1 in
- x64 | x86 | x64-64)
- arch=x64
- ;;
- arm64 | aarch64)
- arch=arm64
+ cd "${FUCHSIA_DIR}"
+
+ local gn_args=""
+ case "$1" in
+ *.*)
+ local product_name="${1%.*}"
+ local board_name="${1##*.}"
+ local product="$(find_config "products" "${product_name}")"
+ local board="$(find_config "boards" "${board_name}")"
+ gn_args+=" import(\"//${board}\") import(\"//${product}\")"
;;
*)
- # TODO(alainv): Add support for extracting arch from board configs.
- fx-error Unknown target \"$1\"
- fx-command-help
+ fx-error Unable to parse PRODUCT.BOARD goal \"$1\"
+ explain-goal-argument
return 1
;;
esac
shift
- cd "${FUCHSIA_DIR}"
+ local gn_args+=" allow_layer_guesswork=false"
local gn_cmd='gen'
local -a gn_switches=(--check)
- local gn_args="target_cpu=\"${arch}\""
local gn_after_args=""
- local boards=()
- local products=()
- local available=()
- local preinstall=()
- local monolith=()
- local zircon_args=(-v -g -t "$arch")
+ local base=()
+ local universe=()
+ local zircon_args=(-v -g)
local build_dir=
local variant=
local use_goma
@@ -207,53 +182,20 @@
local ccache
while [[ $# -ne 0 ]]; do
case "$1" in
- --board)
+ --with-base)
if [[ $# -lt 2 ]]; then
fx-command-help
return 1
fi
- boards+=("$2")
+ IFS=, base+=("$2")
shift
;;
- --product)
+ --with)
if [[ $# -lt 2 ]]; then
fx-command-help
return 1
fi
- products+=("$2")
- shift
- ;;
- --available)
- if [[ $# -lt 2 ]]; then
- fx-command-help
- return 1
- fi
- IFS=, available+=("$2")
- shift
- ;;
- --preinstall)
- if [[ $# -lt 2 ]]; then
- fx-command-help
- return 1
- fi
- IFS=, preinstall+=("$2")
- shift
- ;;
- --monolith)
- if [[ $# -lt 2 ]]; then
- fx-command-help
- return 1
- fi
- IFS=, monolith+=("$2")
- shift
- ;;
- --zircon-arg)
- fx-warn "--zircon-arg is deprecated, common use case is no longer required"
- if [[ $# -lt 2 ]]; then
- fx-command-help
- return 1
- fi
- zircon_args+=("$2")
+ IFS=, universe+=("$2")
shift
;;
--netboot)
@@ -275,11 +217,19 @@
fi
goma_dir=$2
if [[ ! -d "${goma_dir}" ]]; then
- fx-error "GOMA directory does not exist: "${goma_dir}""
+ fx-error "GOMA directory does not exist: ${goma_dir}"
return 1
fi
shift
;;
+ --build-dir)
+ if [[ $# -lt 2 ]]; then
+ fx-command-help
+ return 1
+ fi
+ build_dir="$2"
+ shift
+ ;;
--release)
gn_args+=" is_debug=false"
;;
@@ -330,47 +280,23 @@
gn_switches+=("--ide=$2")
shift
;;
- --*)
+ *)
+ fx-error "Unknown argument \"$1\""
fx-command-help
return 1
;;
- *)
- # A non-option argument is the build_dir, but there can be only one.
- if [[ -n "$build_dir" ]]; then
- fx-command-help
- return 1
- fi
- build_dir="$1"
- ;;
esac
shift
done
- if [[ -z "${products}" ]]; then
- # This is the default logic GN would use, but if a user specified --netboot
- # we would short-circuit the logic, so repeat it here.
- local vendor_repo
- vendor_repo="$(${FUCHSIA_DIR}/build/gn/find_vendor_repo.py)" || return 1
- readonly vendor_repo
- if [[ -n "${vendor_repo}" ]]; then
- products+="${vendor_repo}/products/default.gni"
- else
- products+="products/core.gni"
- fi
- fi
-
- if [[ -z "${boards}" ]]; then
- boards="boards/$arch.gni"
- fi
-
# Remove any trailing slash from build directory name.
build_dir="${build_dir%/}"
local config_build_dir
case "$build_dir" in
'')
- # Default is "//out/$target_cpu". Store it as relative.
- config_build_dir="out/${arch}"
+ # Default is "//out/default". Store it as relative.
+ config_build_dir="out/default"
build_dir="${FUCHSIA_DIR}/${config_build_dir}"
;;
//*|out/*)
@@ -379,18 +305,9 @@
build_dir="${FUCHSIA_DIR}/${config_build_dir}"
;;
*)
- # Absolute or relative path. Canonicalize it to source-relative.
- local abs_build_dir
- abs_build_dir="$(cd "${build_dir%/*}" >/dev/null 2>&1; pwd)/${build_dir##*/}" || {
- fx-error "Missing parent directories for ${build_dir}"
- return 1
- }
- if [[ "$abs_build_dir" == "${FUCHSIA_DIR}"/out/* ]]; then
- config_build_dir="${abs_build_dir#${FUCHSIA_DIR}/}"
- else
- fx-warn "${abs_build_dir} is not a subdirectory of ${FUCHSIA_DIR}/out"
- config_build_dir="$abs_build_dir"
- fi
+ fx-error "Invalid build directory: ${build_dir}"
+ fx-error "Please specify a build directory as \"out/something\"."
+ exit 1
;;
esac
@@ -408,19 +325,6 @@
fi
fi
- if [[ -z "${boards}" ]]; then
- guess_config_within_layer "boards" "${arch}" boards
- fi
-
- for board in ${boards[@]}; do
- if [[ ! -f "${FUCHSIA_DIR}/${board}" ]]; then
- local guessed_board=""
- guess_config_location "boards" "${board}" guessed_board
- board="${guessed_board}"
- fi
- gn_args+=" import(\"//${board}\")"
- done
-
# Add goma or ccache settings as appropriate.
if [[ "${use_goma}" -eq 1 ]]; then
gn_args+=" use_goma=true goma_dir=\"${goma_dir}\""
@@ -429,31 +333,22 @@
gn_args+=" use_ccache=true"
fi
- for product in ${products[@]}; do
- if [[ ! -a "${FUCHSIA_DIR}/${product}" ]]; then
- local guessed_product=""
- guess_config_location "products" "${product}" guessed_product
- product="${guessed_product}"
- fi
- gn_args+=" import(\"//${product}\")"
- done
+ gn_args+="
+# See: fx args --list=base_package_labels
+base_package_labels+=["
- gn_args+=" if (!defined(available)) { available = [] }"
- gn_args+=" available+=["
- for package in ${available[@]}; do
+ for package in ${base[@]}; do
gn_args+="\"${package}\","
done
- gn_args+="]"
+ gn_args+="]
- gn_args+=" if (!defined(preinstall)) { preinstall = [] }"
- gn_args+=" preinstall+=["
- for package in ${preinstall[@]}; do
- gn_args+="\"${package}\","
- done
- gn_args+="]"
- gn_args+=" if (!defined(monolith)) { monolith = [] }"
- gn_args+=" monolith+=["
- for package in ${monolith[@]}; do
+# See: fx args --list=cache_package_labels
+cache_package_labels+=[]
+
+# See: fx args --list=universe_package_labels
+universe_package_labels+=["
+
+ for package in ${universe[@]}; do
gn_args+="\"${package}\","
done
gn_args+="]"
@@ -464,18 +359,11 @@
gn_args+="${gn_after_args}"
- # Using a subshell with -x prints out the gn command precisely with shell
- # quoting so a cut&paste to the command line works. Always show the real
- # meaning of what this script does so everyone learns how GN works.
- (
- set -x -e
- # Zircon's `gn gen` phase has to be done before Fuchsia's `gn gen`.
- # The former produces the legacy-$cpu.json file consumed by the latter.
- "${FUCHSIA_DIR}/scripts/build-zircon.sh" "${zircon_args[@]}"
- "${FUCHSIA_DIR}/buildtools/gn" ${gn_cmd} "${build_dir}" \
- "${gn_switches[@]}" --args="${gn_args}" "$@"
- # If GN failed, don't update .config.
- ) || return
+ # Zircon's `gn gen` phase has to be done before Fuchsia's `gn gen`.
+ # The former produces the legacy-$cpu.json file consumed by the latter.
+ "${FUCHSIA_DIR}/scripts/build-zircon.sh" "${zircon_args[@]}"
+ "${FUCHSIA_DIR}/buildtools/gn" ${gn_cmd} "${build_dir}" \
+ "${gn_switches[@]}" --args="${gn_args}" "$@"
fx-config-write "${config_build_dir}"
diff --git a/scripts/devshell/set-petal b/scripts/devshell/set-petal
index f2dc988..0694254 100755
--- a/scripts/devshell/set-petal
+++ b/scripts/devshell/set-petal
@@ -42,11 +42,9 @@
"${jiri}" import -name=integration flower https://fuchsia.googlesource.com/integration
"${jiri}" override "${petal}" "https://fuchsia.googlesource.com/${petal}"
-echo "Configured jiri for ${petal}. Run these commands to update your build:"
+echo "Configured jiri for ${petal}. Run these commands to update your tree:"
cat <<END
* jiri update -gc # Updates your source tree to contain ${petal} and
# removes unneeded repositories.
- * fx set x64 # Updates your build directory to build ${petal}.
- * fx full-build # Actually builds ${petal}
END
diff --git a/scripts/devshell/set2 b/scripts/devshell/set2
deleted file mode 100755
index c7ef16f..0000000
--- a/scripts/devshell/set2
+++ /dev/null
@@ -1,377 +0,0 @@
-#!/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.
-
-### set up a build directory (EXPERIMENTAL)
-
-## usage: fx set2 PRODUCT.BOARD [--with GNLABEL1,GNLABEL2,...]
-## [--release] [--build-dir BUILDDIR]
-## [--args ARG] [--help-args [ARG]] [--variant VARIANT]
-## [--with-base GNLABEL1,GNLABEL2,...]
-##
-## where PRODUCT is an entry from `//products` or `//vendor/*/products` and
-## BOARD is an entry from `//boards` or `//vendor/*/boards`. Use the
-## `fx list-products` and `fx list-boards` commands to see a list of
-## possible products and boards (respectively). See the README.md in those
-## directories for a description of the various options.
-##
-## BUILDDIR is the directory where the build output goes.
-## If it begins with `//` or `out/` then it's taken as relative to FUCHSIA_DIR.
-## Otherwise it should be an absolute path or a path relative to the current
-## working directory that winds up in `FUCHSIA_DIR/out`.
-## It defaults to `out/default`.
-##
-## This command store the location of the build directory in the //.config file,
-## which causes subsequent `fx` commands to use that build directory. Use
-## `fx use` to switch build directories.
-##
-## Ensures Goma is ready (if Goma is enabled).
-##
-## This is a wrapper around running `gn gen --check BUILDDIR --args ...`.
-## If GN fails with an error, `fx set` does not change anything.
-##
-## optional arguments:
-## --with GNLABEL Labels of additional packages to include in the
-## universe of available packages. These packages can
-## be run ephemerally. Multiple labels can be provided
-## delimited by commas or the --with argument can be
-## provided multiple times.
-## --variant Selects which runtime variant to use (e.g., asan) by
-## passing a `select_variant=[VARIANT*,...]` argument
-## to gn that collects all the --variant arguments in
-## order. Variants are normal builds in most respects,
-## but allow users to test different runtime settings
-## for either the whole build or for a specific target.
-## This can be specified by passing the variant name
-## to this argument (e.g. `--variant asan`) for the
-## former, or the variant name and the target name
-## separated by a slash (e.g. `--variant asan/my_test`)
-## for the latter.
-## --fuzz-with Pass a sanitizer name, e.g. "--fuzz-with asan" to
-## enable ALL supporting fuzzers. Use --variant for
-## individual fuzzers, e.g. "--variant asan-fuzzer/foo".
-## --args Additional argument to pass to gn. If the --args
-## argument is given multiple times, all the specified
-## arguments are passed to gn.
-## N.B. Arguments must be expressed using GN's syntax.
-## In particular this means that for strings they must
-## be quoted with double-quotes, and the quoting must
-## survive, for example, the shell. Thus when passing
-## an argument that takes a string, pass it with
-## something like --args=foo='"bar"'. E.g.,
-## bash$ fx set x64 --args=foo='"bar"'
-## More complicated arguments, e.g., lists, require
-## their own special syntax. See GN documentation
-## for the syntax of each kind of argument.
-## --netboot Ensure that a network ramboot image is always built.
-## --help-args Display GN arguments documentation. If --help-args
-## is followed by a GN build argument identifier, just
-## that argument's documentation is displayed.
-## If --help-args is used alone, all GN build arguments
-## are displayed (lots of output).
-## This option requires an existing build directory.
-## --goma|--no-goma Whether to use the goma service during the build. Goma
-## attempts to make builds faster using remote build
-## servers. Defaults to detecting whether goma is installed
-## on your machine.
-## --no-ensure-goma Skip ensuring that goma is started when using goma.
-## --goma-dir The directory where goma is installed. Defaults to
-## ~/goma.
-## --ccache|--no-ccache Whether to use ccache during the build. Ccache attempts
-## to make builds faster by caching build artifacts.
-## Defaults to detecting whether the CCACHE_DIR environment
-## variable is set to a directory.
-## --ide Pass --ide=VALUE to gn when generating to create project
-## files usable with that IDE. Useful values include "vs"
-## for Visual Studio or "xcode" for Xcode.
-## --release an alias for "--args=is_debug=false"
-## --with-base GNLABEL Labels of additional packages to include in the
-## base set of packages. These packages are included in
-## the system image and can be updated only with an OTA.
-## Multiple labels can be provided delimited by commas
-## or the --with-base argument can be provided multiple
-## times.
-##
-## Example:
-##
-## $ fx set2 core.x64 --with //bundles:tests
-## -> build directory: out/default
-## board: //boards/x64.gni
-## product: //products/core.gni
-## universe: //bundles:tests (all test packages)
-
-source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/vars.sh || exit $?
-
-set -e
-
-function find_config {
- local config_type="$1"
- local config_name="$2"
-
- for directory in vendor/*/"${config_type}" "${config_type}"; do
- local guessed_config="${directory}/${config_name}.gni"
- if [[ -a "${guessed_config}" ]]; then
- echo "${guessed_config}"
- return
- fi
- done
-
- fx-error "Could not find a ${config_type} configuration matching \"${config_name}\""
- fx-error "Checked:"
- for directory in vendor/*/"${config_type}" "${config_type}"; do
- local guessed_config="${directory}/${config_name}.gni"
- fx-error " ${guessed_config}"
- done
- exit 1
-}
-
-function explain-goal-argument {
- fx-error You must specify which product and which board you wish to build.
- fx-error Example:
- fx-error " fx set2 core.x64"
- fx-error
- fx-error Run \"fx list-products\" to see the available products.
- fx-error Run \"fx list-boards\" to see the available boards.
- fx-error Run \"fx set2 --help\" to see full usage.
- return 0
-}
-
-function main {
- fx-standard-switches "$@"
- set -- "${FX_ARGV[@]}"
-
- if [[ $# -lt 1 ]]; then
- fx-error Missing an explicit PRODUCT.BOARD goal.
- explain-goal-argument
- return 1
- fi
-
- cd "${FUCHSIA_DIR}"
-
- local gn_args=""
- case "$1" in
- *.*)
- local product_name="${1%.*}"
- local board_name="${1##*.}"
- local product="$(find_config "products" "${product_name}")"
- local board="$(find_config "boards" "${board_name}")"
- gn_args+=" import(\"//${board}\") import(\"//${product}\")"
- ;;
- *)
- fx-error Unable to parse PRODUCT.BOARD goal \"$1\"
- explain-goal-argument
- return 1
- ;;
- esac
- shift
-
- local gn_args+=" allow_layer_guesswork=false"
-
- local gn_cmd='gen'
- local -a gn_switches=(--check)
- local gn_after_args=""
- local base=()
- local universe=()
- local zircon_args=(-v -g)
- local build_dir=
- local variant=
- local use_goma
- local goma_dir
- local ensure_goma=1
- local ccache
- while [[ $# -ne 0 ]]; do
- case "$1" in
- --with-base)
- if [[ $# -lt 2 ]]; then
- fx-command-help
- return 1
- fi
- IFS=, base+=("$2")
- shift
- ;;
- --with)
- if [[ $# -lt 2 ]]; then
- fx-command-help
- return 1
- fi
- IFS=, universe+=("$2")
- shift
- ;;
- --netboot)
- gn_after_args+=" enable_netboot=true"
- ;;
- --goma)
- use_goma=1
- ;;
- --no-goma)
- use_goma=0
- ;;
- --no-ensure-goma)
- ensure_goma=0
- ;;
- --goma-dir)
- if [[ $# -lt 2 ]]; then
- fx-command-help
- return 1
- fi
- goma_dir=$2
- if [[ ! -d "${goma_dir}" ]]; then
- fx-error "GOMA directory does not exist: ${goma_dir}"
- return 1
- fi
- shift
- ;;
- --build-dir)
- if [[ $# -lt 2 ]]; then
- fx-command-help
- return 1
- fi
- build_dir="$2"
- shift
- ;;
- --release)
- gn_args+=" is_debug=false"
- ;;
- --variant)
- if [[ $# -lt 2 ]]; then
- fx-command-help
- return 1
- fi
- variant+="\"$2\","
- shift
- ;;
- --fuzz-with)
- if [[ $# -lt 2 ]]; then
- fx-command-help
- return 1
- fi
- variant+="{variant=\"$2-fuzzer\" target_type=[\"fuzzed_executable\"]},"
- shift
- ;;
- --args)
- if [[ $# -lt 2 ]]; then
- fx-command-help
- return 1
- fi
- gn_args+=" $2"
- shift
- ;;
- --help-args)
- gn_cmd=args
- if [[ $# -ge 2 ]] && [[ "$2" != '--*' ]]; then
- gn_switches+=("--list=$2")
- shift
- else
- gn_switches+=(--list)
- fi
- ;;
- --ccache)
- ccache=1
- ;;
- --no-ccache)
- ccache=0
- ;;
- --ide)
- if [[ $# -lt 2 ]]; then
- fx-command-help
- return 1
- fi
- gn_switches+=("--ide=$2")
- shift
- ;;
- *)
- fx-error "Unknown argument \"$1\""
- fx-command-help
- return 1
- ;;
- esac
- shift
- done
-
- # Remove any trailing slash from build directory name.
- build_dir="${build_dir%/}"
-
- local config_build_dir
- case "$build_dir" in
- '')
- # Default is "//out/default". Store it as relative.
- config_build_dir="out/default"
- build_dir="${FUCHSIA_DIR}/${config_build_dir}"
- ;;
- //*|out/*)
- # GN-style "source-relative" path or relative out/something.
- config_build_dir="${build_dir#//}"
- build_dir="${FUCHSIA_DIR}/${config_build_dir}"
- ;;
- *)
- fx-error "Invalid build directory: ${build_dir}"
- fx-error "Please specify a build directory as \"out/something\"."
- exit 1
- ;;
- esac
-
- # If a goma directory wasn't specified explicitly then default to "~/goma".
- if [[ -z "${goma_dir}" ]]; then
- goma_dir="$HOME/goma"
- fi
-
- # Automatically detect goma and ccache if not specified explicitly.
- if [[ -z "${use_goma}" ]] && [[ -z "${ccache}" ]]; then
- if [[ -d "${goma_dir}" ]]; then
- use_goma=1
- elif [[ -n "${CCACHE_DIR}" ]] && [[ -d "${CCACHE_DIR}" ]]; then
- ccache=1
- fi
- fi
-
- # Add goma or ccache settings as appropriate.
- if [[ "${use_goma}" -eq 1 ]]; then
- gn_args+=" use_goma=true goma_dir=\"${goma_dir}\""
- zircon_args+=(use_goma=true "goma_dir=\"${goma_dir}\"")
- elif [[ "${ccache}" -eq 1 ]]; then
- gn_args+=" use_ccache=true"
- fi
-
- gn_args+="
-# See: fx args --list=base_package_labels
-base_package_labels+=["
-
- for package in ${base[@]}; do
- gn_args+="\"${package}\","
- done
- gn_args+="]
-
-# See: fx args --list=cache_package_labels
-cache_package_labels+=[]
-
-# See: fx args --list=universe_package_labels
-universe_package_labels+=["
-
- for package in ${universe[@]}; do
- gn_args+="\"${package}\","
- done
- gn_args+="]"
-
- if [[ -n "${variant}" ]]; then
- gn_args+=" select_variant=[${variant}]"
- fi
-
- gn_args+="${gn_after_args}"
-
- # Zircon's `gn gen` phase has to be done before Fuchsia's `gn gen`.
- # The former produces the legacy-$cpu.json file consumed by the latter.
- "${FUCHSIA_DIR}/scripts/build-zircon.sh" "${zircon_args[@]}"
- "${FUCHSIA_DIR}/buildtools/gn" ${gn_cmd} "${build_dir}" \
- "${gn_switches[@]}" --args="${gn_args}" "$@"
-
- fx-config-write "${config_build_dir}"
-
- if [[ "${use_goma}" -eq 1 ]] && [[ "${ensure_goma}" -eq 1 ]]; then
- if ! [[ $("${goma_dir}/gomacc" port) =~ ^[0-9]+$ ]]; then
- "${goma_dir}/goma_ctl.py" ensure_start || return $?
- fi
- fi
-}
-
-main "$@"
diff --git a/scripts/gce/README.md b/scripts/gce/README.md
index 98e19aa..2f066df 100644
--- a/scripts/gce/README.md
+++ b/scripts/gce/README.md
@@ -25,7 +25,7 @@
```
cd $FUCHSIA_ROOT
-fx set x64 --release
+fx set core.x64 --release
fx full-build
fx gce create-fuchsia-image
fx gce create-instance
diff --git a/scripts/vim/README.md b/scripts/vim/README.md
index 844357f..d17f14f 100644
--- a/scripts/vim/README.md
+++ b/scripts/vim/README.md
@@ -16,7 +16,7 @@
```shell
export FUCHSIA_DIR=/path/to/fuchsia-dir
- fx set x64
+ fx set core.x64
```
1. Update your vim startup file