# Copyright 2019 The Fuchsia 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/config.gni")

runner_config_file = "flutter_runner_config"
runner_types = [
  "jit",
  "jit_product",
  "aot",
  "aot_product",
]

# Generate targets to package together the runner and its configuration data for
# each runner type.
#
# The runner configuration is located in `flutter_runner_config` and shared by
# all runner types.
all_flutter_runners = []
foreach(type, runner_types) {
  runner_target = "flutter_$type"
  config_target = "runner_config_for_" + runner_target
  all_flutter_runners += [ ":" + runner_target ]

  config_data(config_target) {
    for_pkg = runner_target + "_runner"
    sources = [ rebase_path(runner_config_file) ]
    outputs = [ runner_config_file ]
  }

  group(runner_target) {
    public_deps = [
      ":" + config_target,
      "//src/lib/icu/tzdata:icu_tzdata_for_flutter_${type}_runner",
      "//topaz/runtime/flutter_runner:flutter_${type}_runner",
    ]
  }
}

group("flutter") {
  public_deps = all_flutter_runners
}

group("tests") {
  testonly = true
  deps = [ "tests" ]
}
