# 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 = [
  "_blink",
  "_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",
]

# 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 loop generates rules for copying analyzer sources into lib/
foreach(analyzer_source_dir, _analyzer_source_dirs) {
  copy_tree("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"
    exclude = "*.svn,doc,*.py,*.gypi,*.sh,.gitignore,packages,test,testcases"
  }
}

# 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 copies dartdoc templates to
# bin/snapshots/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/bin/snapshots/resources/dartdoc/templates"
}

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

# 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 js needed by ddc to lib/dev_compiler
copy_tree("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"
}

# 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 rule copies pub assets to lib/_internal/pub/asset
copy_tree("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"
}

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

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

if (is_win) {
  copy_tree("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"
    exclude = ".svn"
  }
}

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