# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

template("skyx") {
  bundle_prefix = target_name
  bundle = "$target_gen_dir/${bundle_prefix}.skyx"
  snapshot = "$target_gen_dir/${bundle_prefix}_snapshot.bin"

  action("gen_${bundle_prefix}_snapshot") {
    main_dart = invoker.main_dart

    inputs = [
      main_dart,
    ]
    outputs = [
      snapshot,
    ]

    if (defined(invoker.sources)) {
      inputs += sources
    }

    sky_snapshot_dir =
        get_label_info("//sky/tools/sky_snapshot($host_toolchain)", "root_out_dir")

    script = "//sky/tools/sky_snapshot.py"

    src_dir = "//"
    cwd = rebase_path(src_dir, root_build_dir)

    args = [
      rebase_path("$sky_snapshot_dir/sky_snapshot", src_dir),
      rebase_path(main_dart, src_dir),
      "--package-root", rebase_path("packages"),
      "--snapshot",
      rebase_path(snapshot, src_dir),
      "-C",
      cwd,
    ]

    deps = [
      "//sky/tools/sky_snapshot($host_toolchain)",
    ]

    if (defined(invoker.deps)) {
      deps += invoker.deps
    }
  }

  action("gen_${bundle_prefix}_bundle") {
    asset_base = "//sky/packages/material_design_icons/lib/icons"

    sources = [
      "//sky/tools/skyx/bin/skyx.dart",
      snapshot,
    ]

    outputs = [
      bundle,
    ]

    script = "//sky/tools/skyx.py"
    args = [
      "--package-root",
      rebase_path("//sky/tools/skyx/packages", root_build_dir),
      "--asset-base",
      rebase_path(asset_base, root_build_dir),
      "--snapshot",
      rebase_path(snapshot, root_build_dir),
      "-o",
      rebase_path(bundle, root_build_dir),
    ]

    if (defined(invoker.manifest)) {
      sources += [ invoker.manifest ]
      args += [
        "--manifest",
        rebase_path(invoker.manifest, root_build_dir),
      ]
    }

    deps = [
      ":gen_${bundle_prefix}_snapshot",
    ]
  }

  group(target_name) {
    deps = [
      ":gen_${bundle_prefix}_bundle",
    ]
  }
}
