# 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("../sdk_args.gni")
import("../utils/application_snapshot.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_aotruntime_stripped_binary = "dartaotruntime_product"
  gen_snapshot_stripped_binary = "gen_snapshot_product"
  analyze_snapshot_binary = "analyze_snapshot"
  wasm_opt_stripped_binary = "wasm-opt"

  dart_include_wasm_opt = true
}

# 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)
# ......utils/gen_snapshot or utils/gen_snapshot.exe (if not on ia32)
# ......snapshots/
# ........analysis_server.dart.snapshot
# ........dart2bytecode.snapshot (if dart_dynamic_modules)
# ........dart2js_aot.dart.snapshot (AOT snapshot, if not on ia32)
# ........dart2js.dart.snapshot (JIT snapshot only on ia32)
# ........dart2wasm_product.snapshot (if not on ia32)
# ........dartdev.dart.snapshot (app-jit snapshot or kernel dill file)
# ........dartdevc_aot.dart.snapshot (AOT snapshot, if not on ia32)
# ........dartdevc.dart.snapshot (JIT snapshot only on ia32)
# ........dds.dart.snapshot
# ........dart_tooling_daemon.dart.snapshot
# ........frontend_server_aot.dart.snapshot (AOT snapshot, if not on ia32)
# ........frontend_server.dart.snapshot (JIT snapshot only on ia32)
# ........gen_kernel_aot.dart.snapshot (if not on ia32)
# ........kernel-service.dart.snapshot
# ........kernel_worker_aot.dart.snapshot (JIT snapshot only on ia32)
# ........kernel_worker.dart.snapshot (AOT snapshot, it not ia32)
# ......resources/
# ........dartdoc/
# ..........resources/
# ..........templates/
# ....include/
# ......dart_api.h
# ......dart_native_api.h
# ......dart_tools_api.h
# ....lib/
# ......libraries.json
# ......_internal/
# ........dart2js_platform.dill
# ........dart2js_platform_unsound.dill
# ........dart2js_server_platform.dill
# ........dart2js_server_platform_unsound.dill
# ........dart2wasm_outline.dill (if not on ia32)
# ........dart2wasm_platform.dill (if not on ia32)
# ........dart2wasm_js_compatibility_outline.dill (if not on ia32)
# ........dart2wasm_js_compatibility_platform.dill (if not on ia32)
# ........ddc_outline.dill
# ........ddc_platform.dill
# ........vm_platform_strong.dill
# ........js_dev_runtime/
# ........js_runtime/
# ........js_shared/
# ......async/
# ......collection/
# ......concurrent/
# ......convert/
# ......core/
# ......dev_compiler/
#.........amd/require.js
#.........ddc/ddc_module_loader.js
#.........web/dart_stack_trace_mapper.js
# ......developer/
# ......html/
# ......_http/
# ......internal/
# ......io/
# ......isolate/
# ......js/
# ......js_interop/
# ......js_interop_unsafe/
# ......js_util/
# ......math/
# ......mirrors/
# ......typed_data/
# ......api_readme.md

# Scripts that go under bin/
_platform_sdk_scripts = []

_full_sdk_scripts = []

# Snapshots that go under bin/snapshots
_platform_sdk_snapshots = [
  [
    "analysis_server",
    "../utils/analysis_server",
    "analysis_server",
  ],
  [
    "dartdev",
    "../utils/dartdev:dartdev",
    "dartdev",
  ],
  [
    "dart_tooling_daemon",
    "../utils/dtd:dtd",
    "dart_tooling_daemon",
  ],
  [
    "dds",
    "../utils/dds:dds",
    "dds",
  ],
]
if (dart_target_arch != "ia32" && dart_target_arch != "x86") {
  _platform_sdk_snapshots += [ [
        "frontend_server_aot_product",
        "../utils/kernel-service:frontend_server_aot_product",
        "frontend_server_aot",
      ] ]
} else {
  _platform_sdk_snapshots += [ [
        "frontend_server",
        "../utils/kernel-service:frontend_server",
        "frontend_server",
      ] ]
}
if (dart_snapshot_kind == "app-jit") {
  _platform_sdk_snapshots += [ [
        "kernel-service",
        "../utils/kernel-service:kernel-service_snapshot",
        "kernel-service",
      ] ]
}
if (dart_dynamic_modules) {
  _platform_sdk_snapshots += [ [
        "dart2bytecode",
        "../utils/dart2bytecode:dart2bytecode",
        "dart2bytecode",
      ] ]
}

