# 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_precompiled_runtime_stripped_binary = "dart_precompiled_runtime_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
# ........dart2js.dart.snapshot
# ........dart2wasm_product.snapshot (if not on ia32)
# ........dartdev.dart.snapshot (app-jit snapshot or kernel dill file)
# ........dartdevc.dart.snapshot
# ........dds.dart.snapshot
# ........dart_tooling_daemon.dart.snapshot
# ........frontend_server_aot.dart.snapshot (AOT snapshot, if not on ia32)
# ........frontend_server.dart.snapshot
# ........gen_kernel_aot.dart.snapshot (if not on ia32)
# ........kernel-service.dart.snapshot
# ........kernel_worker.dart.snapshot
# ......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/
# ......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",
  ],
  [
    "dartdev",
    "../utils/dartdev:dartdev",
  ],
  [
    "dart_tooling_daemon",
    "../utils/dtd:dtd",
  ],
  [
    "frontend_server",
    "../utils/kernel-service:frontend_server",
  ],
]
_platform_sdk_snapshots += [ [
      "dds",
      "../utils/dds:dds",
    ] ]
if (dart_snapshot_kind == "app-jit") {
  _platform_sdk_snapshots += [ [
        "kernel-service",
        "../utils/kernel-service:kernel-service_snapshot",
      ] ]
}

_full_sdk_snapshots = _platform_sdk_snapshots + [
                        [
                          "dart2js",
                          "../utils/compiler:dart2js",
                        ],
                        [
                          "dartdevc",
                          "../utils/ddc:dartdevc",
                        ],
                        [
                          "kernel_worker",
                          "../utils/bazel:kernel_worker",
                        ],
                      ]

# 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_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,.gitignore"
  }
}

_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_dartaotruntime") {
  visibility = [ ":group_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_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_dartaotruntime",
    ":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 target puts the frontend_server AOT snapshot into bin/snapshots
copy("copy_frontend_server_aot_snapshot") {
  visibility = [
    ":copy_full_sdk_snapshots",
    ":copy_platform_sdk_snapshots",
  ]
  deps = [ "../utils/kernel-service:frontend_server_aot" ]
  sources = [ "$root_out_dir/frontend_server_aot.dart.snapshot" ]
  outputs = [ "$root_out_dir/$dart_sdk_output/bin/snapshots/frontend_server_aot.dart.snapshot" ]
}

# This loop generates "copy" targets that put AppJIT 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_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/{{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" ]
  }
  if (dart_target_arch != "ia32" && dart_target_arch != "x86") {
    public_deps += [ ":copy_frontend_server_aot_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" ]
  }
  if (dart_target_arch != "ia32" && dart_target_arch != "x86") {
    public_deps += [ ":copy_frontend_server_aot_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" ]
  }
}
