# 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)
