Google celebrates Pride Month. See how.

Dart

Overview

Dart artifacts are not built the same way in Fuchsia as they are on other platforms.

Instead of relying on 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 package_config.json 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.

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 defines a library that can be used by other Dart targets;
  • dart_component defines a Fuchsia component based on a Dart library, that can be packaged using GN targets fuchsia_package or fuchsia_test_package;
  • dart_tool defines a Dart tool for the host;
  • flutter_component defines a Flutter component;
  • dart_test defines a group of test.

See the definitions of each of these targets for how to use them.

Package layout

We use a layout very similar to the standard 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