blob: ab8afad7ce42230272c4de8d4ea36c0aadd7b698 [file] [log] [blame] [view]
# GN SDK
The GN SDK frontend produces a [GN](https://gn.googlesource.com/gn/+/refs/heads/master/README.md) workspace.
## Directory structure
### Generation files & folders
- `generate.py`: the script that generates the SDK
- `BUILD.gn`: GN build rules to build & test the GN SDK and generation process
- `templates`: Mako templates used to produce various SDK files
- `base`: SDK contents that are copied verbatim
### Testing files & folders
- `test_generate.py`: script to test the GN SDK generation process
- `update_golden.py`: script to update the contents of the golden directory
- `host_test.go`: Go script to run test defined in GN build rules
- `testdata`: files used as input during tests
- `golden`: files used to verify generator output during tests
- `test_project`: GN project used to test building a projects with the GN SDK
- `bash_tests`: contains test for bash scripts in base/bin
## Generating
1. Create the GN build rules to build the GN SDK:
`fx set core.x64 --with //scripts/sdk/gn:gn_sdk_test_workspace --args="build_sdk_archives=true"`
1. Build the build rules to build the GN SDK:
`fx build`
The built SDK will be in `//${ROOT_OUT_DIR}/sdk/gn/fuchsia-sdk` (usually `//out/default/sdk/gn/fuchsia-sdk`)
### Manual generation steps
The above instructions is not what is run during testing and CQ. The GN build step performs the following steps which is run in CQ:
1. Generate a IDK/core SDK:
```
fx set core.x64 --with //sdk:core --args="build_sdk_archives=true"
fx build
```
1. Run the generate script:
```sh
$ scripts/sdk/gn/generate.py \
--archive out/default/sdk/archive/core.tar.gz \
--output gn_sdk_dir
```
### Testing
#### Execute GN SDK scripts
The internal GN SDK helper scripts can be executed after the GN SDK has been generated.
```sh
$ gn_sdk_dir/bin/fserve.sh
$ gn_sdk_dir/bin/fpave.sh
$ gn_sdk_dir/bin/fssh.sh
$ gn_sdk_dir/bin/femu.sh
```
#### SDK generator tests
To test the generator, run the `test_generate.py` script.
```sh
$ scripts/sdk/gn/test_generate.py
```
This runs the generator against the `testdata` directory and compares the output
to the files in the `golden` directory.
After making changes to the generator, update the contents of `testdata` as
needed to exercise your new code, then run the `update_golden.py` script to fix
the `golden` files.
```sh
$ scripts/sdk/gn/update_golden.py
```
Commit your changes to the generator, `testdata` contents, and `golden` contents
together.
#### Bash scripts test
Make sure the tests are part of your build by adding `--with //scripts/sdk/gn:tests` to your `fx set` command.
To test the bash scripts, run `fx test gn_sdk_script_tests`
#### Test project test
To test the SDK on a test project, the `generate.py` must be run with the `--tests` flag. `generate.py` requires a IDK (integrator development kit) build
1. Download the latest IDK (integrator development kit) to a temporary
directory (assuming the current directory is $FUCHSIA_DIR):
```sh
$ mkdir out/temp
$ BUILD_ID="$(gsutil cat gs://fuchsia/development/LATEST_LINUX)"
gsutil cp gs://fuchsia/development/$BUILD_ID/sdk/linux-amd64/core.tar.gz out/temp/idk.tar.gz
```
1. Generate the test workspace into a temporary directory:
```sh
$ scripts/sdk/gn/generate.py \
--archive out/temp/idk.tar.gz \
--output out/temp/gn_sdk_dir/ \
--tests out/temp/test_workspace
```
1. Run the `run.py` file in the test workspace:
```sh
$ out/temp/test_workspace/run.py
```