# AOT snapshots are not supported on the ia32 architecture, we continue
# to use JIT snapshots on that architecture, the conditional code below
# accounts for this.
if (dart_target_arch != "ia32" && dart_target_arch != "x86") {
  _full_sdk_snapshots =
      _platform_sdk_snapshots + [
        [
          "dart2js_aot_product",
          "../utils/compiler:dart2js_sdk_aot_product",
          "dart2js_aot",
        ],
        [
          "dartdevc_aot_product",
          "../utils/ddc:dartdevc_aot_product",
          "dartdevc_aot",
        ],
        [
          "kernel_worker_aot_product",
          "../utils/bazel:kernel_worker_aot_product",
          "kernel_worker_aot",
        ],

        # Remove these JIT snapshot in Dart SDK version 3.7
        # Please see https://github.com/dart-lang/build/pull/3742 for details.
        [
          "dartdevc",
          "../utils/ddc:dartdevc",
          "dartdevc",
        ],
        [
          "kernel_worker",
          "../utils/bazel:kernel_worker",
          "kernel_worker",
        ],
      ]
} else {
  _full_sdk_snapshots = _platform_sdk_snapshots + [
                          [
                            "dart2js",
                            "../utils/compiler:dart2js",
                            "dart2js",
                          ],
                          [
                            "dartdevc",
                            "../utils/ddc:dartdevc",
                            "dartdevc",
                          ],
                          [
                            "kernel_worker",
                            "../utils/bazel:kernel_worker",
                            "kernel_worker",
                          ],
                        ]
}

# Libraries that go under lib/
_full_sdk_libraries = [
  "_internal",
  "async",
  "cli",
  "collection",
  "concurrent",
  "convert",
  "core",
  "developer",
  "ffi",
  "html",
  "_http",
  "indexed_db",
  "internal",
  "io",
  "isolate",
  "js",
  "js_interop",
  "js_interop_unsafe",
  "js_util",
  "math",
  "mirrors",
  "svg",
  "typed_data",
  "_wasm",
  "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

# This rule copies dartdoc templates to
# bin/resources/dartdoc/templates
copy_tree("copy_dartdoc_templates") {
  visibility = [ ":copy_dartdoc_files" ]
  source = "../third_party/pkg/dartdoc/lib/templates"
  dest = "$root_out_dir/$dart_sdk_output/bin/resources/dartdoc/templates"
  exclude = "{}"
}

# This rule copies dartdoc resources to
# bin/resources/dartdoc/resources
copy_tree("copy_dartdoc_resources") {
  visibility = [ ":copy_dartdoc_files" ]
  source = "../third_party/pkg/dartdoc/lib/resources"
  dest = "$root_out_dir/$dart_sdk_output/bin/resources/dartdoc/resources"
  exclude = "{}"
}

# This rule copies the pre-built DevTools application to
# bin/resources/devtools/
copy_tree("copy_prebuilt_devtools") {
  visibility = [ ":create_common_sdk" ]
  source = "../third_party/devtools/web"
  dest = "$root_out_dir/$dart_sdk_output/bin/resources/devtools"
  exclude = "{}"
}

# This loop generates rules to copy libraries to lib/
foreach(library, _full_sdk_libraries) {
  copy_tree("copy_${library}_library") {
    visibility = [
      ":copy_full_sdk_libraries",
      ":copy_platform_sdk_libraries",
    ]
    source = "lib/$library"
    dest = "$root_out_dir/$dart_sdk_output/lib/$library"
    exclude = "*.svn,doc,*.py,*.gypi,*.sh,.git*,*.gn,*.gni"
  }
}

_has_dot_sym = !is_win && rebase_path(".") == rebase_path("//sdk")

# 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_output/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" ]
    }
    if (_has_dot_sym) {
      sources += [ "$dart_out/dart.sym" ]
    }
    outputs = [ "$root_out_dir/$dart_sdk_output/bin/{{source_file_part}}" ]
  }
}

copy("copy_dart_aotruntime") {
  visibility = [ ":group_dart2native" ]
  deps = [ "../runtime/bin:dartaotruntime_product" ]
  src_dir =
      get_label_info("../runtime/bin:dartaotruntime_product", "root_out_dir")
  sources =
      [ "$src_dir/${dart_aotruntime_stripped_binary}${executable_suffix}" ]
  outputs = [
    "$root_out_dir/$dart_sdk_output/bin/dartaotruntime${executable_suffix}",
  ]
}

group("copy_gen_snapshot") {
  visibility = [ ":group_dart2native" ]
  public_deps = [ ":copy_gen_snapshot_exe" ]
  if (_has_dot_sym) {
    public_deps += [ ":copy_gen_snapshot_sym" ]
  }
}

