# Copyright 2021 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("//cobalt/bindings/bindings_templates.gni")
import("//cobalt/browser/idl_files.gni")
import("//cobalt/script/v8c/v8c_variables.gni")

##########################################################
# Configuration variables for bindings generation scripts.
##########################################################

_bindings_output_dir = "$root_gen_dir/bindings/browser"
_bindings_scripts_output_dir = "$_bindings_output_dir/scripts"

# Blink interface info is calculated in two stages. First at a per-component level
# (in Blink this is core or modules) and then these are combined. While Cobalt
# currently does not and may not need to distinguish between components, we adhere to
# Blink's process for simplicity.
_component_info_pickle = "$_bindings_scripts_output_dir/component_info.pickle"
_interfaces_info_individual_pickle =
    "$_bindings_scripts_output_dir/interfaces_info_individual.pickle"
_interfaces_info_combined_pickle =
    "$_bindings_scripts_output_dir/interfaces_info_overall.pickle"
_global_objects_pickle = "$_bindings_scripts_output_dir/GlobalObjects.pickle"

# Base directory into which generated bindings source files will be
# generated. Directory structure will mirror the directory structure
# that the .idl files came from.
_generated_source_output_dir = "$_bindings_output_dir/source"

# Directory containing generated IDL files.
_generated_idls_output_dir = "$_bindings_output_dir/idl"

# Array of all interfaces that need global constructors.
_global_constructor_interfaces = [
  "Window",
  "DedicatedWorkerGlobalScope",
  "ServiceWorkerGlobalScope",
]

target(final_executable_type, "cobalt") {
  sources = [ "main.cc" ]
  deps = [
    ":browser",
    ":browser_switches",
    "//cobalt/base",
    "//net",
  ]
  data_deps = [
    "//cobalt/dom:licenses",
    "//cobalt/network:copy_ssl_certificates",
    "//third_party/icu:icudata",
  ]
  if (cobalt_font_package == "empty") {
    data_deps += [ "//cobalt/content/fonts:copy_font_data" ]
  } else {
    data_deps += [
      "//cobalt/content/fonts:copy_fonts",
      "//cobalt/content/fonts:fonts_xml",
    ]
  }
  if (!is_gold) {
    data_deps += [
      "//cobalt/debug/backend/content:copy_backend_web_files",
      "//cobalt/debug/console/content:copy_console_web_files",
      "//cobalt/debug/remote/content:copy_remote_web_files",
      "//cobalt/speech:speech_testdata",
      "//cobalt/webdriver:copy_webdriver_data",
      "//third_party/devtools:build_release_devtools",
      "//third_party/devtools:copy_devtools_modules",
      "//third_party/devtools:copy_inspector_images",
      "//third_party/devtools:frontend_protocol_sources",
      "//third_party/devtools:supported_css_properties",
    ]
  }
}

##############################
# Bindings generation targets.
##############################

config("bindings_includes") {
  include_dirs = [ _generated_source_output_dir ]
}

source_set("browser_switches") {
  has_pedantic_warnings = true
  sources = [
    "switches.cc",
    "switches.h",
  ]
  public_deps = [ "//starboard:starboard_headers_only" ]
}

