blob: 3d5bf8cd226735e4cc93f748575bcaba1b964db9 [file] [log] [blame] [view]
# Fuchsia samples using the Fuchsia SDK
This repository contains instructions and source code to build, package and run
Fuchsia samples using only the Fuchsia SDK.
## Set up and bootstrap the SDK samples repository
Clone this SDK samples repository on your host machine. This repository contains
the Bazel-based Fuchsia SDK and sample components.
The tasks include:
- Bootstrap the SDK samples repository.
- Download the SDK toolchain to initialize the SDK environment.
- Verify that you can run [`ffx`][ffx] commands.
Do the following:
1. Open a terminal.
1. In the terminal, change to your home directory:
```posix-terminal
cd
```
1. Clone the Fuchsia samples repository:
```posix-terminal
git clone https://fuchsia.googlesource.com/sdk-samples/getting-started fuchsia-getting-started --recurse-submodules
```
This `git clone` command creates a new directory named
`fuchsia-getting-started` and clones the content of the
[SDK samples repository][sdk-samples-repo]{:.external}.
1. Go to the new directory:
```posix-terminal
cd fuchsia-getting-started
```
1. Run the bootstrap script to install Bazel and other required dependencies:
```posix-terminal
scripts/bootstrap.sh
```
1. To verify that you can use the `ffx` tool in your environment, run the
following command:
```posix-terminal
tools/ffx sdk version
```
This command prints output similar to the following:
```none {:.devsite-disable-click-to-copy}
$ tools/ffx sdk version
21.20240623.2.1
```
At this point, you only need to confirm that you can run `ffx` commands
without error.
Note: The output above shows the version `21.20240623.2.1`, which
indicates that this SDK was built and published on June 23, 2024.
## Building and flashing the reference product to vim3
Once you have downloaded the toolchain, you will be able to build products.
Here, you will need a vim3 plugged into your computer to build and flash a
product bundle to it. Remote desktops may not allow for flashing to vim3.
1. Make sure the device is in fastboot:
```posix-terminal
tools/ffx target reboot -b
```
1. Check for the target:
```posix-terminal
tools/ffx target list
```
This should print an output similar to the following
```posix-terminal
NAME SERIAL TYPE STATE ADDRS/IP RCS
fuchsia-c863-1474-66db c863147466db Unknown Fastboot [fe80::37a4:2a98:628b:3687%eth0, Y
172.16.243.55]
```
1. Flash and build the reference product:
```posix-terminal
tools/bazel run products/reference:reference.vim3.flash
```
This should print an output similar to the following:
```posix-terminal
WARNING: Build option --run_under has changed, discarding analysis cache (this can be expensive, see https://bazel.build/advanced/performance/iteration-speed).
INFO: Analyzed target //products/reference:reference.vim3.flash (0 packages loaded, 7093 targets configured).
INFO: Found 1 target...
Target //products/reference:reference.vim3.flash up-to-date:
bazel-bin/products/reference/reference.vim3.flash.sh
bazel-bin/products/reference/reference.vim3.flash_workflow.json
INFO: Elapsed time: 0.273s, Critical Path: 0.03s
INFO: 1 process: 1 internal.
INFO: Build completed successfully, 1 total action
INFO: Running command line: bazel-bin/products/reference/_reference.vim3.flash.sh
Running task: reference.vim3.flash (step 1/1)
No `--authorized-keys` flag, using /home/$user/.ssh/fuchsia_authorized_keys
Preparing to upload /home/$user/.cache/bazel/_bazel_$user/98f4d94884500639d789df9d78c04f15/execroot/__main__/bazel-out/k8-fastbuild/bin/products/reference/reference.vim3_out/partitions/u-boot.bin.unsigned
Uploading... Done [0.08s]
Partitioning bootloader... Done [0.18s]
Rebooting to bootloader... Done [4.53s]
Preparing to upload /home/$user/.cache/bazel/_bazel_$user/98f4d94884500639d789df9d78c04f15/execroot/__main__/bazel-out/k8-fastbuild/bin/products/reference/reference.vim3_out/system_a/fuchsia.zbi
Uploading... Done [0.67s]
Partitioning zircon_a... Done [0.61s]
Preparing to upload /home/$user/.cache/bazel/_bazel_$user/98f4d94884500639d789df9d78c04f15/execroot/__main__/bazel-out/k8-fastbuild/bin/products/reference/reference.vim3_out/system_a/fuchsia.vbmeta
Uploading... Done [0.00s]
Partitioning vbmeta_a... Done [0.03s]
Preparing to upload /home/$user/.cache/bazel/_bazel_$user/98f4d94884500639d789df9d78c04f15/execroot/__main__/bazel-out/k8-fastbuild/bin/products/reference/reference.vim3_out/system_a/fxfs.sparse.blk
Uploading... large file, please wait... Done [3.13s]
Partitioning fvm... Done [2.42s]
Preparing to stage /home/$user/.ssh/fuchsia_authorized_keys
Uploading... Done [0.00s]
Sending command "add-staged-bootloader-file ssh.authorized_keys"
Continuing to boot - this could take awhile
Done. Total Time [11.82s]
```
Now you have successfully flashed the reference product to a vim3. You can use
the command below to ssh into the target:
```posix-terminal
tools/ffx target ssh
```
Use the command below to find more commands you can use with your flashed target:
```posix-terminal
tools/ffx target help
```
## Booting up a Fuchsia emulator
Something else you can do is boot the product in an emulator
1. Build and start the emulator
```posix-terminal
tools/bazel run products/reference:reference.x64.emu
```
Optionally, if you want to ssh into the emulator instead of
using the terminal window, use the following command.
```posix-terminal
tools/ffx target ssh
```
## Running a session on the emulator
A session is a component. Each Fuchsia product builds its user experience
within a session
1. Once your emulator is running, you can see that a terminal window pops up on
the screen that shows a fuchsia colored square in the middle. This is part of
the session that automatically runs when you run the product. Run
the following command to see the logs of your session.
```posix-terminal
tools/ffx log --filter reference_session
```
This should print an output similar to the following:
```posix-terminal
[01546.453857][session:session] INFO: Welcome to Fuchsia!
[01546.453896][session:session] INFO: Develop on Fuchsia!
```
Optionally, to stop the session, run the following command
```posix-terminal
tools/ffx session stop
```
You will see that the terminal window no longer has the colored square.
Now, feel free to add your own message to this binary that the session's component runs
and change the color of the square in these following files, respectively.
```posix-terminal
src/reference_session:main.cc
```
```posix-terminal
src/reference_session:graphical_window.cc
```
Close the terminal window and rerun the emulator to test your changes.
<!-- Reference links -->
[clang]: https://clang.llvm.org
[ffx]: https://fuchsia.dev/reference/tools/sdk/ffx
[fuchsia-idk]: https://fuchsia.dev/fuchsia-src/development/idk
[sdk-samples-repo]: https://fuchsia.googlesource.com/sdk-samples/getting-started