# Copyright 2013 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("tools/impeller.gni")

config("impeller_public_config") {
  include_dirs = [ ".." ]

  defines = []

  if (impeller_supports_platform) {
    defines += [ "IMPELLER_SUPPORTS_PLATFORM=1" ]
  }

  if (impeller_supports_rendering) {
    defines += [ "IMPELLER_SUPPORTS_RENDERING=1" ]
  }

  if (impeller_enable_metal) {
    defines += [ "IMPELLER_ENABLE_METAL=1" ]
  }

  if (impeller_enable_opengles) {
    defines += [ "IMPELLER_ENABLE_OPENGLES=1" ]
  }

  if (impeller_trace_all_gl_calls) {
    defines += [ "IMPELLER_TRACE_ALL_GL_CALLS" ]
  }

  if (impeller_error_check_all_gl_calls) {
    defines += [ "IMPELLER_ERROR_CHECK_ALL_GL_CALLS" ]
  }

  if (is_win) {
    defines += [
      "_USE_MATH_DEFINES",

      # TODO(dnfield): https://github.com/flutter/flutter/issues/50053
      "_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING",
    ]
  }
}

group("impeller") {
  public_deps = [
    "archivist",
    "base",
    "geometry",
    "tessellator",
  ]

  if (impeller_supports_rendering) {
    public_deps += [
      "aiks",
      "display_list",
      "entity",
      "image",
      "renderer",
      "renderer/backend",
      "typographer",
    ]
  }
}

executable("impeller_unittests") {
  testonly = true

  deps = [
    "archivist:archivist_unittests",
    "base:base_unittests",
    "blobcat:blobcat_unittests",
    "compiler:compiler_unittests",
    "geometry:geometry_unittests",
    "tessellator:tessellator_unittests",
  ]

  if (impeller_supports_rendering) {
    deps += [
      "aiks:aiks_unittests",
      "display_list:display_list_unittests",
      "entity:entity_unittests",
      "fixtures",
      "image:image_unittests",
      "playground",
      "renderer:renderer_unittests",
      "typographer:typographer_unittests",
    ]
  }
}
