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

# This GN file contains build rules for assembling the Dart SDK. There are
# two possible variants: the "Full" SDK, and the "Platform" SDK. If you want
# to make a new subset of the Full SDK, make it the same way we make
# the Platform SDK.
#
# Warning:
# If you need to copy something into dart-sdk/lib/foo in addition to the stuff
# copied there by :copy_libraries, then you must depend on ":copy_libraries",
# or ":copy_libraries" may delete/overwrite your addition, and the build will
# fail.

import("../build/dart/copy_tree.gni")
import("../build/executable_suffix.gni")
import("../runtime/runtime_args.gni")
import("../sdk_args.gni")

declare_args() {
  # Build a SDK with less stuff. It excludes dart2js, ddc, and web libraries.
  dart_platform_sdk = true

  # Path to stripped dart binaries relative to build output directory.
  dart_stripped_binary = "dart"
  dart_precompiled_runtime_stripped_binary = "dart_precompiled_runtime_product"
  gen_snapshot_stripped_binary = "gen_snapshot_product"
}

# The directory layout of the SDK is as follows:
#
# ..dart-sdk/
# ....bin/
# ......dart or dart.exe (executable)
# ......dart.lib (import library for VM native extensions on Windows)
# ......dartaotruntime or dartaotruntime.exe (executable)
# ......dartdoc
# ......dartfmt
# ......dart2native (if not on ia32)
# ......dart2js
# ......dartanalyzer
# ......dartdevc
# ......utils/gen_snapshot or utils/gen_snapshot.exe (if not on ia32)
# ......pub
# ......snapshots/
# ........analysis_server.dart.snapshot
# ........dart2js.dart.snapshot
# ........dart2native.dart.snapshot (if not on ia32)
# ........dartanalyzer.dart.snapshot
# ........dartdev.dart.snapshot
# ........dartdev.dill
# ........dartdevc.dart.snapshot
# ........dartdoc.dart.snapshot
# ........dartfmt.dart.snapshot
# ........dds.dart.snapshot
# ........frontend_server.dart.snapshot
# ........gen_kernel.dart.snapshot (if not on ia32)
# ........kernel-service.dart.snapshot
# ........kernel_worker.dart.snapshot
# ........pub.dart.snapshot
# ......resources/
# ........dartdoc/
# ...........packages
# ..........resources/
# ..........templates/
# ....include/
# ......dart_api.h
# ......dart_native_api.h
# ......dart_tools_api.h
# ....lib/
# ......libraries.json
# ......_internal/
# ........strong.sum
# ........dart2js_platform.dill
# ........dart2js_server_platform.dill
# ........dart2js_platform_strong.dill
# ........dart2js_server_platform_strong.dill
# ........vm_platform_strong.dill
# ........dev_compiler/
# ......async/
# ......collection/
# ......convert/
# ......core/
# ......html/
# ......_http/
# ......internal/
# ......io/
# ......isolate/
# ......js/
# ......js_util/
# ......math/
# ......mirrors/
# ......typed_data/
# ......api_readme.md

# Scripts that go under bin/
_platform_sdk_scripts = [
  "dartanalyzer",
  "dartfmt",
  "pub",
]

_full_sdk_scripts = [
  "dart2js",
  "dartanalyzer",
  "dartdevc",
  "dartfmt",
  "pub",
]

# Scripts not ending in _sdk that go under bin/
_scripts = [ "dartdoc" ]