static_library("browser") {
  has_pedantic_warnings = true

  sources = [
    "application.cc",
    "application.h",
    "browser_module.cc",
    "browser_module.h",
    "device_authentication.cc",
    "device_authentication.h",
    "lifecycle_observer.h",
    "on_screen_keyboard_starboard_bridge.cc",
    "on_screen_keyboard_starboard_bridge.h",
    "render_tree_combiner.cc",
    "render_tree_combiner.h",
    "screen_shot_writer.cc",
    "screen_shot_writer.h",
    "service_worker_registry.cc",
    "service_worker_registry.h",
    "splash_screen.cc",
    "splash_screen.h",
    "splash_screen_cache.cc",
    "splash_screen_cache.h",
    "suspend_fuzzer.cc",
    "suspend_fuzzer.h",
    "system_platform_error_handler.cc",
    "system_platform_error_handler.h",
    "url_handler.cc",
    "url_handler.h",
    "user_agent_platform_info.cc",
    "user_agent_platform_info.h",
    "user_agent_string.cc",
    "user_agent_string.h",
    "web_module.cc",
    "web_module.h",
    "web_module_stat_tracker.cc",
    "web_module_stat_tracker.h",
  ]

  public_deps = [ "//cobalt/dom" ]

  deps = [
    ":bindings",
    ":browser_switches",
    ":generated_bindings",
    ":generated_types",
    "//cobalt/account",
    "//cobalt/audio",
    "//cobalt/base",
    "//cobalt/browser/memory_settings:browser_memory_settings",
    "//cobalt/browser/memory_tracker:memory_tracker_tool",
    "//cobalt/build:cobalt_build_id",
    "//cobalt/configuration",
    "//cobalt/css_parser",
    "//cobalt/cssom",
    "//cobalt/dom_parser",
    "//cobalt/encoding:text_encoding",
    "//cobalt/fetch",
    "//cobalt/h5vcc",
    "//cobalt/input",
    "//cobalt/layout",
    "//cobalt/loader",
    "//cobalt/math",
    "//cobalt/media",
    "//cobalt/media_capture",
    "//cobalt/media_session",
    "//cobalt/network",
    "//cobalt/overlay_info",
    "//cobalt/persistent_storage:persistent_settings",
    "//cobalt/render_tree",
    "//cobalt/renderer",
    "//cobalt/renderer/test/png_utils",
    "//cobalt/script",
    "//cobalt/script:engine",
    "//cobalt/speech",
    "//cobalt/sso",
    "//cobalt/storage",
    "//cobalt/subtlecrypto",
    "//cobalt/system_window",
    "//cobalt/trace_event",
    "//cobalt/ui_navigation",
    "//cobalt/watchdog",
    "//cobalt/web",
    "//cobalt/webdriver",
    "//cobalt/websocket",
    "//cobalt/worker",
    "//cobalt/xhr",
    "//crypto",
    "//nb",
    "//net",
    "//starboard",
    "//third_party/icu:icui18n",
    "//third_party/protobuf:protobuf_lite",
    "//url",
  ]

  if (is_gold) {
    defines = [ "COBALT_FORCE_HTTPS" ]
  } else {
    sources += [
      "debug_console.cc",
      "debug_console.h",
      "lifecycle_console_commands.cc",
      "lifecycle_console_commands.h",
    ]
    defines = [
      "ENABLE_ABOUT_SCHEME",
      "COBALT_ENABLE_JAVASCRIPT_ERROR_LOGGING",
    ]
    deps += [
      "//cobalt/debug",
      "//cobalt/debug:console_command_manager",
    ]
  }

  if (sb_is_evergreen) {
    deps += [ "//cobalt/updater" ]
  } else {
    deps += cobalt_platform_dependencies
  }
}

