[dart] Support multi-root URIs in --packages option in kernel compiler

Test: changed dart_kernel build rule to always use multi-root filesystem URI in --packages option.

Change-Id: Ib8162582272e4e4fcb8b419bab345a26f0c2dfba
diff --git a/runtime/dart/compiler.dart b/runtime/dart/compiler.dart
index 570f109..0f74cd4 100644
--- a/runtime/dart/compiler.dart
+++ b/runtime/dart/compiler.dart
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import 'dart:async';
-import 'dart:io';
+import 'dart:io' hide FileSystemException;
 
 import 'package:args/args.dart';
 
@@ -134,12 +134,22 @@
   // fuchsia-source:///x/y/main.dart -> file:///a/b/x/y/main.dart
   String mainUriString = (await _asFileUri(fileSystem, mainUri)).toString();
   // file:///a/b/x/y/main.dart -> package:x.y/main.dart
-  for (var line in await new File(packagesUri.toFilePath()).readAsLines()) {
+  for (var line in await new File(
+          (await _asFileUri(fileSystem, packagesUri)).toFilePath())
+      .readAsLines()) {
     var colon = line.indexOf(':');
     if (colon == -1)
       continue;
     var packageName = line.substring(0, colon);
-    var packagePath = line.substring(colon + 1);
+    String packagePath;
+    try {
+      packagePath = (await _asFileUri(
+          fileSystem, packagesUri.resolve(line.substring(colon + 1))))
+          .toString();
+    } on FileSystemException {
+      // Can't resolve package path.
+      continue;
+    }
     if (mainUriString.startsWith(packagePath)) {
       mainUri = Uri.parse('package:$packageName/${mainUriString.substring(packagePath.length)}');
       break;
diff --git a/runtime/dart/dart_kernel.gni b/runtime/dart/dart_kernel.gni
index f8758b1..1e2b49d 100644
--- a/runtime/dart/dart_kernel.gni
+++ b/runtime/dart/dart_kernel.gni
@@ -103,7 +103,7 @@
     dart_target_gen_dir =
         get_label_info(":bogus($dart_toolchain)", "target_gen_dir")
     rebased_packages_path =
-        rebase_path("$dart_target_gen_dir/$dart_library_target_name.packages")
+        rebase_path("$dart_target_gen_dir/$dart_library_target_name.packages", "//")
 
     multi_root_scheme = "fuchsia-source"
 
@@ -118,7 +118,7 @@
              "--multi-root",
              rebase_path("//"),
              "--packages",
-             rebased_packages_path,
+             "$multi_root_scheme:///$rebased_packages_path",
              "--depfile",
              rebase_path(depfile, root_build_dir),
              "--output",