# Snapshots that go under bin/snapshots
_platform_sdk_snapshots = [
  [
    "dartanalyzer",
    "../utils/dartanalyzer:generate_dartanalyzer_snapshot",
  ],
  [
    "dartdev",
    "../utils/dartdev:dartdev",
  ],
  [
    "dartdoc",
    "../utils/dartdoc",
  ],
  [
    "dartfmt",
    "../utils/dartfmt",
  ],
  [
    "dds",
    "../utils/dds:dds",
  ],
  [
    "pub",
    "../utils/pub",
  ],
]
if (dart_target_arch != "ia32") {
  _platform_sdk_snapshots += [ [
        "dart2native",
        "../utils/dart2native:generate_dart2native_snapshot",
      ] ]
}
if (create_kernel_service_snapshot) {
  _platform_sdk_snapshots += [ [
        "kernel-service",
        "../utils/kernel-service:kernel-service_snapshot",
      ] ]
}
if (dart_target_arch != "arm") {
  _platform_sdk_snapshots += [ [
        "analysis_server",
        "../utils/analysis_server",
      ] ]
}

_full_sdk_snapshots = _platform_sdk_snapshots + [
                        [
                          "dart2js",
                          "../utils/compiler:dart2js",
                        ],
                        [
                          "dartdevc",
                          "../utils/dartdevc",
                        ],
                        [
                          "kernel_worker",
                          "../utils/bazel:kernel_worker",
                        ],
                        [
                          "frontend_server",
                          "../utils/kernel-service:frontend_server",
                        ],
                      ]

# Libraries that go under lib/
_full_sdk_libraries = [
  "_internal",
  "async",
  "cli",
  "collection",
  "convert",
  "core",
  "developer",
  "ffi",
  "html",
  "_http",
  "indexed_db",
  "internal",
  "io",
  "isolate",
  "js",
  "js_util",
  "math",
  "mirrors",
  "svg",
  "typed_data",
  "web_audio",
  "web_gl",
  "web_sql",
]

# Apps running on the platform SDK shouldn't be using Dart4Web libraries, but
# the analyzer and dartdoc expect all the library sources to be present.
#
# _platform_sdk_libraries = [
#   "_internal",
#   "async",
#   "cli",
#   "collection",
#   "convert",
#   "core",
#   "developer",
#   "html",
#   "_http",
#   "internal",
#   "io",
#   "isolate",
#   "math",
#   "mirrors",
#   "typed_data",
# ]
_platform_sdk_libraries = _full_sdk_libraries

# From here down to the copy_trees() invocation, we collect all the information
# about trees that need to be copied in the list of scopes, copy_tree_specs.
copy_tree_specs = []

# This rule copies dartdoc templates to
# bin/resources/dartdoc/templates
copy_tree_specs += [
  {
    target = "copy_dartdoc_templates"
    visibility = [ ":copy_dartdoc_files" ]
    source = "../third_party/pkg/dartdoc/lib/templates"
    dest = "$root_out_dir/dart-sdk/bin/resources/dartdoc/templates"
    ignore_patterns = "{}"
  },
]

# This rule copies dartdoc resources to
# bin/resources/dartdoc/resources
copy_tree_specs += [
  {
    target = "copy_dartdoc_resources"
    visibility = [ ":copy_dartdoc_files" ]
    source = "../third_party/pkg/dartdoc/lib/resources"
    dest = "$root_out_dir/dart-sdk/bin/resources/dartdoc/resources"
    ignore_patterns = "{}"
  },
]

# This loop generates rules to copy libraries to lib/
foreach(library, _full_sdk_libraries) {
  copy_tree_specs += [
    {
      target = "copy_${library}_library"
      visibility = [
        ":copy_platform_sdk_libraries",
        ":copy_full_sdk_libraries",
      ]
      source = "lib/$library"
      dest = "$root_out_dir/dart-sdk/lib/$library"
      ignore_patterns = "*.svn,doc,*.py,*.gypi,*.sh,.gitignore"
    },
  ]
}

if (is_win) {
  copy_tree_specs += [
    {
      target = "copy_7zip"
      visibility = [ ":create_common_sdk" ]
      deps = [ ":copy_libraries" ]
      source = "../third_party/7zip"
      dest = "$root_out_dir/dart-sdk/lib/_internal/pub/asset/7zip"
      ignore_patterns = ".svn"
    },
  ]
}

