Google is committed to advancing racial equity for Black communities. 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 .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.

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:

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