# 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.

import("//build/compiled_action.gni")
import("//build/fuchsia/sdk.gni")
import("//flutter/common/config.gni")
import("//flutter/tools/fuchsia/dart.gni")
import("//flutter/tools/fuchsia/dart_kernel.gni")
import("//third_party/dart/utils/compile_platform.gni")

dart_kernel("vmservice_product_aot_kernel") {
  kernel_platform_files = "../kernel:kernel_platform_files"
  main_dart = "empty.dart"
  product = true
  aot = true
}

dart_kernel("vmservice_aot_kernel") {
  kernel_platform_files = "../kernel:kernel_platform_files"
  main_dart = "empty.dart"
  product = false
  aot = true
}

template("aot_snapshot") {
  compiled_action(target_name) {
    kernel_name = target_name

    if (defined(invoker.kernel_name)) {
      kernel_name = invoker.kernel_name
    }

    product = defined(invoker.product) && invoker.product

    product_suffix = ""
    if (product) {
      product_suffix = "_product"
    }

    shim_target = ":vmservice${product_suffix}_aot_kernel($host_toolchain)"
    shim_kernel = get_label_info(shim_target, "target_gen_dir") +
                  "/vmservice${product_suffix}_aot_kernel.dill"

    deps = [ shim_target ]

    snapshot_path = "$target_gen_dir/${kernel_name}_snapshot.so"

    inputs = [ shim_kernel ]

    outputs = [ snapshot_path ]

    if (product) {
      tool = gen_snapshot_product
    } else {
      tool = gen_snapshot
    }

    args = [
      "--lazy_async_stacks",
      "--deterministic",
      "--snapshot_kind=app-aot-elf",
      "--elf=" + rebase_path(snapshot_path),
    ]

    # No asserts in debug or release product.
    # No asserts in release with flutter_profile=true (non-product)
    # Yes asserts in non-product debug.
    if (!product && (!(flutter_runtime_mode == "profile") || is_debug)) {
      args += [ "--enable_asserts" ]
    }

    args += [ rebase_path(shim_kernel) ]
  }
}

aot_snapshot("vmservice_snapshot") {
  kernel_name = "vmservice"
  product = false
}
