# Copyright (c) 2018, 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.

_dart_runtime = get_path_info("../runtime", "abspath")

_base_config = [
  "$_dart_runtime:dart_arch_config",
  "$_dart_runtime:dart_config",
  "$_dart_runtime:dart_os_config",
]

_base_fuchsia_config = [
  "$_dart_runtime:dart_arch_config",
  "$_dart_runtime:dart_config",
  "$_dart_runtime:dart_os_fuchsia_config",
]

_maybe_product = [ "$_dart_runtime:dart_maybe_product_config" ]

_product = [ "$_dart_runtime:dart_product_config" ]

_jit_config = _base_config + _maybe_product

_jit_product_config = _base_config + _product

_base_libfuzzer_config = [ "$_dart_runtime:dart_libfuzzer_config" ]

_libfuzzer_config = _base_config + _base_libfuzzer_config

_precompiled_runtime_config =
    _base_config + [
      "$_dart_runtime:dart_maybe_product_config",
      "$_dart_runtime:dart_precompiled_runtime_config",
    ]

_precompiled_runtime_product_config =
    _base_config + [
      "$_dart_runtime:dart_precompiled_runtime_config",
      "$_dart_runtime:dart_product_config",
    ]

_nosnapshot_precompiler_base = [
  "$_dart_runtime:dart_nosnapshot_config",
  "$_dart_runtime:dart_precompiler_config",
]

_nosnapshot_with_precompiler_config =
    _base_config + _nosnapshot_precompiler_base + _maybe_product

_nosnapshot_with_precompiler_product_config =
    _base_config + _nosnapshot_precompiler_base + _product

_nosnapshot_with_precompiler_fuchsia_config =
    _base_fuchsia_config + _nosnapshot_precompiler_base + _maybe_product

_nosnapshot_with_precompiler_product_fuchsia_config =
    _base_fuchsia_config + _nosnapshot_precompiler_base + _product

_all_configs = [
  {
    suffix = "_jit"
    configs = _jit_config
    snapshot = true
  },
  {
    suffix = "_jit_product"
    configs = _jit_product_config
    snapshot = true
  },
  {
    suffix = "_precompiled_runtime"
    configs = _precompiled_runtime_config
    snapshot = true
  },
  {
    suffix = "_precompiled_runtime_product"
    configs = _precompiled_runtime_product_config
    snapshot = true
  },
  {
    suffix = "_nosnapshot_with_precompiler"
    configs = _nosnapshot_with_precompiler_config
    snapshot = false
  },
  {
    suffix = "_nosnapshot_with_precompiler_product"
    configs = _nosnapshot_with_precompiler_product_config
    snapshot = false
  },
  {
    suffix = "_nosnapshot_with_precompiler_fuchsia"
    configs = _nosnapshot_with_precompiler_fuchsia_config
    snapshot = false
  },
  {
    suffix = "_nosnapshot_with_precompiler_product_fuchsia"
    configs = _nosnapshot_with_precompiler_product_fuchsia_config
    snapshot = false
  },
  {
    suffix = "_libfuzzer"
    configs = _libfuzzer_config
    snapshot = true
  },
]

# This template creates a target for each of the configurations listed above.
# For example:
#
#  library_for_all_configs("libfoo") {
#    target_type = "source_set"
#    sources = [ "foo.c" ]
#    configurable_deps [ ":libbar" ]
#  }
#
# will make a source_set target for libfoo_jit, libfoo_jit_product, etc. that
# depends on libbar_jit, libbar_jit_product etc. respectively.
#
# Parameters
#
#  target_type (required):
#    The target declaration or template to repeat for each configuration.
#
#  configurable_deps (optional):
#    Dependencies of this target, which are themselves generated by
#    library_for_all_configs(). The listed dependencies will be suffixed with
#    a string that matches the configuration.
#
#  extra_deps (optional):
#    Regular additional deps that don't receive special treatment.
#
#  extra_configs (optional):
#    Any configs needed in addition to the ones above.
#
#  snapshot_sources (optional):
#    Additional sources to include when the configuration has a snapshot.
#
#  nosnapshot_sources (optional):
#    Additional sources to include when the configuration does not have a
#    snapshot (that is, one of the "nosnapshot" configurations above).
#
#  nosnapshot_deps (optional):
#    Similar to nosnapshot_sources, but for deps.
template("library_for_all_configs") {
  assert(defined(invoker.target_type))
  extra_configs = []
  if (defined(invoker.extra_configs)) {
    extra_configs += invoker.extra_configs
  }
  configurable_deps = []
  if (defined(invoker.configurable_deps)) {
    configurable_deps += invoker.configurable_deps
  }
  extra_deps = []
  if (defined(invoker.extra_deps)) {
    extra_deps += invoker.extra_deps
  }
  foreach(conf, _all_configs) {
    target(invoker.target_type, "${target_name}${conf.suffix}") {
      forward_variables_from(invoker,
                             "*",
                             [
                               "extra_configs",
                               "extra_deps",
                               "configurable_deps",
                             ])
      configs += conf.configs + extra_configs
      configured_deps = []
      foreach(dep, configurable_deps) {
        configured_deps += [ "${dep}${conf.suffix}" ]
      }
      deps = configured_deps + extra_deps
      if (conf.snapshot) {
        if (defined(snapshot_sources)) {
          sources += snapshot_sources
        }
        if (defined(nosnapshot_sources)) {
          not_needed([ "nosnapshot_sources" ])
        }
        if (defined(nosnapshot_deps)) {
          not_needed([ "nosnapshot_deps" ])
        }
      } else {
        if (defined(snapshot_sources)) {
          not_needed([ "snapshot_sources" ])
        }
        if (defined(nosnapshot_sources)) {
          sources += nosnapshot_sources
        }
        if (defined(nosnapshot_deps)) {
          deps += nosnapshot_deps
        }
      }
    }
  }
}
