# Copyright 2019 The Flutter Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//third_party/dart/build/dart/dart_action.gni")
import("//third_party/dart/utils/compile_platform.gni")

sdk_dill = "$root_out_dir/flutter_web_sdk/kernel/flutter_ddc_sdk.dill"
sdk_libraries_json = "$root_out_dir/flutter_web_sdk/libraries.json"

web_ui_sources =
    exec_script("//third_party/dart/tools/list_dart_files.py",
                [
                  "absolute",
                  rebase_path("$flutter_root/lib/web_ui/lib/src/ui"),
                ],
                "list lines")

web_ui_sources += [ "$flutter_root/lib/web_ui/lib/ui.dart" ]

web_engine_sources =
    exec_script("//third_party/dart/tools/list_dart_files.py",
                [
                  "absolute",
                  rebase_path("$flutter_root/lib/web_ui/lib/src/engine"),
                ],
                "list lines")

web_engine_sources += [ "$flutter_root/lib/web_ui/lib/src/engine.dart" ]

group("web_sdk") {
  deps = [
    ":flutter_dartdevc_kernel_sdk",
    ":web_engine_sources",
    ":web_ui_library",
    ":web_ui_sources",
  ]
}

prebuilt_dart_action("web_ui_sources") {
  inputs = web_ui_sources + [ "sdk_rewriter.dart" ]

  packages = "//third_party/dart/.packages"
  script = "sdk_rewriter.dart"
  output_dir = rebase_path("$root_out_dir/flutter_web_sdk/lib/ui/")
  input_dir = rebase_path("$flutter_root/lib/web_ui/lib/")

  args = [
    "--output-dir=$output_dir",
    "--input-dir=$input_dir",
    "--ui",
  ]

  outputs = [
    "$root_out_dir/flutter_web_engine_sdk_stamp",
  ]

  foreach(source_file, web_ui_sources) {
    path = rebase_path(source_file)
    args += [ "--input=$path" ]
  }
}

prebuilt_dart_action("web_engine_sources") {
  inputs = web_engine_sources + [ "sdk_rewriter.dart" ]

  packages = "//third_party/dart/.packages"
  script = "sdk_rewriter.dart"
  output_dir = rebase_path("$root_out_dir/flutter_web_sdk/lib/_engine/")
  input_dir = rebase_path("$flutter_root/lib/web_ui/lib/src/")

  args = [
    "--output-dir=$output_dir",
    "--input-dir=$input_dir",
    "--engine",
  ]

  outputs = [
    "$root_out_dir/flutter_web_sdk_stamp",
  ]

  foreach(source_file, web_engine_sources) {
    path = rebase_path(source_file)
    args += [ "--input=$path" ]
  }
}

copy("web_ui_library") {
  sources = [
    "$flutter_root/web_sdk/libraries.json",
  ]

  outputs = [
    "$root_out_dir/flutter_web_sdk/{{source_file_part}}",
  ]
}

prebuilt_dart_action("flutter_dartdevc_kernel_sdk") {
  deps = [
    "//third_party/dart/pkg:pkg_files_stamp",
    "//third_party/dart/utils/dartdevc:dartdevc_files_stamp",
    "//third_party/dart/utils/dartdevc:dartdevc_sdk_patch_stamp",
  ]

  inputs = [
    "//third_party/dart/pkg/dev_compiler/tool/kernel_sdk.dart",
  ]

  outputs = [
    sdk_dill,
    "$root_out_dir/flutter_web_sdk/lib/_internal/libraries.json",
    "$root_out_dir/flutter_web_sdk/kernel/amd/dart_sdk.js",
    "$root_out_dir/flutter_web_sdk/kernel/amd/dart_sdk.js.map",
  ]

  script = "flutter_kernel_sdk.dart"
  packages = "//third_party/dart/.packages"

  output_path = rebase_path(sdk_dill)
  libraries_path = rebase_path(sdk_libraries_json)

  args = [
    "--output=$output_path",
    "--libraries=$libraries_path",
  ]
}
