# 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/copy_tree.gni")

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

  # Path to stripped dart binary relative to build output directory.
  dart_stripped_binary = "dart"
}

# 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)
# ......dartdoc
# ......dartfmt
# ......dart2js
# ......dartanalyzer
# ......dartdevc
# ......dartdevk
# ......pub
# ......snapshots/
# ........analysis_server.dart.snapshot
# ........dart2js.dart.snapshot
# ........dartanalyzer.dart.snapshot
# ........dartdoc.dart.snapshot
# ........dartfmt.dart.snapshot
# ........dartdevc.dart.snapshot
# ........dartdevk.dart.snapshot
# ........front_end_worker.dart.snapshot
# ........pub.dart.snapshot
# ........utils_wrapper.dart.snapshot
#.........resources/
#...........dartdoc/
#..............packages
#.............resources/
#.............templates/
# ....include/
# ......dart_api.h
# ......dart_mirrors_api.h
# ......dart_native_api.h
# ......dart_tools_api.h
# ....lib/
# ......dart_client.platform
# ......dart_server.platform
# ......dart_shared.platform
# ......_internal/
#.........spec.sum
#.........strong.sum
#.........dart2js_platform.dill
#.........vm_outline.dill
#.........vm_outline_strong.dill
#.........vm_platform.dill
#.........vm_platform_strong.dill
#.........dev_compiler/
# ......analysis_server/
# ......analyzer/
# ......async/
# ......collection/
# ......convert/
# ......core/
# ......front_end/
# ......html/
# ......_http/
# ......internal/
# ......io/
# ......isolate/
# ......js/
# ......js_util/
# ......kernel/
# ......math/
# ......mirrors/
# ......typed_data/
# ......api_readme.md

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

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

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

# Snapshots that go under bin/snapshots
_platform_sdk_snapshots = [
  [
    "analysis_server",
    "../utils/analysis_server",
  ],
  [
    "dartanalyzer",
    "../utils/dartanalyzer:generate_dartanalyzer_snapshot",
  ],
  [
    "dartdoc",
    "../utils/dartdoc",
  ],
  [
    "dartfmt",
    "../utils/dartfmt",
  ],
  [
    "pub",
    "../utils/pub",
  ],
]

_full_sdk_snapshots = [
  [
    "analysis_server",
    "../utils/analysis_server",
  ],
  [
    "dart2js",
    "../utils/compiler:dart2js",
  ],
  [
    "dartanalyzer",
    "../utils/dartanalyzer:generate_dartanalyzer_snapshot",
  ],
  [
    "dartdevc",
    "../utils/dartdevc",
  ],
  [
    "dartdevk",
    "../utils/dartdevc:dartdevk",
  ],
  [
    "dartdoc",
    "../utils/dartdoc",
  ],
  [
    "dartfmt",
    "../utils/dartfmt",
  ],
  [
    "front_end_worker",
    "../utils/front_end:front_end_worker",
  ],
  [
    "pub",
    "../utils/pub",
  ],
  [
    "utils_wrapper",
    "../utils/compiler:utils_wrapper",
  ],
]

# Libraries that go under lib/
_platform_sdk_libraries = [
  "_internal",
  "async",
  "collection",
  "convert",
  "core",
  "developer",
  "html",
  "_http",
  "internal",
  "io",
  "isolate",
  "math",
  "mirrors",
  "profiler",
  "typed_data",
]

_full_sdk_libraries = [
  "_chrome",
  "_internal",
  "async",
  "collection",
  "convert",
  "core",
  "developer",
  "html",
  "_http",
  "indexed_db",
  "internal",
  "io",
  "isolate",
  "js",
  "js_util",
  "math",
  "mirrors",
  "profiler",
  "svg",
  "typed_data",
  "web_audio",
  "web_gl",
  "web_sql",
]

# Package sources copied to lib/
_analyzer_source_dirs = [
  "analyzer",
  "analysis_server",
  "front_end",
  "kernel",
]

# 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 loop generates rules for copying analyzer sources into lib/
foreach(analyzer_source_dir, _analyzer_source_dirs) {
  copy_tree_specs += [ {
        target = "copy_${analyzer_source_dir}_source_dir"
        visibility = [ ":copy_analyzer_sources" ]
        source = "../pkg/$analyzer_source_dir"
        dest = "$root_out_dir/dart-sdk/lib/$analyzer_source_dir"
        ignore_patterns =
            "*.svn,doc,*.py,*.gypi,*.sh,.gitignore,packages,test,testcases"
      } ]
}