copy("copy_gen_snapshot_exe") {
  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_output/bin/utils/gen_snapshot${executable_suffix}",
  ]
}

if (_has_dot_sym) {
  copy("copy_gen_snapshot_sym") {
    deps = [ "../runtime/bin:gen_snapshot_product" ]
    sources = [ "$root_out_dir/gen_snapshot_product.sym" ]
    outputs = [ "$root_out_dir/$dart_sdk_output/bin/utils/gen_snapshot${executable_suffix}.sym" ]
  }
}

copy("copy_vm_platform_strong_product") {
  visibility = [ ":group_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_output/lib/_internal/{{source_file_part}}" ]
}

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

group("group_dart2native") {
  deps = [
    ":copy_dart_aotruntime",
    ":copy_gen_kernel_snapshot",
    ":copy_gen_snapshot",
    ":copy_vm_platform_strong_product",
  ]
}

# 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_full_sdk_scripts",
      ":copy_platform_sdk_scripts",
    ]
    sources = [ "bin/${name}_sdk$ext" ]
    outputs = [ "$root_out_dir/$dart_sdk_output/bin/$name$ext" ]
  }
}

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

# 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" ]
  }
}

# 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" ]
  }
}

# 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" ||
      snapshot[0] == "frontend_server_aot_product" ||
      snapshot[0] == "frontend_server_aot") {
    root = root_out_dir
  }
  copy("copy_${snapshot[0]}_snapshot") {
    visibility = [
      ":copy_full_sdk_snapshots",
      ":copy_platform_sdk_snapshots",
    ]
    deps = [ snapshot[1] ]
    sources = [ "$root/${snapshot[0]}.dart.snapshot" ]
    outputs = [ "$root_out_dir/$dart_sdk_output/bin/snapshots/${snapshot[2]}.dart.snapshot" ]
  }
}

# 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 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 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_output/lib/_internal/{{source_file_part}}" ]
}

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

copy("copy_dart2wasm_platform") {
  visibility = [ ":create_full_sdk" ]
  deps = [
    ":copy_libraries",
    "../:dart2wasm_platform",
    "../utils/dart2wasm:compile_dart2wasm_js_compatibility_platform",
    "../utils/dart2wasm:compile_dart2wasm_platform",
  ]
  sources = [
    "$root_out_dir/dart2wasm_js_compatibility_outline.dill",
    "$root_out_dir/dart2wasm_js_compatibility_platform.dill",
    "$root_out_dir/dart2wasm_outline.dill",
    "$root_out_dir/dart2wasm_platform.dill",
  ]
  outputs =
      [ "$root_out_dir/$dart_sdk_output/lib/_internal/{{source_file_part}}" ]
}

copy("copy_dart2wasm_snapshot") {
  visibility = [ ":create_full_sdk" ]
  deps = [
    ":copy_libraries",
    "../utils/dart2wasm:dart2wasm_product_snapshot",
  ]
  sources = [ "$root_out_dir/dart2wasm_product.snapshot" ]
  outputs =
      [ "$root_out_dir/$dart_sdk_output/bin/snapshots/{{source_file_part}}" ]
}

copy("copy_wasm_opt") {
  visibility = [ ":create_full_sdk" ]
  deps = [
    ":copy_libraries",
    "../third_party/binaryen:wasm-opt",
  ]
  sources = [ "$root_out_dir/${wasm_opt_stripped_binary}${executable_suffix}" ]
  outputs = [ "$root_out_dir/$dart_sdk_output/bin/utils/{{source_file_part}}" ]
}

# 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/ddc:ddc_platform",
  ]
  sources = [
    "$root_out_dir/ddc_outline.dill",
    "$root_out_dir/ddc_platform.dill",
  ]
  outputs =
      [ "$root_out_dir/$dart_sdk_output/lib/_internal/{{source_file_part}}" ]
}

# Copies require.js to lib/dev_compiler/amd.
# Used to load DDC compiled amd modules.
copy("copy_dev_compiler_amd_require_js") {
  visibility = [ ":copy_dev_compiler_sdk" ]
  sources = [ "../third_party/requirejs/require.js" ]
  outputs = [
    "$root_out_dir/$dart_sdk_output/lib/dev_compiler/amd/{{source_file_part}}",
  ]
}

# Copies ddc_module_loader.js to lib/dev_compiler/ddc.
# Used to manage DDC library and module loading.
copy("copy_dev_compiler_ddc_module_loader_js") {
  visibility = [ ":copy_dev_compiler_sdk" ]
  sources = [ "../pkg/dev_compiler/lib/js/ddc/ddc_module_loader.js" ]
  outputs = [
    "$root_out_dir/$dart_sdk_output/lib/dev_compiler/ddc/ddc_module_loader.js",
  ]
}