# This generates targets for everything in copy_tree_specs. The targets have the
# same name as the "target" fields in the scopes of copy_tree_specs.
copy_trees("copy_trees") {
  sources = copy_tree_specs
}

# Copies the Dart VM binary into bin/
if (target_os != current_os && target_os == "fuchsia") {
  # In the Fuchsia build, this has to use a symlink for two reasons.
  # First, it makes the lookup of shared libraries relative to $ORIGIN
  # (Linux) or @loader_path (macOS) find the libraries where they are,
  # since those lookups use the directory of the symlink target rather
  # than of the link itself (as they would for a copy or hard link).
  # Second, when the dart binary is built as a "variant" (e.g. with a
  # sanitizer), then $root_out_dir/dart is itself a symlink to the real
  # binary in the selected variant toolchain's $root_out_dir and since
  # the "copy" tool is actually a hard link rather than a copy, it will
  # make a link to the symlink rather than the symlink's target, and the
  # relative symlink interpreted from a different containing directory
  # will not find the actual binary.
  action("copy_dart") {
    visibility = [ ":create_common_sdk" ]
    dart_label = "../runtime/bin:dart"
    deps = [ dart_label ]
    dart_out = get_label_info(dart_label, "root_out_dir")
    sources = [ "$dart_out/$dart_stripped_binary" ]
    outputs = [ "$root_out_dir/dart-sdk/bin/$dart_stripped_binary" ]
    script = "/bin/ln"
    args = [
      "-snf",
      rebase_path(sources[0], get_path_info(outputs[0], "dir")),
      rebase_path(outputs[0]),
    ]
  }
} else {
  copy("copy_dart") {
    visibility = [ ":create_common_sdk" ]
    deps = [ "../runtime/bin:dart" ]
    dart_out = get_label_info("../runtime/bin:dart", "root_out_dir")
    sources = [ "$dart_out/${dart_stripped_binary}${executable_suffix}" ]
    if (is_win && dart_lib_export_symbols) {
      sources += [ "$dart_out/dart.lib" ]
    }
    outputs = [ "$root_out_dir/dart-sdk/bin/{{source_file_part}}" ]
  }
}

copy("copy_dartaotruntime") {
  visibility = [ ":copy_dart2native" ]
  deps = [ "../runtime/bin:dart_precompiled_runtime_product" ]
  src_dir = get_label_info("../runtime/bin:dart_precompiled_runtime_product",
                           "root_out_dir")
  sources = [
    "$src_dir/${dart_precompiled_runtime_stripped_binary}${executable_suffix}",
  ]
  outputs = [ "$root_out_dir/dart-sdk/bin/dartaotruntime${executable_suffix}" ]
}

copy("copy_gen_snapshot") {
  visibility = [ ":copy_dart2native" ]
  deps = [ "../runtime/bin:gen_snapshot_product" ]
  src_dir =
      get_label_info("../runtime/bin:gen_snapshot_product", "root_out_dir")
  sources = [ "$src_dir/${gen_snapshot_stripped_binary}${executable_suffix}" ]
  outputs =
      [ "$root_out_dir/dart-sdk/bin/utils/gen_snapshot${executable_suffix}" ]
}

copy("copy_vm_platform_strong_product") {
  visibility = [ ":copy_dart2native" ]
  deps = [ "../runtime/vm:vm_platform_product" ]
  src_dir = get_label_info("../runtime/vm:vm_platform_product", "root_out_dir")
  sources = [ "$src_dir/vm_platform_strong_product.dill" ]
  outputs = [ "$root_out_dir/dart-sdk/lib/_internal/{{source_file_part}}" ]
}

copy("copy_dart2native") {
  deps = [
    ":copy_dartaotruntime",
    ":copy_gen_kernel_snapshot",
    ":copy_gen_snapshot",
    ":copy_vm_platform_strong_product",
  ]
  ext = ""
  if (is_win) {
    ext = ".bat"
  }
  sources = [ "bin/dart2native$ext" ]
  outputs = [ "$root_out_dir/dart-sdk/bin/{{source_file_part}}" ]
}