# This rule copies dartdoc templates to
# bin/snapshots/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/snapshots/resources/dartdoc/templates"
      ignore_patterns = "{}"
    } ]

# This rule copies dartdoc resources to
# bin/snapshots/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/snapshots/resources/dartdoc/resources"
      ignore_patterns = "{}"
    } ]

# This rule copies pub assets to lib/_internal/pub/asset
copy_tree_specs += [ {
      target = "copy_pub_assets"
      visibility = [
        ":create_common_sdk",
        ":copy_7zip",
      ]
      deps = [
        ":copy_libraries",
      ]
      source = "../third_party/pkg/pub/lib/src/asset"
      dest = "$root_out_dir/dart-sdk/lib/_internal/pub/asset"
      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",
          ":copy_pub_assets",
        ]
        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/
copy("copy_dart") {
  visibility = [ ":create_common_sdk" ]
  deps = [
    "../runtime/bin:dart",
  ]
  dart_out = get_label_info("../runtime/bin:dart", "root_out_dir")
  if (is_win) {
    sources = [
      "$dart_out/dart.exe",
    ]
  } else {
    sources = [
      "$dart_out/$dart_stripped_binary",
    ]
  }
  if (is_win) {
    sources += [ "$dart_out/dart.lib" ]
  }
  outputs = [
    "$root_out_dir/dart-sdk/bin/{{source_file_part}}",
  ]
}

# Copies dynamically linked libraries into bin/. This is currently only needed
# for Fuchsia when building for Linux hosts.
if (is_fuchsia_host && is_linux) {
  copy("copy_dylibs") {
    visibility = [ ":create_common_sdk" ]
    deps = [
      "//third_party/boringssl:crypto",
      "//third_party/boringssl:ssl",
      "//third_party/zlib",
    ]
    crypto_out =
        get_label_info("//third_party/boringssl:crypto", "root_out_dir")
    crypto_name = get_label_info("//third_party/boringssl:crypto", "name")
    ssl_out = get_label_info("//third_party/boringssl:ssl", "root_out_dir")
    ssl_name = get_label_info("//third_party/boringssl:ssl", "name")
    zlib_out = get_label_info("//third_party/zlib", "root_out_dir")
    sources = [
      "$crypto_out/lib${crypto_name}.so",
      "$ssl_out/lib${ssl_name}.so",
      "$zlib_out/libz.so",
    ]
    outputs = [
      "$root_out_dir/dart-sdk/bin/{{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" ]
  deps = []
  foreach(sdk_script, _platform_sdk_scripts) {
    deps += [ ":copy_${sdk_script}_script" ]
  }
  foreach(script, _scripts) {
    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" ]
  deps = []
  foreach(sdk_script, _full_sdk_scripts) {
    deps += [ ":copy_${sdk_script}_script" ]
  }
  foreach(script, _scripts) {
    deps += [ ":copy_${script}_script" ]
  }
}

# This loop generates "copy" targets that put snapshots into bin/snapshots
foreach(snapshot, _full_sdk_snapshots) {
  copy("copy_${snapshot[0]}_snapshot") {
    visibility = [
      ":copy_platform_sdk_snapshots",
      ":copy_full_sdk_snapshots",
    ]
    deps = [
      snapshot[1],
    ]
    sources = [
      "$root_gen_dir/${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" ]
  deps = []
  foreach(snapshot, _platform_sdk_snapshots) {
    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" ]
  deps = []
  foreach(snapshot, _full_sdk_snapshots) {
    deps += [ ":copy_${snapshot[0]}_snapshot" ]
  }
}

# This is the main rule for copying analyzer sources to lib/
group("copy_analyzer_sources") {
  visibility = [ ":create_common_sdk" ]
  deps = []
  foreach(analyzer_source_dir, _analyzer_source_dirs) {
    deps += [ ":copy_${analyzer_source_dir}_source_dir" ]
  }
}

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

# This is the main rule for copying the files that dartdoc needs.
group("copy_dartdoc_files") {
  visibility = [ ":create_common_sdk" ]
  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_spec",
    "../utils/dartanalyzer:generate_summary_strong",
  ]
  sources = [
    "$root_gen_dir/spec.sum",
    "$root_gen_dir/strong.sum",
  ]
  outputs = [
    "$root_out_dir/dart-sdk/lib/_internal/{{source_file_part}}",
  ]
}

# 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_outline.dill",
    "$root_out_dir/vm_outline_strong.dill",
    "$root_out_dir/vm_platform.dill",
    "$root_out_dir/vm_platform_strong.dill",
  ]
  outputs = [
    "$root_out_dir/dart-sdk/lib/_internal/{{source_file_part}}",
  ]
}

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

# This rule copies ddc summaries to lib/_internal
copy("copy_dev_compiler_summary") {
  visibility = [ ":copy_dev_compiler_sdk" ]
  deps = [
    ":copy_libraries",
    "../utils/dartdevc:dartdevc_sdk",
    "../utils/dartdevc:dartdevc_sdk_kernel_summary",
  ]
  gen_dir = get_label_info("../utils/dartdevc:dartdevc_sdk", "target_gen_dir")
  sources = [
    "$gen_dir/ddc_sdk.sum",
    "$gen_dir/ddc_sdk.dill",
  ]
  outputs = [
    "$root_out_dir/dart-sdk/lib/_internal/{{source_file_part}}",
  ]
}

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

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

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

# This rule copies DDC's JS SDK and dart_library.js to lib/dev_compiler/legacy.
copy("copy_dev_compiler_js_legacy") {
  visibility = [ ":copy_dev_compiler_js" ]
  deps = [
    "../utils/dartdevc:dartdevc_sdk",
  ]
  gen_dir = get_label_info("../utils/dartdevc:dartdevc_sdk", "target_gen_dir")
  sources = [
    "$gen_dir/js/legacy/dart_sdk.js",
    "$gen_dir/js/legacy/dart_sdk.js.map",
    "../pkg/dev_compiler/lib/js/legacy/dart_library.js",
  ]
  outputs = [
    "$root_out_dir/dart-sdk/lib/dev_compiler/legacy/{{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",
  ]
  deps = [
    ":copy_dev_compiler_js_amd",
    ":copy_dev_compiler_js_common",
    ":copy_dev_compiler_js_es6",
    ":copy_dev_compiler_js_legacy",
  ]
}

# 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:dartdevc_web",
    "../utils/dartdevc:stack_trace_mapper",
  ]
  dart_out = get_label_info("../utils/dartdevc:dartdevc_web", "root_out_dir")
  sources = [
    "$dart_out/dev_compiler/build/web/dart_stack_trace_mapper.js",
    "$dart_out/dev_compiler/build/web/ddc_web_compiler.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" ]
  deps = [
    ":copy_dev_compiler_js",
    ":copy_dev_compiler_summary",
    ":copy_dev_compiler_tools",
  ]
}

