# Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

import("../../build/dart/dart_action.gni")
import("../../runtime/runtime_args.gni")
import("../../sdk_args.gni")

_dart_root = get_path_info("../..", "abspath")

prebuilt_dart_action("bootstrap_gen_kernel") {
  deps = [
    "$_dart_root/runtime/vm:kernel_platform_files($host_toolchain)",
    "$_dart_root/runtime/vm:vm_platform",
  ]
  gen_kernel_script = "$_dart_root/pkg/vm/bin/gen_kernel.dart"
  platform_dill = "$root_out_dir/vm_platform_strong.dill"
  package_config = rebase_path("$_dart_root/.dart_tool/package_config.json")

  inputs = [
    gen_kernel_script,
    platform_dill,
    package_config,
  ]
  output = "$target_gen_dir/bootstrap_gen_kernel.dill"
  outputs = [ output ]

  depfile = "$output.d"
  vm_args = [
    "--snapshot-kind=kernel",
    "--snapshot=" + rebase_path(output, root_build_dir),
    "--depfile=" + rebase_path(depfile, root_build_dir),

    # Ensure gen_kernel.dart will use this SDK hash when consuming/producing kernel.
    "-Dsdk_hash=$sdk_hash",

    "--packages=" + rebase_path(package_config, root_build_dir),
  ]
  script = gen_kernel_script
  args = []
}

import("../aot_snapshot.gni")

aot_snapshot("gen_kernel") {
  main_dart = "../../pkg/vm/bin/gen_kernel.dart"
  deps = [ "../../runtime/vm:vm_platform" ]
  output = "$root_gen_dir/gen_kernel_aot.dart.snapshot"

  # dartaotruntime has dart_product_config applied to it,
  # so it is built in # product mode in both release and
  # product builds, and is only built in debug mode in debug
  # builds. The following line ensures that the dartaotruntime
  # and gen_kernel_aot snapshot in an SDK build are
  # always compatible with each other.
  force_product_mode = !dart_debug
}