# Copies stack_trace_mapper tool to lib/dev_compiler/web.
# Used when running DDC compiled applications.
copy("copy_dev_compiler_stack_trace_mapper") {
  visibility = [ ":copy_dev_compiler_sdk" ]
  deps = [ "../utils/ddc:stack_trace_mapper" ]
  dart_out = get_label_info("../utils/ddc:stack_trace_mapper", "root_out_dir")
  sources = [ "$dart_out/dev_compiler/build/web/dart_stack_trace_mapper.js" ]
  outputs = [
    "$root_out_dir/$dart_sdk_output/lib/dev_compiler/web/{{source_file_part}}",
  ]
}

# Main rule for copying all of DDC's dependencies to lib.
group("copy_dev_compiler_sdk") {
  visibility = [ ":create_full_sdk" ]
  public_deps = [
    ":copy_dev_compiler_amd_require_js",
    ":copy_dev_compiler_ddc_module_loader_js",
    ":copy_dev_compiler_dills",
    ":copy_dev_compiler_stack_trace_mapper",
  ]
}

# This rule copies header files to include/
group("copy_headers") {
  visibility = [ ":create_common_sdk" ]

  deps = [ "../runtime/include:copy_headers" ]
}

# 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_output/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 = [
    ":copy_libraries",
    ":create_full_sdk",
  ]
  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" ]
  inputs = [
    "../tools/VERSION",
    "$default_git_folder/logs/HEAD",
  ]
  output = "$root_out_dir/$dart_sdk_output/version"
  outputs = [ output ]
  script = "../tools/write_version_file.py"
  args = [
    "--output",
    rebase_path(output),
  ]
  if (!dart_version_git_info) {
    args += [ "--no-git-hash" ]
  }
}

# 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_output/revision"
  outputs = [ output ]
  script = "../tools/write_revision_file.py"
  args = [
    "--output",
    rebase_path(output),
  ]
  if (!dart_version_git_info) {
    args += [ "--no-git-hash" ]
  }
}

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

# This rule copies the LICENSE file.
copy("copy_license") {
  visibility = [ ":create_common_sdk" ]
  sources = [ "../LICENSE" ]
  outputs = [ "$root_out_dir/$dart_sdk_output/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_output/dartdoc_options.yaml"
  outputs = [ output ]
  script = "../tools/write_dartdoc_options_file.py"
  args = [
    "--output",
    rebase_path(output),
  ]
  if (!dart_version_git_info) {
    args += [ "--no-git-hash" ]
  }
}

# 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_output/lib/api_readme.md" ]
}

# This rule copies the sdk_packages.yaml file to the root of the SDK, which
# defines the locations of the vendored SDK packages.
copy("copy_sdk_packages_yaml") {
  visibility = [ ":create_common_sdk" ]
  sources = [ "../sdk_packages.yaml" ]
  outputs = [ "$root_out_dir/$dart_sdk_output/sdk_packages.yaml" ]
}

# This rule copies pkg/_macros to pkg/_macros in the built SDK. This is a
# vendored SDK package.
copy_tree("copy_pkg_macros") {
  visibility = [ ":create_common_sdk" ]
  source = "../pkg/_macros"
  dest = "$root_out_dir/$dart_sdk_output/pkg/_macros"
  exclude = "{}"
}

# Parts common to both platform and full SDKs.
group("create_common_sdk") {
  visibility = [
    ":create_platform_sdk",
    ":create_sdk",
  ]
  public_deps = [
    ":copy_api_readme",
    ":copy_dart",
    ":copy_dartdoc_files",
    ":copy_headers",
    ":copy_libraries_specification",
    ":copy_license",
    ":copy_pkg_macros",
    ":copy_prebuilt_devtools",
    ":copy_readme",
    ":copy_sdk_packages_yaml",
    ":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
  # dart native compilation files since there is no AOT compiler/runtime
  # available.
  if (dart_target_arch != "ia32" && dart_target_arch != "x86") {
    public_deps += [ ":group_dart2native" ]
  }
}

# Parts specific to the platform SDK.
group("_create_platform_sdk") {
  visibility = [
    ":create_platform_sdk",
    ":create_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",
  ]

  if (dart_target_arch != "ia32" && dart_target_arch != "x86") {
    public_deps += [
      ":copy_dart2wasm_platform",
      ":copy_dart2wasm_snapshot",
    ]
    if (dart_include_wasm_opt) {
      public_deps += [ ":copy_wasm_opt" ]
    }
  }
}

# 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" ]
  }
}
