# 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_dill_sound =
    "$root_out_dir/flutter_web_sdk/kernel/flutter_ddc_sdk_sound.dill"

dart_sdk_package_config = "//third_party/dart/.dart_tool/package_config.json"

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

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

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

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

group("web_sdk") {
  deps = [
    ":flutter_dartdevc_canvaskit_html_kernel_sdk",
    ":flutter_dartdevc_canvaskit_html_kernel_sdk_sound",
    ":flutter_dartdevc_canvaskit_kernel_sdk",
    ":flutter_dartdevc_canvaskit_kernel_sdk_sound",
    ":flutter_dartdevc_kernel_sdk",
    ":flutter_dartdevc_kernel_sdk_outline",
    ":flutter_dartdevc_kernel_sdk_outline_sound",
    ":flutter_dartdevc_kernel_sdk_sound",
    ":web_engine_sources",
    ":web_ui_library",
    ":web_ui_sources",
  ]
}

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

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

  outputs = [ "$target_gen_dir/$target_name.stamp" ]

  args = [
    "--output-dir=$output_dir",
    "--input-dir=$input_dir",
    "--ui",
    "--stamp",
    rebase_path(outputs[0], root_build_dir),
  ]

  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 = dart_sdk_package_config
  script = "sdk_rewriter.dart"
  output_dir = rebase_path("$root_out_dir/flutter_web_sdk/lib/_engine/")
  input_dir = rebase_path("//flutter/lib/web_ui/lib/src/")

  outputs = [ "$target_gen_dir/$target_name.stamp" ]

  args = [
    "--output-dir=$output_dir",
    "--input-dir=$input_dir",
    "--engine",
    "--stamp",
    rebase_path(outputs[0], root_build_dir),
  ]

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