# This rule copies header files to include/
copy("copy_headers") {
  visibility = [ ":create_common_sdk" ]
  sources = [
    "../runtime/include/dart_api.h",
    "../runtime/include/dart_mirrors_api.h",
    "../runtime/include/dart_native_api.h",
    "../runtime/include/dart_tools_api.h",
  ]
  outputs = [
    "$root_out_dir/dart-sdk/include/{{source_file_part}}",
  ]
}

# This rule copies .platform files to lib/
copy("copy_platform_files") {
  visibility = [ ":create_common_sdk" ]
  sources = [
    "lib/dart_client.platform",
    "lib/dart_server.platform",
    "lib/dart_shared.platform",
  ]
  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",
  ]
  deps = []
  foreach(library, _platform_sdk_libraries) {
    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",
  ]
  deps = []
  foreach(library, _full_sdk_libraries) {
    deps += [ ":copy_${library}_library" ]
  }
}

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

# This rule writes the version file.
action("write_version_file") {
  visibility = [ ":create_common_sdk" ]
  inputs = [
    "../tools/VERSION",
  ]
  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" ]
  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 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" ]
  deps = [
    ":copy_analysis_summaries",
    ":copy_analyzer_sources",
    ":copy_api_readme",
    ":copy_dart",
    ":copy_dartdoc_files",
    ":copy_vm_dill_files",
    ":copy_headers",
    ":copy_libraries_dart",
    ":copy_license",
    ":copy_platform_files",
    ":copy_pub_assets",
    ":copy_readme",
    ":write_revision_file",
    ":write_version_file",
  ]
  if (is_win) {
    deps += [ ":copy_7zip" ]
  }
  if (is_fuchsia_host && is_linux) {
    deps += [ ":copy_dylibs" ]
  }
}

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

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

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