# 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"
  dot_packages = rebase_path("$_dart_root/.dart_tool/package_config.json")

  inputs = [
    gen_kernel_script,
    platform_dill,
    dot_packages,
  ]
  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(dot_packages, 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
}
