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