copy("copy_gen_kernel_snapshot") {
  visibility = [ ":copy_dart2native" ]
  deps = [ "../utils/gen_kernel" ]
  sources = [ "$root_gen_dir/gen_kernel.dart.snapshot" ]
  outputs = [ "$root_out_dir/dart-sdk/bin/snapshots/{{source_file_part}}" ]
}

# A template for copying the things in _platform_sdk_scripts and
# _full_sdk_scripts into bin/
template("copy_sdk_script") {
  assert(defined(invoker.name), "copy_sdk_script must define 'name'")
  name = invoker.name
  ext = ""
  if (is_win) {
    ext = ".bat"
  }
  copy(target_name) {
    visibility = [
      ":copy_platform_sdk_scripts",
      ":copy_full_sdk_scripts",
    ]
    sources = [ "bin/${name}_sdk$ext" ]
    outputs = [ "$root_out_dir/dart-sdk/bin/$name$ext" ]
  }
}

foreach(sdk_script, _full_sdk_scripts) {
  copy_sdk_script("copy_${sdk_script}_script") {
    name = sdk_script
  }
}

foreach(script, _scripts) {
  copy("copy_${script}_script") {
    visibility = [
      ":copy_platform_sdk_scripts",
      ":copy_full_sdk_scripts",
    ]
    ext = ""
    if (is_win) {
      ext = ".bat"
    }
    sources = [ "bin/$script$ext" ]
    outputs = [ "$root_out_dir/dart-sdk/bin/{{source_file_part}}" ]
  }
}

# This is the main target for copying scripts in _platform_sdk_scripts to bin/
group("copy_platform_sdk_scripts") {
  visibility = [ ":_create_platform_sdk" ]
  public_deps = []
  foreach(sdk_script, _platform_sdk_scripts) {
    public_deps += [ ":copy_${sdk_script}_script" ]
  }
  foreach(script, _scripts) {
    public_deps += [ ":copy_${script}_script" ]
  }
}

# This is the main target for copying scripts in _full_sdk_scripts to bin/
group("copy_full_sdk_scripts") {
  visibility = [ ":create_full_sdk" ]
  public_deps = []
  foreach(sdk_script, _full_sdk_scripts) {
    public_deps += [ ":copy_${sdk_script}_script" ]
  }
  foreach(script, _scripts) {
    public_deps += [ ":copy_${script}_script" ]
  }
}

# This loop generates "copy" targets that put snapshots into bin/snapshots
foreach(snapshot, _full_sdk_snapshots) {
  root = root_gen_dir

  # The frontend_server is output to root_out_dir so that it doesn't conflict
  # with the flutter snapshot by the same name under root_gen_dir.
  if (snapshot[0] == "frontend_server") {
    root = root_out_dir
  }
  copy("copy_${snapshot[0]}_snapshot") {
    visibility = [
      ":copy_platform_sdk_snapshots",
      ":copy_full_sdk_snapshots",
    ]
    deps = [ snapshot[1] ]
    sources = [ "$root/${snapshot[0]}.dart.snapshot" ]
    outputs = [ "$root_out_dir/dart-sdk/bin/snapshots/{{source_file_part}}" ]
  }
}

# This is the main rule for copying snapshots from _platform_sdk_snapshots to
# bin/snapshots
group("copy_platform_sdk_snapshots") {
  visibility = [ ":_create_platform_sdk" ]
  public_deps = []
  foreach(snapshot, _platform_sdk_snapshots) {
    public_deps += [ ":copy_${snapshot[0]}_snapshot" ]
  }
}

