| # Dart |
| |
| |
| ## Overview |
| |
| Dart artifacts are not built the same way in Fuchsia as they are on other |
| platforms. |
| |
| Instead of relying on [`pub`][pub] to manage dependencies, sources of |
| third-party packages we depend on are checked into the tree under |
| `//third_party/dart-pkg`. |
| This is to ensure we use consistent versions of our dependencies across multiple |
| builds. |
| |
| Likewise, no build output is placed in the source tree as everything goes under |
| `out/`. That includes `.packages` files, which are generated as part of the build |
| based on a target's dependency. |
| |
| ## Exiting Dart programs |
| |
| The Dart runner for Fuchsia does not |
| monitor the FIDL channels opened by Dart programs and as a result does not end |
| the program normally, but rather waits for the explicit call to `fuchsia.exit()` |
| to indicate the program should be ended. |
| |
| Note: Calling exit() from dart:io will result in an exception since components |
| are not allowed to call this method since it would shutdown the dart_runner process. |
| |
| ```dart |
| import 'package:fuchsia/fuchsia.dart' as fuchsia; |
| |
| void main(List<String> args) { |
| print('Hello Dart!'); |
| fuchsia.exit(23); |
| } |
| ``` |
| |
| |
| ## Targets |
| |
| There are five gn targets for building Dart: |
| |
| - [`dart_library`][target-library] defines a library that can be used by other |
| Dart targets; |
| - [`dart_app`][target-app] defines a Dart executable for Fuchsia; |
| - [`dart_tool`][target-tool] defines a Dart tool for the host; |
| - [`flutter_app`][target-flutter] defines a [Flutter][flutter] application; |
| - [`dart_test`][target-test] defines a group of test. |
| |
| See the definitions of each of these targets for how to use them. |
| |
| |
| ## Package layout {#layout} |
| |
| We use a layout very similar to the [standard layout][package-layout]. |
| |
| ``` |
| my_package/ |
| | |
| |-- pubspec.yaml # Empty, used as a marker [mandatory] |
| |-- BUILD.gn # Contains all targets |
| |-- analysis_options.yaml # Analysis configuration [mandatory] |
| |-- lib/ # dart_library contents |
| |-- bin/ # dart_binary's (target) or dart_tool's (host) |
| |-- test/ # dart_test contents |
| ``` |
| |
| ## Going further |
| |
| - [Running analysis](analysis.md) |
| - [Style](style.md) |
| - [Testing](testing.md) |
| - [Logging](logging.md) |
| - [Using FIDL](fidl.md) |
| - [Managing third_party dependencies](third_party.md) |
| - [IDEs](ides.md) |
| |
| |
| [pub]: https://www.dartlang.org/tools/pub/get-started "Pub" |
| [package-layout]: https://www.dartlang.org/tools/pub/package-layout "Package layout" |
| [target-library]: /build/dart/dart_library.gni "dart_library target" |
| [target-app]: https://fuchsia.googlesource.com/topaz/+/HEAD/runtime/dart_runner/dart_app.gni "dart_app target" |
| [target-tool]: /build/dart/dart_tool.gni "dart_tool target" |
| [target-flutter]: https://fuchsia.googlesource.com/topaz/+/HEAD/runtime/flutter_runner/flutter_app.gni "flutter_app target" |
| [target-test]: /build/dart/dart.gni "dart_test target" |
| [flutter]: https://flutter.io/ "Flutter" |