BUILD.gn 4.2 KB
Newer Older
1 2 3 4
# Copyright 2013 The Flutter Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

5 6 7 8
import("//build/compiled_action.gni")
import("//third_party/dart/build/dart/dart_action.gni")
import("$flutter_root/common/fuchsia_config.gni")
import("$flutter_root/tools/fuchsia/dart.gni")
9

10 11 12
template("dart_shim_kernel") {
  prebuilt_dart_action(target_name) {
    assert(defined(invoker.main_dart), "main_dart is a required parameter.")
13

14
    main_dart = rebase_path(invoker.main_dart)
15

16 17 18
    deps = [
      "../kernel:kernel_platform_files($host_toolchain)",
    ]
19

20 21
    gen_kernel_script = "//third_party/dart/pkg/vm/bin/gen_kernel.dart"
    platform_dill = "$root_out_dir/dart_runner_patched_sdk/platform_strong.dill"
22

23
    dot_packages = rebase_path("//third_party/dart/.packages")
24

25 26 27 28 29
    inputs = [
      gen_kernel_script,
      main_dart,
      dot_packages,
    ]
30

31 32 33 34
    output = "$target_gen_dir/$target_name.dill"
    outputs = [
      output,
    ]
35

36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
    depfile = "$output.d"
    abs_depfile = rebase_path(depfile)
    rebased_output = rebase_path(output, root_build_dir)
    vm_args = [
      "--depfile=$abs_depfile",
      "--depfile_output_filename=$rebased_output",
    ]

    script = gen_kernel_script

    args = [
      "--packages=" + rebase_path(dot_packages),
      "--target=dart_runner",
      "--platform=" + rebase_path(platform_dill),
      "--no-link-platform",
      "--output=" + rebase_path(output),
    ]

    if (is_debug) {
      args += [ "--embed-sources" ]
    } else {
      args += [ "--no-embed-sources" ]
    }
59

60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
    if (defined(invoker.aot) && invoker.aot) {
      args += [
        "--aot",
        "--tfa",
      ]
    }

    if (defined(invoker.product) && invoker.product) {
      # Setting this flag in a non-product release build for AOT (a "profile"
      # build) causes the vm service isolate code to be tree-shaken from an app.
      # See the pragma on the entrypoint here:
      #
      # https://github.com/dart-lang/sdk/blob/master/runtime/bin/vmservice/vmservice_io.dart#L240
      #
      # Also, this define excludes debugging and profiling code from Flutter.
      args += [ "-Ddart.vm.product=true" ]
    } else {
      if (!is_debug) {
        # The following define excludes debugging code from Flutter.
        args += [ "-Ddart.vm.profile=true" ]
      }
    }

    visibility = [ ":*" ]

    args += [ rebase_path(main_dart) ]
  }
}

dart_shim_kernel("shim_kernel") {
  main_dart = "shim.dart"
  product = false
92
  aot = true
93
}
94

95 96 97 98
dart_shim_kernel("shim_product_kernel") {
  main_dart = "shim.dart"
  product = true
  aot = true
99 100 101 102 103 104 105 106
}

template("create_aot_snapshot") {
  assert(defined(invoker.product), "The parameter 'product' must be defined")
  product_suffix = ""
  if (invoker.product) {
    product_suffix = "_product"
  }
107
  compiled_action("${target_name}_assembly") {
108 109 110 111 112
    snapshot_assembly = "$target_gen_dir/aot${product_suffix}_vm_snapshot.S"

    # gen_snapshot only needs this to go through the motions of setting up an isolate.
    shim_target = ":shim${product_suffix}_kernel"
    shim_kernel = get_label_info(shim_target, "target_gen_dir") +
113
                  "/shim${product_suffix}_kernel.dill"
114 115 116 117 118 119 120 121

    inputs = [
      shim_kernel,
    ]
    outputs = [
      snapshot_assembly,
    ]

122 123 124
    deps = [
      shim_target,
    ]
125
    if (invoker.product) {
126
      tool = gen_snapshot_product
127
    } else {
128
      tool = gen_snapshot
129 130 131 132 133 134 135 136 137 138 139 140
    }

    args = [
      "--no_causal_async_stacks",
      "--deterministic",
      "--snapshot_kind=vm-aot-assembly",
      "--assembly=" + rebase_path(snapshot_assembly),
    ]

    # No asserts in debug or release product.
    # No asserts in release with flutter_profile=true (non-product)
    # Yes asserts in non-product debug.
141
    if (!invoker.product && (!(flutter_runtime_mode == "profile") || is_debug)) {
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
      args += [ "--enable_asserts" ]
    }
    args += [ rebase_path(shim_kernel) ]
  }

  source_set(target_name) {
    deps = [
      ":${target_name}_assembly",
    ]

    sources = [
      "$target_gen_dir/aot${product_suffix}_vm_snapshot.S",
      "snapshot.h",
    ]
  }
}

create_aot_snapshot("dart_aot_snapshot_cc") {
  product = false
}

create_aot_snapshot("dart_aot_product_snapshot_cc") {
  product = true
}