# This is the main rule for copying snapshots from _full_sdk_snapshots to
# bin/snapshots
group("copy_full_sdk_snapshots") {
  visibility = [ ":create_full_sdk" ]
  public_deps = []
  foreach(snapshot, _full_sdk_snapshots) {
    public_deps += [ ":copy_${snapshot[0]}_snapshot" ]
  }
}

# This rule writes the .packages file for dartdoc resources.
write_file("$root_out_dir/dart-sdk/bin/resources/dartdoc/.packages",
           "dartdoc:.")

# This is the main rule for copying the files that dartdoc needs.
group("copy_dartdoc_files") {
  visibility = [ ":create_common_sdk" ]
  public_deps = [
    ":copy_dartdoc_resources",
    ":copy_dartdoc_templates",
  ]
}

# This rule copies analyzer summaries to lib/_internal
copy("copy_analysis_summaries") {
  visibility = [ ":create_common_sdk" ]
  deps = [
    ":copy_libraries",
    "../utils/dartanalyzer:generate_summary_strong",
  ]
  sources = [ "$root_gen_dir/strong.sum" ]
  outputs = [ "$root_out_dir/dart-sdk/lib/_internal/{{source_file_part}}" ]
}

copy("copy_wasmer") {
  visibility = [ ":create_common_sdk" ]
  deps = [
    ":copy_libraries",
    "../third_party/wasmer:wasmer_wrap",
  ]
  if (is_win) {
    prefix = ""
    suffix = "dll"
  } else if (is_mac) {
    prefix = "lib"
    suffix = "dylib"
  } else {
    # TODO(dartbug.com/37882): Support Fuchsia.
    prefix = "lib"
    suffix = "so"
  }
  sources = [ "$root_out_dir/${prefix}wasmer_wrap.$suffix" ]
  outputs = [
    "$root_out_dir/dart-sdk/bin/third_party/wasmer/${prefix}wasmer.$suffix",
  ]
}

# This rule copies dill files to lib/_internal.
copy("copy_vm_dill_files") {
  visibility = [ ":create_common_sdk" ]
  deps = [
    ":copy_libraries",
    "../runtime/vm:kernel_platform_files",
  ]
  sources = [ "$root_out_dir/vm_platform_strong.dill" ]
  outputs = [ "$root_out_dir/dart-sdk/lib/_internal/{{source_file_part}}" ]
}

copy("copy_dartdev_dill_files") {
  visibility = [ ":create_common_sdk" ]
  deps = [
    ":copy_libraries",
    "../utils/dartdev:dartdev",
  ]
  sources = [ "$root_out_dir/dartdev.dill" ]
  outputs = [ "$root_out_dir/dart-sdk/bin/snapshots/{{source_file_part}}" ]
}

copy("copy_dart2js_dill_files") {
  visibility = [ ":create_full_sdk" ]
  deps = [
    ":copy_libraries",
    "../utils/compiler:compile_dart2js_nnbd_strong_platform",
    "../utils/compiler:compile_dart2js_platform",
    "../utils/compiler:compile_dart2js_server_nnbd_strong_platform",
    "../utils/compiler:compile_dart2js_server_platform",
  ]
  sources = [
    "$root_out_dir/dart2js_nnbd_strong_platform.dill",
    "$root_out_dir/dart2js_platform.dill",
    "$root_out_dir/dart2js_server_nnbd_strong_platform.dill",
    "$root_out_dir/dart2js_server_platform.dill",
  ]
  outputs = [ "$root_out_dir/dart-sdk/lib/_internal/{{source_file_part}}" ]
}

# Copies DDC's SDK weak outline .dill to lib/_internal
# TODO(nshahan) Fix the outline to be consistent and merge with below as a
# breaking change.
copy("copy_dev_compiler_weak_outline") {
  visibility = [ ":copy_dev_compiler_sdk" ]
  deps = [
    ":copy_libraries",
    "../utils/dartdevc:dartdevc_platform",
  ]
  sources = [ "$root_out_dir/ddc_outline.dill" ]
  outputs = [ "$root_out_dir/dart-sdk/lib/_internal/ddc_sdk.dill" ]
}

