blob: d445ed329694c306b9dd44406f31e85f3f912a06 [file] [log] [blame] [view]
# GN C++ Frontend SDK
## Prerequisites
### Supported host platforms and build systems
The GN C++ Frontend SDK samples only support Linux hosts and the [GN build system](https://gn.googlesource.com/gn/).
### Supported Fuchsia device CPU architectures
Fuchsia devices or emulators must have one of the following CPU architectures to run Fuchsia:
* `x64`
* `arm64`
## Setup
1. Install required dependencies:
```shell
sudo apt-get install curl unzip python2
```
1. Clone [the samples repo](https://fuchsia.googlesource.com/samples) and submodules:
```shell
git clone https://fuchsia.googlesource.com/samples --recursive
```
Note: If you have already cloned this repo without the `--recursive` flag you can download the submodules: `git submodule update --init --recursive`
1. Change directory to the root of the repo and run the tests:
```shell
cd samples
./scripts/setup-and-test.sh
```
This script:
* Downloads additional build tool dependencies (may take 5-30 minutes)
* Builds the samples
* Runs tests on your host
If the script fails with an error, address the issue and run the script again.
## Testing on a Fuchsia compatible device
Note: This guide assumes a `x64` Fuchsia compatible device. For Fuchsia compatible ARM devices replace `x64` with `arm64` and `generic-x64` and `generic-arm64` or other compatible image name in the instructions below. For a full list of available images [install gsutil](https://cloud.google.com/storage/docs/gsutil_install) and run: `gsutil ls gs://fuchsia/development/$(gsutil cat gs://fuchsia/development/LATEST_LINUX)/images`
1. Setup your device and install Zedboot:
Find the instructions for your device (e.g. a [NUC](/docs/development/hardware/intel_nuc.md) or [Pixelbook](/docs/development/hardware/pixelbook.md))
to setup and install Zedboot on your device.
1. Create Ninja build files for the samples:
```shell
buildtools/gn gen out/generic-x64 --args='target_os="fuchsia" target_cpu="x64"'
```
1. Build the samples by executing the Ninja build files you created in the previous step:
```shell
buildtools/ninja -C out/generic-x64
```
1. Make sure your Fuchsia device is booted to Zedboot and connected to your host machine the pave your device:
```shell
third_party/fuchsia-sdk/bin/fpave.sh --image=generic-x64
```
1. Start a package server from your host machine:
```shell
third_party/fuchsia-sdk/bin/fserve.sh --image=generic-x64
```
1. To publish your packages open another another terminal window and run:
```shell
third_party/fuchsia-sdk/bin/fpublish.sh out/generic-x64/hello_far.far
third_party/fuchsia-sdk/bin/fpublish.sh out/generic-x64/rot13_server.far
third_party/fuchsia-sdk/bin/fpublish.sh out/generic-x64/rot13_client.far
```
1. Run the sample components on your Fuchsia device:
1. SSH to the device:
```shell
third_party/fuchsia-sdk/bin/fssh.sh
```
1. Once SSHed into the device, run the hello world component on the device:
```shell
run fuchsia-pkg://fuchsia.com/hello_far#meta/hello_far.cmx
```
1. Run the rot13 server:
```shell
run fuchsia-pkg://fuchsia.com/rot13_server#meta/rot13_server.cmx
```
1. In a new terminal window on your host machine, open a new ssh connection to your device, and run the rot13 client:
```shell
third_party/fuchsia-sdk/bin/fssh.sh
run fuchsia-pkg://fuchsia.com/rot13_client#meta/rot13_client.cmx
```
## Links
* [GN C++ Frontend SDK Samples Repository](https://fuchsia.googlesource.com/samples)