# 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.

source_set("renderer_headers_only") {
  sources = [
    "egl_and_gles.h",

    # TODO(b/211034223): Consider moving to render_tree
    "submission.h",
  ]
  deps = [
    "//base",
    "//cobalt/render_tree",
    "//cobalt/render_tree:animations",
    "//starboard",
  ]
}

static_library("renderer") {
  sources = [
    "fps_overlay.cc",
    "fps_overlay.h",
    "gles_ext.h",
    "pipeline.cc",
    "pipeline.h",
    "renderer_module.cc",
    "renderer_module.h",
    "renderer_module_default_options.cc",
    "smoothed_value.cc",
    "smoothed_value.h",
    "submission_queue.cc",
    "submission_queue.h",
  ]

  configs -= [ "//starboard/build/config:size" ]
  configs += [ "//starboard/build/config:speed" ]

  public_deps = [ ":renderer_headers_only" ]

  deps = [
    "//cobalt/base",
    "//cobalt/browser/memory_settings:browser_memory_settings",
    "//cobalt/configuration",
    "//cobalt/content/fonts:copy_font_data",
    "//cobalt/math",
    "//cobalt/render_tree",
    "//cobalt/render_tree:animations",
    "//cobalt/render_tree:render_tree",
    "//cobalt/renderer/backend:renderer_backend",
    "//cobalt/renderer/rasterizer",
    "//cobalt/renderer/rasterizer/skia:hardware_rasterizer",
    "//cobalt/renderer/rasterizer/skia:software_rasterizer",
    "//cobalt/system_window",
    "//nb",
    "//starboard:starboard_headers_only",
  ]

  if (is_starboard) {
    deps += [ default_renderer_options_dependency ]
  }

  if (!is_gold) {
    deps += [ "//cobalt/debug:console_command_manager" ]
  }
}

static_library("render_tree_pixel_tester") {
  sources = [
    "render_tree_pixel_tester.cc",
    "render_tree_pixel_tester.h",
  ]

  configs -= [ "//starboard/build/config:size" ]
  configs += [ "//starboard/build/config:speed" ]

  deps = [
    ":renderer",
    "//cobalt/base",
    "//cobalt/configuration",
    "//cobalt/math:math",
    "//cobalt/render_tree:render_tree",
    "//cobalt/renderer/backend:renderer_backend",
    "//cobalt/renderer/rasterizer/skia/skia",
    "//cobalt/renderer/test/png_utils",
    "//starboard:starboard_headers_only",
  ]
}

static_library("default_options") {
  sources = [ "//cobalt/renderer/get_default_rasterizer_for_platform.cc" ]

  deps = [
    "//cobalt/configuration",
    "//cobalt/renderer/backend:renderer_backend",
    "//cobalt/renderer/rasterizer/egl:hardware_rasterizer",
    "//cobalt/renderer/rasterizer/egl:software_rasterizer",
    "//cobalt/renderer/rasterizer/skia:hardware_rasterizer",
    "//starboard:starboard_headers_only",
  ]
}
