# 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/browser_bindings_variables.gni")
import("//cobalt/browser/idl_files.gni")

target(final_executable_type, "cobalt") {
  sources = [ "main.cc" ]
  deps = [
    ":browser",
    ":browser_switches",
    "//cobalt/base",
    "//net",
  ]
}

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

source_set("browser_switches") {
  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",
    "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",
    "//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/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/webdriver",
    "//cobalt/websocket",
    "//cobalt/xhr",
    "//crypto",
    "//nb",
    "//net",
    "//starboard",
    "//third_party/icu:icui18n",
    "//third_party/protobuf:protobuf_lite",
    "//url",
  ]

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

  if (sb_is_evergreen) {
    # TODO(b/206642994): Migrate //cobalt/updater
    # deps += [ "//cobalt/updater" ]
  } else {
    deps += cobalt_platform_dependencies
  }
}

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
  extended_attributes = extended_attributes_file
  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",
    ":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",
  ]
}

idl_compile("generated_types") {
  sources = generated_header_idl_files

  cache_directory = bindings_scripts_output_dir
  component_info = component_info_pickle
  extended_attributes = extended_attributes_file
  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",
  ]
}

action("generated_type_conversion") {
  script = "//starboard/build/run_bash.py"
  py_script = engine_conversion_header_generator_script

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

  public_deps = engine_dependencies

  # Generated IDL file that will define all the constructors that should be
  # on the Window object.
  global_names_idl_file =
      "$generated_idls_output_dir/dom/window_constructors.idl"
  inputs = [
    py_script,
    interfaces_info_combined_pickle,
    extended_attributes_file,
    global_names_idl_file,
    "//cobalt/bindings/shared/idl_conditional_macros.h",
  ]
  inputs += bindings_extra_inputs
  inputs += source_idl_files
  inputs += generated_header_idl_files

  outputs = [ generated_type_conversion_header_file ]

  args = [
    "python2",
    rebase_path(py_script, root_build_dir),
    "--cache-directory",
    rebase_path(bindings_scripts_output_dir, root_build_dir),
    "--output-dir",
    rebase_path(generated_source_output_dir, root_build_dir),
    "--interfaces-info",
    rebase_path(interfaces_info_combined_pickle, root_build_dir),
    "--component-info",
    rebase_path(component_info_pickle, root_build_dir),
  ]
}

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 file that will define all the constructors that should be
  # on the Window object.
  global_names_idl_file =
      "$generated_idls_output_dir/dom/window_constructors.idl"

  # Dummy header file which is generated because the idl compiler assumes
  # there is a header for each IDL.
  global_constructors_generated_header_file =
      "$generated_idls_output_dir/dom/window_constructors.h"

  deps = [ ":global_objects" ]
}

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

  # Generated IDL file that will define all the constructors that should be
  # on the Window object.
  generated_idl_files = "$generated_idls_output_dir/dom/window_constructors.idl"
  component_info_file = component_info_pickle
  interfaces_info_file = interfaces_info_individual_pickle
  cache_directory = bindings_scripts_output_dir
  extended_attributes = extended_attributes_file

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

action("interfaces_info_overall") {
  script = "//starboard/build/run_bash.py"
  py_script = "$bindings_scripts_dir/compute_interfaces_info_overall.py"

  deps = [ ":interfaces_info_individual" ]

  inputs = [
    py_script,
    interfaces_info_individual_pickle,
  ]

  outputs = [ interfaces_info_combined_pickle ]

  args = [
    "python2",
    rebase_path(py_script, root_build_dir),
    "--",
    rebase_path(interfaces_info_individual_pickle, root_build_dir),
    rebase_path(interfaces_info_combined_pickle, root_build_dir),
  ]
}

action("cached_lex_yacc_tables") {
  script = "//starboard/build/run_bash.py"
  py_script = "$bindings_scripts_dir/blink_idl_parser.py"

  inputs = [ py_script ]
  inputs += idl_lexer_parser_files

  outputs = [
    "$bindings_scripts_output_dir/lextab.py",
    "$bindings_scripts_output_dir/parsetab.pickle",
  ]

  args = [
    "python2",
    rebase_path(py_script, root_build_dir),
    rebase_path(bindings_scripts_output_dir, root_build_dir),
  ]
}

action("cached_jinja_templates") {
  script = "//starboard/build/run_bash.py"
  py_script = "//cobalt/bindings/code_generator_cobalt.py"

  inputs = [
    py_script,
    "//cobalt/bindings/path_generator.py",
    "//third_party/jinja2/__init__.py",
    "//third_party/markupsafe/__init__.py",  # jinja2 dep
  ]
  inputs += code_generator_template_files

  # TODO: Figure out a way to list the actual outputs instead
  # Dummy to track dependency
  outputs = [ "$bindings_scripts_output_dir/cached_jinja_templates.stamp" ]

  args = [
    "python2",
    rebase_path(py_script, root_build_dir),
    rebase_path("$bindings_scripts_output_dir", root_build_dir),
    rebase_path("$engine_templates_dir", root_build_dir),
    rebase_path("$bindings_scripts_output_dir/cached_jinja_templates.stamp",
                root_build_dir),
  ]
}