target(gtest_target_type, "browser_test") {
  testonly = true
  has_pedantic_warnings = true

  sources = [
    "device_authentication_test.cc",
    "memory_settings/auto_mem_settings_test.cc",
    "memory_settings/auto_mem_test.cc",
    "memory_settings/calculations_test.cc",
    "memory_settings/memory_settings_test.cc",
    "memory_settings/pretty_print_test.cc",
    "memory_settings/table_printer_test.cc",
    "memory_settings/test_common.h",
    "memory_tracker/tool/tool_impl_test.cc",
    "memory_tracker/tool/util_test.cc",
    "user_agent_string_test.cc",
  ]

  deps = [
    ":browser",
    ":browser_switches",
    "//cobalt/base",
    "//cobalt/browser/memory_settings:browser_memory_settings",
    "//cobalt/browser/memory_tracker:memory_tracker_tool",
    "//cobalt/dom",
    "//cobalt/loader",
    "//cobalt/math",
    "//cobalt/network",
    "//cobalt/speech",
    "//cobalt/storage",
    "//cobalt/test:run_all_unittests",
    "//nb",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

group("bindings") {
  public_configs = [ ":bindings_includes" ]

  deps = [
    ":generated_bindings_sources",
    ":generated_types_sources",
    "//cobalt/h5vcc",
    "//cobalt/webdriver",
  ]
}

idl_compile("generated_bindings") {
  sources = source_idl_files

  cache_directory = _bindings_scripts_output_dir
  component_info = _component_info_pickle
  interfaces_info = _interfaces_info_combined_pickle
  output_directory = _generated_source_output_dir
  header_prefix = "${generated_bindings_prefix}"

  # TODO(b/211055528): Missing deps from generated sources.
  deps = [
    ":cached_jinja_templates",
    ":cached_lex_yacc_tables",
    ":generated_type_conversion",
    ":generated_types",
    ":global_constructors_idls",
    ":interfaces_info_individual",
    ":interfaces_info_overall",
    "//cobalt/script:engine",
  ]
  public_deps = engine_dependencies

  public_configs = [ ":bindings_includes" ]
}

source_set("generated_bindings_sources") {
  sources = get_target_outputs(":generated_bindings")
  public_deps = [ ":generated_bindings" ]
  deps = [
    # Ensure that all the files have been generated before trying to compile.
    ":generated_types",
    "//cobalt/h5vcc",
    "//cobalt/webdriver",
  ]
}

idl_compile("generated_types") {
  sources = generated_header_idl_files

  cache_directory = _bindings_scripts_output_dir
  component_info = _component_info_pickle
  interfaces_info = _interfaces_info_combined_pickle
  output_directory = _generated_source_output_dir

  # TODO(b/211055528): Missing deps from generated sources.
  deps = [
    ":cached_jinja_templates",
    ":cached_lex_yacc_tables",
    ":global_constructors_idls",
    ":interfaces_info_individual",
    ":interfaces_info_overall",
  ]
  public_deps = engine_dependencies

  public_configs = [ ":bindings_includes" ]
}

source_set("generated_types_sources") {
  sources = get_target_outputs(":generated_types")
  public_deps = [ ":generated_types" ]
  deps = [
    # Ensure that all the files have been generated before trying to compile.
    ":generated_bindings",
  ]
}

generate_type_conversion("generated_type_conversion") {
  # TODO(b/211055528): Missing deps from generated sources.
  deps = [
    ":cached_jinja_templates",
    ":cached_lex_yacc_tables",
    ":global_constructors_idls",
    ":interfaces_info_overall",
  ]

  # Generated IDL files that define all the constructors that are on the global
  # scope objects.
  global_names_idl_path = _generated_idls_output_dir
  interfaces = _global_constructor_interfaces

  inputs = [ _interfaces_info_combined_pickle ]
  inputs += source_idl_files
  inputs += generated_header_idl_files

  cache_directory = _bindings_scripts_output_dir
  output_dir = _generated_source_output_dir
  interfaces_info = _interfaces_info_combined_pickle
  component_info = _component_info_pickle
}

compute_global_objects("global_objects") {
  idl_files = source_idl_files + generated_header_idl_files

  global_objects_file = _global_objects_pickle
}

compute_global_constructors_idls("global_constructors_idls") {
  idl_files = source_idl_files
  global_objects_file = _global_objects_pickle

  # Generated IDL files that will define all the constructors that should be
  # on the global scope objects.
  global_names_idl_path = _generated_idls_output_dir
  interfaces = _global_constructor_interfaces
  deps = [ ":global_objects" ]
}

compute_interfaces_info_individual("interfaces_info_individual") {
  idl_files =
      source_idl_files + generated_header_idl_files + dependency_idl_files

  # Generated IDL files that define all the constructors that are on the global
  # scope objects.
  global_names_idl_path = _generated_idls_output_dir
  interfaces = _global_constructor_interfaces
  component_info_file = _component_info_pickle
  interfaces_info_file = _interfaces_info_individual_pickle
  cache_directory = _bindings_scripts_output_dir

  deps = [
    ":cached_lex_yacc_tables",
    ":global_constructors_idls",
  ]
}

generate_interfaces_info_overall("interfaces_info_overall") {
  individual_interfaces_file = _interfaces_info_individual_pickle
  combined_interfaces_file = _interfaces_info_combined_pickle
  deps = [ ":interfaces_info_individual" ]
}

cache_lex_tables("cached_lex_yacc_tables") {
  output_dir = _bindings_scripts_output_dir
}

cache_templates("cached_jinja_templates") {
  output_dir = _bindings_scripts_output_dir
}

target(final_executable_type, "snapshot_app_stats") {
  sources = [ "snapshot_app_stats.cc" ]
  deps = [
    ":browser",
    ":browser_switches",
    ":cobalt",
    "//cobalt/base",
    "//third_party/protobuf:protobuf_lite",
  ]
}