# Copies DDC's SDK full and outline .dill files to lib/_internal.
copy("copy_dev_compiler_dills") {
  visibility = [ ":copy_dev_compiler_sdk" ]
  deps = [
    ":copy_libraries",
    "../utils/dartdevc:dartdevc_platform",
    "../utils/dartdevc:dartdevc_platform_sound",
  ]
  sources = [
    "$root_out_dir/ddc_outline_sound.dill",
    "$root_out_dir/ddc_platform.dill",
    "$root_out_dir/ddc_platform_sound.dill",
  ]
  outputs = [ "$root_out_dir/dart-sdk/lib/_internal/{{source_file_part}}" ]
}

# This rule copies DDK's JS SDK and require.js to lib/dev_compiler/kernel/amd.
copy("copy_dev_compiler_js_amd_kernel") {
  visibility = [ ":copy_dev_compiler_js" ]
  deps = [ "../utils/dartdevc:dartdevc_kernel_sdk" ]
  gen_dir =
      get_label_info("../utils/dartdevc:dartdevc_kernel_sdk", "target_gen_dir")
  sources = [
    "$gen_dir/kernel/amd/dart_sdk.js",
    "$gen_dir/kernel/amd/dart_sdk.js.map",
    "../third_party/requirejs/require.js",
  ]
  outputs = [
    "$root_out_dir/dart-sdk/lib/dev_compiler/kernel/amd/{{source_file_part}}",
  ]
}

# This rule copies DDK's JS SDK to lib/dev_compiler/kernel/common.
copy("copy_dev_compiler_js_common_kernel") {
  visibility = [ ":copy_dev_compiler_js" ]
  deps = [ "../utils/dartdevc:dartdevc_kernel_sdk" ]
  gen_dir =
      get_label_info("../utils/dartdevc:dartdevc_kernel_sdk", "target_gen_dir")
  sources = [
    "$gen_dir/kernel/common/dart_sdk.js",
    "$gen_dir/kernel/common/dart_sdk.js.map",
    "../pkg/dev_compiler/lib/js/common/run.js",
  ]
  outputs = [ "$root_out_dir/dart-sdk/lib/dev_compiler/kernel/common/{{source_file_part}}" ]
}

# This rule copies DDK's JS SDK to lib/dev_compiler/kernel/es6.
copy("copy_dev_compiler_js_es6_kernel") {
  visibility = [ ":copy_dev_compiler_js" ]
  deps = [ "../utils/dartdevc:dartdevc_kernel_sdk" ]
  gen_dir =
      get_label_info("../utils/dartdevc:dartdevc_kernel_sdk", "target_gen_dir")
  sources = [
    "$gen_dir/kernel/es6/dart_sdk.js",
    "$gen_dir/kernel/es6/dart_sdk.js.map",
  ]
  outputs = [
    "$root_out_dir/dart-sdk/lib/dev_compiler/kernel/es6/{{source_file_part}}",
  ]
}

# Copies all of the JS artifacts needed by DDC.
group("copy_dev_compiler_js") {
  visibility = [
    ":copy_dev_compiler_sdk",
    ":copy_dev_compiler_tools",
  ]
  public_deps = [
    ":copy_dev_compiler_js_amd_kernel",
    ":copy_dev_compiler_js_common_kernel",
    ":copy_dev_compiler_js_es6_kernel",
  ]
}

# This rule copies tools to go along with ddc.
copy("copy_dev_compiler_tools") {
  visibility = [ ":copy_dev_compiler_sdk" ]
  deps = [
    ":copy_dev_compiler_js",
    "../utils/dartdevc:stack_trace_mapper",
  ]
  dart_out =
      get_label_info("../utils/dartdevc:stack_trace_mapper", "root_out_dir")
  sources = [ "$dart_out/dev_compiler/build/web/dart_stack_trace_mapper.js" ]
  outputs =
      [ "$root_out_dir/dart-sdk/lib/dev_compiler/web/{{source_file_part}}" ]
}

