# Copyright 2018 Google Inc.
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("../../gn/skia.gni")

config("public_config") {
  include_dirs = [ "include" ]
}

skia_component("sksg") {
  check_includes = false
  import("sksg.gni")
  public_configs = [ ":public_config" ]
  sources = skia_sksg_sources
  configs = [ "../../:skia_private" ]
  deps = [ "../..:skia" ]
}

if (defined(is_skia_standalone) && skia_enable_tools) {
  skia_source_set("tests") {
    testonly = true

    configs = [ "../..:skia_private" ]
    sources = [ "tests/SGTest.cpp" ]
    deps = [
      ":sksg",
      "../..:skia",
      "../..:test",
    ]
  }

  skia_source_set("samples") {
    if (target_cpu != "wasm") {  # TODO: clean up wasm test
      testonly = true

      configs = [
        "../..:skia_private",
        "../..:samples_config",  # TODO: refactor to make this nicer
      ]
      sources = [ "samples/SampleSVGPong.cpp" ]
      deps = [
        ":sksg",
        "../..:samples",
        "../..:skia",
      ]
    }
  }
}
