# 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("//flutter/common/config.gni")
import("//flutter/impeller/tools/impeller.gni")
import("//flutter/testing/testing.gni")

source_set("gpu") {
  cflags = [
    # Dart gives us doubles. Skia and Impeller work in floats.
    # If Dart gives us a double > FLT_MAX or < -FLT_MAX, implicit conversion
    # will convert it to either inf/-inf or FLT_MAX/-FLT_MAX (undefined
    # behavior). This can result in surprising and difficult to debug behavior
    # for Flutter application developers, so it should be explicitly handled
    # via SafeNarrow.
    "-Wimplicit-float-conversion",
  ]

  if (is_win) {
    # This causes build failures in third_party dependencies on Windows.
    cflags += [ "-Wno-implicit-int-float-conversion" ]
  }

  public_configs = [ "//flutter:config" ]

  public_deps = []

  if (!defined(defines)) {
    defines = []
  }

  if (!is_fuchsia) {
    sources = [
      "command_buffer.cc",
      "command_buffer.h",
      "context.cc",
      "context.h",
      "device_buffer.cc",
      "device_buffer.h",
      "export.cc",
      "export.h",
      "fixtures.cc",
      "fixtures.h",
      "formats.cc",
      "formats.h",
      "host_buffer.cc",
      "host_buffer.h",
      "render_pass.cc",
      "render_pass.h",
      "render_pipeline.cc",
      "render_pipeline.h",
      "shader.cc",
      "shader.h",
      "shader_library.cc",
      "shader_library.h",
      "texture.cc",
      "texture.h",
    ]
  }
  deps = [
    "//flutter/assets",
    "//flutter/impeller",
    "//flutter/impeller/display_list:skia_conversions",
    "//flutter/impeller/shader_bundle:shader_bundle_flatbuffers",
    "//flutter/lib/ui",
    "//flutter/third_party/tonic",
  ]

  if (is_win) {
    # Required for M_PI and others.
    defines += [ "_USE_MATH_DEFINES" ]
  }
}

if (enable_unittests) {
}
