# Copyright (c) 2024, 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("../sdk_args.gni")

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

template("aot_compile_using_prebuilt_sdk") {
  action(target_name) {
    forward_variables_from(invoker,
                           [
                             "deps",
                             "pool",
                             "testonly",
                             "visibility",
                           ])

    script = "$_dart_root/build/gn_dart_compile_exe.py"

    inputs = [
      invoker.entry_point,
      invoker.package_config,
    ]

    outputs = [ invoker.output ]

    depfile = invoker.output + ".d"

    # TODO(vegorov): support RBE by using rewrapper script.
    args = [
      "--dart-sdk",
      rebase_path("$_dart_root/tools/sdks/dart-sdk", root_build_dir),
      "--sdk-hash",
      "$sdk_hash",
      "--entry-point",
      rebase_path(invoker.entry_point, root_build_dir),
      "--output",
      rebase_path(invoker.output, root_build_dir),
      "--packages",
      rebase_path(invoker.package_config, root_build_dir),
      "--depfile",
      rebase_path(depfile, root_build_dir),
    ]
  }
}

aot_compile_using_prebuilt_sdk("compile_platform.exe") {
  entry_point = "$_dart_root/pkg/front_end/tool/compile_platform.dart"
  output = "$root_out_dir/compile_platform.exe"
  package_config = "$_dart_root/.dart_tool/package_config.json"
}

aot_compile_using_prebuilt_sdk("gen_kernel.exe") {
  entry_point = "$_dart_root/pkg/vm/bin/gen_kernel.dart"
  output = "$root_out_dir/gen_kernel.exe"
  package_config = "$_dart_root/.dart_tool/package_config.json"
}