# This is the main rule for copying ddc's dependencies to lib/
group("copy_dev_compiler_sdk") {
  visibility = [ ":create_full_sdk" ]
  public_deps = [
    ":copy_dev_compiler_dills",
    ":copy_dev_compiler_js",
    ":copy_dev_compiler_tools",
    ":copy_dev_compiler_weak_outline",
  ]
}

# This rule copies header files to include/
copy("copy_headers") {
  visibility = [ ":create_common_sdk" ]
  sources = [
    "../runtime/include/dart_api.h",
    "../runtime/include/dart_api_dl.c",
    "../runtime/include/dart_api_dl.h",
    "../runtime/include/dart_native_api.h",
    "../runtime/include/dart_tools_api.h",
    "../runtime/include/dart_version.h",
    "../runtime/include/internal/dart_api_dl_impl.h",
  ]

  # Some magic to recover the folder structure inside the include folder.
  outputs = [ "$root_out_dir/dart-sdk/include/{{source_root_relative_dir}}/../../{{source_file_part}}" ]
}

# This rule copies libraries.json files to lib/
copy("copy_libraries_specification") {
  visibility = [ ":create_common_sdk" ]
  sources = [ "lib/libraries.json" ]
  deps = [ ":copy_libraries" ]
  outputs = [ "$root_out_dir/dart-sdk/lib/{{source_file_part}}" ]
}

# This is the main rule to copy libraries in _platform_sdk_libraries to lib/
group("copy_platform_sdk_libraries") {
  visibility = [
    ":_create_platform_sdk",
    ":copy_libraries",
  ]
  public_deps = []
  foreach(library, _platform_sdk_libraries) {
    public_deps += [ ":copy_${library}_library" ]
  }
}

# This is the main rule to copy libraries in _full_sdk_libraries to lib/
group("copy_full_sdk_libraries") {
  visibility = [
    ":create_full_sdk",
    ":copy_libraries",
  ]
  public_deps = []
  foreach(library, _full_sdk_libraries) {
    public_deps += [ ":copy_${library}_library" ]
  }
}

group("copy_libraries") {
  if (dart_platform_sdk) {
    public_deps = [ ":copy_platform_sdk_libraries" ]
  } else {
    public_deps = [ ":copy_full_sdk_libraries" ]
  }
}

# This rule writes the version file.
action("write_version_file") {
  visibility = [
    ":create_common_sdk",
    "../utils/dartanalyzer:generate_summary_strong",
  ]
  inputs = [
    "../tools/VERSION",
    "$default_git_folder/logs/HEAD",
  ]
  output = "$root_out_dir/dart-sdk/version"
  outputs = [ output ]
  script = "../tools/write_version_file.py"
  args = [
    "--output",
    rebase_path(output),
  ]
}

# This rule writes the revision file.
action("write_revision_file") {
  visibility = [ ":create_common_sdk" ]
  inputs = [ "$default_git_folder/logs/HEAD" ]
  output = "$root_out_dir/dart-sdk/revision"
  outputs = [ output ]
  script = "../tools/write_revision_file.py"
  args = [
    "--output",
    rebase_path(output),
  ]
}

# Copy libraries.dart to lib/_internal/libraries.dart for backwards
# compatibility.
#
# TODO(sigmund): stop copying libraries.dart. Old versions (<=0.25.1-alpha.4)
# of the analyzer package do not support the new location of this file. We
# should be able to remove the old file once we release a newer version of
# analyzer and popular frameworks have migrated to use it.
copy("copy_libraries_dart") {
  visibility = [ ":create_common_sdk" ]
  deps = [ ":copy_libraries" ]
  sources = [ "lib/_internal/sdk_library_metadata/lib/libraries.dart" ]
  outputs = [ "$root_out_dir/dart-sdk/lib/_internal/{{source_file_part}}" ]
}

