# 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
# ......pub
# ......snapshots/
# ........analysis_server.dart.snapshot
# ........dart2js.dart.snapshot
# ........dartanalyzer.dart.snapshot
# ........dartdoc.dart.snapshot
# ........dartfmt.dart.snapshot
# ........dartdevc.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
#.........dev_compiler/
# ......analysis_server/
# ......analyzer/
# ......async/
# ......collection/
# ......convert/
# ......core/
# ......front_end/
# ......html/
# ......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",
  "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",
  ],
  [
    "dartdoc",
    "../utils/dartdoc",
  ],
  [
    "dartfmt",
    "../utils/dartfmt",
  ],
  [
    "pub",
    "../utils/pub",
  ],
  [
    "utils_wrapper",
    "../utils/compiler:utils_wrapper",
  ],
]

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

_full_sdk_libraries = [
  "_chrome",
  "_internal",
  "async",
  "collection",
  "convert",
  "core",
  "developer",
  "html",
  "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 js needed by ddc to lib/dev_compiler
copy_tree_specs += [{
  target = "copy_dev_compiler_js"
  visibility = [
    ":copy_dev_compiler_sdk",
    ":copy_dev_compiler_require_js",
    ":copy_dev_compiler_tools",
  ]
  source = "../pkg/dev_compiler/lib/js"
  dest = "$root_out_dir/dart-sdk/lib/dev_compiler"
  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 vm's outline.dill file to lib/_internal
copy("copy_vm_dill_files") {
  visibility = [ ":create_common_sdk" ]
  deps = [
    ":copy_libraries",
    "../runtime/vm:patched_sdk",
  ]
  sources = [
    "$root_out_dir/patched_sdk/outline.dill",
  ]
  outputs = [
    "$root_out_dir/dart-sdk/lib/_internal/vm_outline.dill",
  ]
}

# This rule copies dart2js's platform.dill file to lib/_internal
copy("copy_dart2js_dill_files") {
  visibility = [ ":create_full_sdk" ]
  deps = [
    ":copy_libraries",
    "../utils/compiler:patched_dart2js_sdk",
  ]
  sources = [
    "$root_out_dir/patched_dart2js_sdk/platform.dill",
  ]
  outputs = [
    "$root_out_dir/dart-sdk/lib/_internal/dart2js_platform.dill",
  ]
}

# This rule copies ddc summaries to lib/_internal
copy("copy_dev_compiler_summary") {
  visibility = [ ":copy_dev_compiler_sdk" ]
  deps = [
    ":copy_libraries",
  ]
  sources = [
    "../pkg/dev_compiler/lib/sdk/ddc_sdk.sum",
  ]
  outputs = [
    "$root_out_dir/dart-sdk/lib/_internal/{{source_file_part}}",
  ]
}

# This rule copies require.js to lib/dev_compiler/amd
copy("copy_dev_compiler_require_js") {
  visibility = [ ":copy_dev_compiler_sdk" ]
  deps = [
    ":copy_dev_compiler_js",
  ]
  sources = [
    "../third_party/requirejs/require.js",
  ]
  outputs = [
    "$root_out_dir/dart-sdk/lib/dev_compiler/amd/{{source_file_part}}",
  ]
}

# 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_require_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" ]
  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_headers",
    ":copy_libraries_dart",
    ":copy_license",
    ":copy_platform_files",
    ":copy_pub_assets",
    ":copy_readme",
    ":copy_vm_dill_files",
    ":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" ]
  }
}
