# 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/impeller/tools/impeller.gni")
import("//flutter/shell/version/version.gni")
import("//flutter/third_party/flatbuffers/flatbuffers.gni")

config("runtime_stage_config") {
  configs = [ "//flutter/impeller:impeller_public_config" ]
  include_dirs = [ "$root_gen_dir/flutter" ]
}

flatbuffers("importer_flatbuffers") {
  flatbuffers = [ "scene.fbs" ]
  public_configs = [ ":runtime_stage_config" ]
  public_deps = [ "//flutter/third_party/flatbuffers" ]
}

impeller_component("conversions") {
  sources = [
    "conversions.cc",
    "conversions.h",
  ]

  public_deps = [
    ":importer_flatbuffers",
    "../../base",
    "../../geometry",
    "//flutter/fml",
  ]
}

impeller_component("importer_lib") {
  # Current versions of libcxx have deprecated some of the UTF-16 string
  # conversion APIs.
  defines = [ "_LIBCPP_DISABLE_DEPRECATION_WARNINGS" ]

  sources = [
    "importer.h",
    "importer_gltf.cc",
    "switches.cc",
    "switches.h",
    "types.h",
    "vertices_builder.cc",
    "vertices_builder.h",
  ]

  public_deps = [
    ":conversions",
    ":importer_flatbuffers",
    "../../base",
    "../../compiler:utilities",
    "../../geometry",
    "//flutter/fml",

    # All third_party deps must be reflected below in the scenec_license
    # target.
    "//flutter/third_party/tinygltf",
  ]
}

generated_file("scenec_license") {
  source_path = rebase_path(".", "//flutter")
  git_url = "https://github.com/flutter/engine/tree/$engine_version"
  outputs = [ "$target_gen_dir/LICENSE.scenec.md" ]
  contents = [
    "# scenec",
    "",
    "This tool is used by the Flutter SDK to import 3D geometry.",
    "",
    "Source code for this tool: [flutter/engine/$source_path]($git_url/$source_path).",
    "",
    "## Licenses",
    "",
    "### scenec",
    "",
    read_file("//flutter/sky/packages/sky_engine/LICENSE", "string"),
    "",

    # These licenses are ignored by the main license checker, since they are not
    # shipped to end-application binaries and only shipped as part of developer
    # tooling in scenec. Add them here.
    "## Additional open source licenses",
    "",
    "### tinygltf",
    "",
    read_file("//flutter/third_party/tinygltf/LICENSE", "string"),
  ]
}

group("importer") {
  deps = [
    ":scenec",
    ":scenec_license",
  ]
}

impeller_component("scenec") {
  target_type = "executable"

  sources = [ "scenec_main.cc" ]

  deps = [ ":importer_lib" ]

  metadata = {
    entitlement_file_path = [ "scenec" ]
  }
}

impeller_component("importer_unittests") {
  testonly = true

  output_name = "scenec_unittests"

  sources = [ "importer_unittests.cc" ]

  deps = [
    ":importer_lib",
    "../../fixtures",
    "../../geometry:geometry_asserts",
    "//flutter/testing:testing_lib",
  ]
}