# This rule copies the README file.
copy("copy_readme") {
  visibility = [ ":create_common_sdk" ]
  sources = [ "../README.dart-sdk" ]
  outputs = [ "$root_out_dir/dart-sdk/README" ]
}

# This rule copies the LICENSE file.
copy("copy_license") {
  visibility = [ ":create_common_sdk" ]
  sources = [ "../LICENSE" ]
  outputs = [ "$root_out_dir/dart-sdk/LICENSE" ]
}

# This rule generates a custom dartdoc_options.yaml file.
action("write_dartdoc_options") {
  visibility = [ ":create_common_sdk" ]
  inputs = [ "$default_git_folder/logs/HEAD" ]
  output = "$root_out_dir/dart-sdk/dartdoc_options.yaml"
  outputs = [ output ]
  script = "../tools/write_dartdoc_options_file.py"
  args = [
    "--output",
    rebase_path(output),
  ]
}

# This rule copies the API readme file to lib/
copy("copy_api_readme") {
  visibility = [ ":create_common_sdk" ]
  sources = [ "api_readme.md" ]
  outputs = [ "$root_out_dir/dart-sdk/lib/api_readme.md" ]
}

# Parts common to both platform and full SDKs.
group("create_common_sdk") {
  visibility = [
    ":create_sdk",
    ":create_platform_sdk",
  ]
  public_deps = [
    ":copy_analysis_summaries",
    ":copy_api_readme",
    ":copy_dart",
    ":copy_dartdev_dill_files",
    ":copy_dartdoc_files",
    ":copy_headers",
    ":copy_libraries_dart",
    ":copy_libraries_specification",
    ":copy_license",
    ":copy_readme",
    ":copy_vm_dill_files",
    ":write_dartdoc_options",
    ":write_revision_file",
    ":write_version_file",
  ]

  # We do not support AOT on ia32 and should therefore not add the
  # dart2native script (since there is no AOT compiler/runtime available)
  if (dart_target_arch != "ia32") {
    public_deps += [ ":copy_dart2native" ]
  }

  if (is_win) {
    public_deps += [ ":copy_7zip" ]
  }

  # CIPD only has versions of the Rust compiler for linux and mac x64 hosts.
  # We also disallow cross-compialtion (it may be possible in future, but it
  # isn't ready yet).
  if (host_cpu == "x64" && (host_os == "linux" || host_os == "mac") &&
      host_cpu == current_cpu && host_os == current_os && dart_enable_wasm) {
    public_deps += [ ":copy_wasmer" ]
  }
}

# Parts specific to the platform SDK.
group("_create_platform_sdk") {
  visibility = [
    ":create_sdk",
    ":create_platform_sdk",
  ]
  public_deps = [
    ":copy_platform_sdk_libraries",
    ":copy_platform_sdk_scripts",
    ":copy_platform_sdk_snapshots",
  ]
}

# Parts specific to the full SDK.
group("create_full_sdk") {
  visibility = [ ":create_sdk" ]

  public_deps = [
    ":copy_dart2js_dill_files",
    ":copy_dev_compiler_sdk",
    ":copy_full_sdk_libraries",
    ":copy_full_sdk_scripts",
    ":copy_full_sdk_snapshots",
  ]
}

# Build a SDK with less stuff. It excludes dart2js, ddc, and web libraries.
group("create_platform_sdk") {
  public_deps = [
    ":_create_platform_sdk",
    ":create_common_sdk",
  ]
}

# The main target to depend on from ../BUILD.gn
group("create_sdk") {
  public_deps = [ ":create_common_sdk" ]
  if (dart_platform_sdk) {
    public_deps += [ ":_create_platform_sdk" ]
  } else {
    public_deps += [ ":create_full_sdk" ]
  }
}