copy("web_ui_library") {
  sources = [ "//flutter/web_sdk/libraries.json" ]

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

# Compile the unsound DDC SDK's summary.
prebuilt_dart_action("flutter_dartdevc_kernel_sdk_outline") {
  deps = [
    "//third_party/dart:create_sdk",
    "//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 = [ "sdk_rewriter.dart" ] + web_ui_sources + web_engine_sources

  outputs = [ sdk_dill ]

  script = "//third_party/dart/utils/bazel/kernel_worker.dart"

  args = [
    "--enable-experiment=non-nullable",
    "--summary-only",
    "--target",
    "ddc",
    "--packages-file",
    "file:///" + rebase_path(dart_sdk_package_config),
    "--multi-root-scheme",
    "org-dartlang-sdk",
    "--multi-root",
    "file:///" + rebase_path("$root_out_dir"),
    "--libraries-file",
    "org-dartlang-sdk:///flutter_web_sdk/libraries.json",
    "--output",
    rebase_path(sdk_dill),
    "--source",
    "dart:core",

    # Additional Flutter web dart libraries
    "--source",
    "dart:ui",
    "--source",
    "dart:_engine",
  ]
}

# Compiles the unsound html only renderer.
prebuilt_dart_action("flutter_dartdevc_kernel_sdk") {
  deps = [
    "//third_party/dart:create_sdk",
    "//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 = [ "sdk_rewriter.dart" ] + web_ui_sources + web_engine_sources

  packages = dart_sdk_package_config

  script = "//third_party/dart/pkg/dev_compiler/bin/dartdevc.dart"

  outputs = [
    "$root_out_dir/flutter_web_sdk/kernel/amd/dart_sdk.js",
    "$root_out_dir/flutter_web_sdk/kernel/amd/dart_sdk.js.map",
  ]

  args = [
    "--enable-experiment=non-nullable",
    "--compile-sdk",
    "dart:core",

    # Additional Flutter web dart libraries
    "dart:ui",
    "dart:_engine",
    "--no-summarize",
    "--packages",
    "file:///" + rebase_path(dart_sdk_package_config),
    "--multi-root-scheme",
    "org-dartlang-sdk",
    "--multi-root",
    "file:///" + rebase_path("$root_out_dir"),
    "--multi-root-output-path",
    rebase_path("$root_out_dir/"),
    "--libraries-file",
    "org-dartlang-sdk:///flutter_web_sdk/libraries.json",
    "--inline-source-map",
    "-DFLUTTER_WEB_USE_SKIA=false",
    "-DFLUTTER_WEB_AUTO_DETECT=false",
    "--modules",
    "amd",
    "-o",
    rebase_path("$root_out_dir/flutter_web_sdk/kernel/amd/dart_sdk.js"),
    "--modules",
    "legacy",
    "-o",
    rebase_path("$root_out_dir/flutter_web_sdk/kernel/legacy/dart_sdk.js"),
  ]
}

# Compiles the unsound canvaskit only renderer.
prebuilt_dart_action("flutter_dartdevc_canvaskit_kernel_sdk") {
  deps = [
    "//third_party/dart:create_sdk",
    "//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 = [ "sdk_rewriter.dart" ] + web_ui_sources + web_engine_sources

  packages = dart_sdk_package_config

  script = "//third_party/dart/pkg/dev_compiler/bin/dartdevc.dart"

  outputs = [
    "$root_out_dir/flutter_web_sdk/kernel/amd-canvaskit/dart_sdk.js",
    "$root_out_dir/flutter_web_sdk/kernel/amd-canvaskit/dart_sdk.js.map",
  ]

  args = [
    "--enable-experiment=non-nullable",
    "--compile-sdk",
    "dart:core",

    # Additional Flutter web dart libraries
    "dart:ui",
    "dart:_engine",
    "--no-summarize",
    "--packages",
    "file:///" + rebase_path(dart_sdk_package_config),
    "--multi-root-scheme",
    "org-dartlang-sdk",
    "--multi-root",
    "file:///" + rebase_path("$root_out_dir"),
    "--multi-root-output-path",
    rebase_path("$root_out_dir/"),
    "--libraries-file",
    "org-dartlang-sdk:///flutter_web_sdk/libraries.json",
    "--inline-source-map",
    "-DFLUTTER_WEB_USE_SKIA=true",
    "-DFLUTTER_WEB_AUTO_DETECT=false",
    "--modules",
    "amd",
    "-o",
    rebase_path(
        "$root_out_dir/flutter_web_sdk/kernel/amd-canvaskit/dart_sdk.js"),
    "--modules",
    "legacy",
    "-o",
    rebase_path(
        "$root_out_dir/flutter_web_sdk/kernel/legacy-canvaskit/dart_sdk.js"),
  ]
}

# Compiles the unsound autodetect renderer.
prebuilt_dart_action("flutter_dartdevc_canvaskit_html_kernel_sdk") {
  deps = [
    "//third_party/dart:create_sdk",
    "//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 = [ "sdk_rewriter.dart" ] + web_ui_sources + web_engine_sources

  packages = dart_sdk_package_config

  script = "//third_party/dart/pkg/dev_compiler/bin/dartdevc.dart"

  outputs = [
    "$root_out_dir/flutter_web_sdk/kernel/amd-canvaskit-html/dart_sdk.js",
    "$root_out_dir/flutter_web_sdk/kernel/amd-canvaskit-html/dart_sdk.js.map",
  ]

  args = [
    "--enable-experiment=non-nullable",
    "--compile-sdk",
    "dart:core",

    # Additional Flutter web dart libraries
    "dart:ui",
    "dart:_engine",
    "--no-summarize",
    "--packages",
    "file:///" + rebase_path(dart_sdk_package_config),
    "--multi-root-scheme",
    "org-dartlang-sdk",
    "--multi-root",
    "file:///" + rebase_path("$root_out_dir"),
    "--multi-root-output-path",
    rebase_path("$root_out_dir/"),
    "--libraries-file",
    "org-dartlang-sdk:///flutter_web_sdk/libraries.json",
    "--inline-source-map",
    "-DFLUTTER_WEB_USE_SKIA=true",
    "-DFLUTTER_WEB_AUTO_DETECT=true",
    "--modules",
    "amd",
    "-o",
    rebase_path(
        "$root_out_dir/flutter_web_sdk/kernel/amd-canvaskit-html/dart_sdk.js"),
    "--modules",
    "legacy",
    "-o",
    rebase_path(
        "$root_out_dir/flutter_web_sdk/kernel/legacy-canvaskit-html/dart_sdk.js"),
  ]
}

# Compiles the sound html only renderer.
prebuilt_dart_action("flutter_dartdevc_kernel_sdk_sound") {
  deps = [
    "//third_party/dart:create_sdk",
    "//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 = [ "sdk_rewriter.dart" ] + web_ui_sources + web_engine_sources

  packages = dart_sdk_package_config

  script = "//third_party/dart/pkg/dev_compiler/bin/dartdevc.dart"

  outputs = [
    "$root_out_dir/flutter_web_sdk/kernel/amd-sound/dart_sdk.js",
    "$root_out_dir/flutter_web_sdk/kernel/amd-sound/dart_sdk.js.map",
  ]

  args = [
    "--enable-experiment=non-nullable",
    "--sound-null-safety",
    "--compile-sdk",
    "dart:core",

    # Additional Flutter web dart libraries
    "dart:ui",
    "dart:_engine",
    "--no-summarize",
    "--packages",
    "file:///" + rebase_path(dart_sdk_package_config),
    "--multi-root-scheme",
    "org-dartlang-sdk",
    "--multi-root",
    "file:///" + rebase_path("$root_out_dir"),
    "--multi-root-output-path",
    rebase_path("$root_out_dir/"),
    "--libraries-file",
    "org-dartlang-sdk:///flutter_web_sdk/libraries.json",
    "--inline-source-map",
    "-DFLUTTER_WEB_USE_SKIA=false",
    "-DFLUTTER_WEB_AUTO_DETECT=false",
    "--modules",
    "amd",
    "-o",
    rebase_path("$root_out_dir/flutter_web_sdk/kernel/amd-sound/dart_sdk.js"),
    "--modules",
    "legacy",
    "-o",
    rebase_path(
        "$root_out_dir/flutter_web_sdk/kernel/legacy-sound/dart_sdk.js"),
  ]
}

# Compiles the sound canvaskit only renderer.
prebuilt_dart_action("flutter_dartdevc_canvaskit_kernel_sdk_sound") {
  deps = [
    "//third_party/dart:create_sdk",
    "//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 = [ "sdk_rewriter.dart" ] + web_ui_sources + web_engine_sources

  packages = dart_sdk_package_config

  script = "//third_party/dart/pkg/dev_compiler/bin/dartdevc.dart"

  outputs = [
    "$root_out_dir/flutter_web_sdk/kernel/amd-canvaskit-sound/dart_sdk.js",
    "$root_out_dir/flutter_web_sdk/kernel/amd-canvaskit-sound/dart_sdk.js.map",
  ]

  args = [
    "--enable-experiment=non-nullable",
    "--sound-null-safety",
    "--compile-sdk",
    "dart:core",

    # Additional Flutter web dart libraries
    "dart:ui",
    "dart:_engine",
    "--no-summarize",
    "--packages",
    "file:///" + rebase_path(dart_sdk_package_config),
    "--multi-root-scheme",
    "org-dartlang-sdk",
    "--multi-root",
    "file:///" + rebase_path("$root_out_dir"),
    "--multi-root-output-path",
    rebase_path("$root_out_dir/"),
    "--libraries-file",
    "org-dartlang-sdk:///flutter_web_sdk/libraries.json",
    "--inline-source-map",
    "-DFLUTTER_WEB_USE_SKIA=true",
    "-DFLUTTER_WEB_AUTO_DETECT=false",
    "--modules",
    "amd",
    "-o",
    rebase_path(
        "$root_out_dir/flutter_web_sdk/kernel/amd-canvaskit-sound/dart_sdk.js"),
    "--modules",
    "legacy",
    "-o",
    rebase_path(
        "$root_out_dir/flutter_web_sdk/kernel/legacy-canvaskit-sound/dart_sdk.js"),
  ]
}

# Compiles the sound autodetect renderer.
prebuilt_dart_action("flutter_dartdevc_canvaskit_html_kernel_sdk_sound") {
  deps = [
    "//third_party/dart:create_sdk",
    "//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 = [ "sdk_rewriter.dart" ] + web_ui_sources + web_engine_sources

  packages = dart_sdk_package_config

  script = "//third_party/dart/pkg/dev_compiler/bin/dartdevc.dart"

  outputs = [
    "$root_out_dir/flutter_web_sdk/kernel/amd-canvaskit-html-sound/dart_sdk.js",
    "$root_out_dir/flutter_web_sdk/kernel/amd-canvaskit-html-sound/dart_sdk.js.map",
  ]

  args = [
    "--enable-experiment=non-nullable",
    "--sound-null-safety",
    "--compile-sdk",
    "dart:core",

    # Additional Flutter web dart libraries
    "dart:ui",
    "dart:_engine",
    "--no-summarize",
    "--packages",
    "file:///" + rebase_path(dart_sdk_package_config),
    "--multi-root-scheme",
    "org-dartlang-sdk",
    "--multi-root",
    "file:///" + rebase_path("$root_out_dir"),
    "--multi-root-output-path",
    rebase_path("$root_out_dir/"),
    "--libraries-file",
    "org-dartlang-sdk:///flutter_web_sdk/libraries.json",
    "--inline-source-map",
    "-DFLUTTER_WEB_USE_SKIA=false",
    "-DFLUTTER_WEB_AUTO_DETECT=true",
    "--modules",
    "amd",
    "-o",
    rebase_path(
        "$root_out_dir/flutter_web_sdk/kernel/amd-canvaskit-html-sound/dart_sdk.js"),
    "--modules",
    "legacy",
    "-o",
    rebase_path(
        "$root_out_dir/flutter_web_sdk/kernel/legacy-canvaskit-html-sound/dart_sdk.js"),
  ]
}

# Compile the sound DDC SDK's summary.
prebuilt_dart_action("flutter_dartdevc_kernel_sdk_outline_sound") {
  deps = [
    "//third_party/dart:create_sdk",
    "//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 = [ "sdk_rewriter.dart" ] + web_ui_sources + web_engine_sources

  outputs = [ sdk_dill_sound ]

  script = "//third_party/dart/utils/bazel/kernel_worker.dart"

  args = [
    "--enable-experiment=non-nullable",
    "--sound-null-safety",
    "--summary-only",
    "--target",
    "ddc",
    "--packages-file",
    "file:///" + rebase_path(dart_sdk_package_config),
    "--multi-root-scheme",
    "org-dartlang-sdk",
    "--multi-root",
    "file:///" + rebase_path("$root_out_dir"),
    "--libraries-file",
    "org-dartlang-sdk:///flutter_web_sdk/libraries.json",
    "--output",
    rebase_path(sdk_dill_sound),
    "--source",
    "dart:core",

    # Additional Flutter web dart libraries
    "--source",
    "dart:ui",
    "--source",
    "dart:_engine",
  ]
}
