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

static_library("common") {
  visibility = [ ":*" ]

  sources = [
    "cobalt_skia_type_conversions.cc",
    "cobalt_skia_type_conversions.h",
    "font.cc",
    "font.h",
    "glyph_buffer.cc",
    "glyph_buffer.h",
    "harfbuzz_font.cc",
    "harfbuzz_font.h",
    "image.cc",
    "image.h",
    "render_tree_node_visitor.cc",
    "render_tree_node_visitor.h",
    "scratch_surface_cache.cc",
    "scratch_surface_cache.h",
    "skottie_animation.cc",
    "skottie_animation.h",
    "software_image.h",
    "text_shaper.cc",
    "text_shaper.h",
    "typeface.cc",
    "typeface.h",
  ]

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

  public_deps = [
    "//base",
    "//cobalt/base",
    "//cobalt/math",
    "//cobalt/render_tree",
    "//cobalt/renderer/rasterizer/skia/skia",
    "//third_party/harfbuzz-ng",
    "//third_party/icu:icuuc",
    "//third_party/ots",
  ]

  deps = [
    "//base:i18n",
    "//cobalt/renderer/backend:renderer_backend",
    "//cobalt/renderer/rasterizer/common",
  ]
}

static_library("hardware_rasterizer") {
  sources = [
    "gl_format_conversions.cc",
    "hardware_image.cc",
    "hardware_image.h",
    "hardware_mesh.cc",
    "hardware_mesh.h",
    "hardware_rasterizer.cc",
    "hardware_rasterizer.h",
    "hardware_resource_provider.cc",
    "hardware_resource_provider.h",
    "vertex_buffer_object.cc",
    "vertex_buffer_object.h",
  ]

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

  deps = [
    ":common",
    "//cobalt/renderer:renderer_headers_only",
    "//cobalt/renderer/backend:renderer_backend",
    "//cobalt/renderer/backend/egl:egl_backend",
    "//cobalt/renderer/rasterizer/common",
    "//starboard:starboard_headers_only",
  ]
}

static_library("software_rasterizer") {
  sources = [
    "software_image.cc",
    "software_mesh.h",
    "software_rasterizer.cc",
    "software_rasterizer.h",
    "software_resource_provider.cc",
    "software_resource_provider.h",
  ]

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

  deps = [ ":common" ]
}
