# Copyright 2018 The Crashpad 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.

import("../../build/crashpad_buildconfig.gni")

if (crashpad_is_in_fuchsia) {
  group("fuchsia") {
    public_deps = [
      "//zircon/public/lib/fdio",
      "//zircon/public/lib/zx",
      "//zircon/system/fidl/fuchsia-mem",
      "//zircon/system/fidl/fuchsia-sysinfo:fuchsia-sysinfo_c",
    ]
  }
} else if (crashpad_is_in_chromium) {
  group("fuchsia") {
    public_deps = [
      "//third_party/fuchsia-sdk/sdk:fdio",
      "//third_party/fuchsia-sdk/sdk:mem",
      "//third_party/fuchsia-sdk/sdk:sysinfo",
      "//third_party/fuchsia-sdk/sdk:zx",
    ]
  }
} else {
  sdk_path = "sdk/$host_os-amd64"
  sdk_pkg_path = "$sdk_path/pkg"
  sdk_fidl_sources_path = "$sdk_path/fidl"

  config("zx_config") {
    include_dirs = [ "$sdk_pkg_path/zx/include" ]
  }

  fidl_root_gen_dir = "$root_gen_dir/fidl/include"
  config("fidl_config") {
    include_dirs = [
      fidl_root_gen_dir,
      "$sdk_pkg_path/fidl/include",
      "$sdk_pkg_path/fidl_base/include",
      "$sdk_pkg_path/async/include",
      "$sdk_pkg_path/fidl_cpp/include",
      "$sdk_pkg_path/fidl_cpp_base/include",
      "$sdk_pkg_path/fidl_cpp_sync/include",
      "$sdk_pkg_path/fit/include",
    ]
  }

  source_set("zx") {
    sources = [
      "$sdk_pkg_path/zx/channel.cc",
      "$sdk_pkg_path/zx/event.cc",
      "$sdk_pkg_path/zx/eventpair.cc",
      "$sdk_pkg_path/zx/fifo.cc",
      "$sdk_pkg_path/zx/guest.cc",
      "$sdk_pkg_path/zx/interrupt.cc",
      "$sdk_pkg_path/zx/job.cc",
      "$sdk_pkg_path/zx/port.cc",
      "$sdk_pkg_path/zx/process.cc",
      "$sdk_pkg_path/zx/resource.cc",
      "$sdk_pkg_path/zx/socket.cc",
      "$sdk_pkg_path/zx/thread.cc",
      "$sdk_pkg_path/zx/timer.cc",
      "$sdk_pkg_path/zx/vmar.cc",
      "$sdk_pkg_path/zx/vmo.cc",
    ]

    public_configs = [ ":zx_config" ]
  }

  source_set("fidl_base") {
    sources = [
      "$sdk_pkg_path/fidl_base/builder.cc",
      "$sdk_pkg_path/fidl_base/decoding.cc",
      "$sdk_pkg_path/fidl_base/encoding.cc",
      "$sdk_pkg_path/fidl_base/envelope_frames.h",
      "$sdk_pkg_path/fidl_base/formatting.cc",
      "$sdk_pkg_path/fidl_base/linearizing.cc",
      "$sdk_pkg_path/fidl_base/message.cc",
      "$sdk_pkg_path/fidl_base/message_buffer.cc",
      "$sdk_pkg_path/fidl_base/message_builder.cc",
      "$sdk_pkg_path/fidl_base/transformer.cc",
      "$sdk_pkg_path/fidl_base/txn_header.c",
      "$sdk_pkg_path/fidl_base/validating.cc",
      "$sdk_pkg_path/fidl_base/visitor.h",
      "$sdk_pkg_path/fidl_base/walker.cc",
      "$sdk_pkg_path/fidl_base/walker.h",
    ]

    public_configs = [ ":fidl_config" ]
  }

  source_set("fidl_cpp_base") {
    sources = [
      "$sdk_pkg_path/fidl_cpp_base/clone.cc",
      "$sdk_pkg_path/fidl_cpp_base/decoder.cc",
      "$sdk_pkg_path/fidl_cpp_base/encoder.cc",
    ]

    public_configs = [
      ":fidl_config",
      ":zx_config",
    ]
  }

  fidl_sources = [
    {
      fidl = "$sdk_fidl_sources_path/fuchsia.mem/buffer.fidl"
      header_stem = "fuchsia/mem"
      library_name = "fuchsia.mem"
    },
    {
      fidl = "$sdk_fidl_sources_path/fuchsia.sysinfo/sysinfo.fidl"
      header_stem = "fuchsia/sysinfo"
      library_name = "fuchsia.sysinfo"
    },
  ]

  foreach(fidl_source, fidl_sources) {
    fidl_stem = "$target_gen_dir/fidl/${fidl_source.library_name}"
    json_representation = "$fidl_stem/intermediary_representation.json"
    c_stem = "$fidl_root_gen_dir/${fidl_source.header_stem}/c"
    c_header = "$c_stem/fidl.h"
    c_client = "$c_stem/client.cc"
    cpp_stem = "$fidl_root_gen_dir/${fidl_source.header_stem}/cpp/fidl"
    cpp_header = "$cpp_stem.h"
    cpp_source = "$cpp_stem.cc"
    coding_tables = "$fidl_stem/tables.c"

    # Compiles the .fidl file, outputs the intermediary JSON representation
    # and generates the C bindings.
    action("fidlc_${fidl_source.library_name}") {
      visibility = [ ":*" ]

      script = "runner.py"

      args = [
        rebase_path("$sdk_path/tools/fidlc", root_build_dir),
        "--c-header",
        rebase_path(c_header, root_build_dir),
        "--c-client",
        rebase_path(c_client, root_build_dir),
        "--tables",
        rebase_path(coding_tables, root_build_dir),
        "--json",
        rebase_path(json_representation, root_build_dir),
        "--name",
        fidl_source.library_name,
        "--files",
        rebase_path("$sdk_fidl_sources_path/zx/zx_common.fidl", root_build_dir),
        "--files",
        rebase_path(fidl_source.fidl, root_build_dir),
      ]

      inputs = [
        "$sdk_path/tools/fidlc",
        fidl_source.fidl,
      ]

      outputs = [
        c_client,
        c_header,
        coding_tables,
        json_representation,
      ]
    }

    # Generates the C++ bindings from the intermediary JSON representation.
    action("fidlgen_cpp_${fidl_source.library_name}") {
      visibility = [ ":*" ]

      script = "runner.py"

      args = [
        rebase_path("$sdk_path/tools/fidlgen", root_build_dir),
        "--json",
        rebase_path(json_representation, root_build_dir),
        "--include-base",
        rebase_path(fidl_root_gen_dir, root_build_dir),
        "--output-base",
        rebase_path(cpp_stem, root_build_dir),
        "--generators",
        "cpp",
      ]

      inputs = [
        "$sdk_path/tools/fidlgen",
        json_representation,
      ]

      outputs = [
        cpp_header,
        cpp_source,
      ]

      deps = [ ":fidlc_${fidl_source.library_name}" ]
    }

    source_set("${fidl_source.library_name}_tables") {
      sources = [ coding_tables ]

      deps = [ ":fidlc_${fidl_source.library_name}" ]

      public_configs = [ ":fidl_config" ]
    }

    source_set("${fidl_source.library_name}_c") {
      sources = [
        c_client,
        c_header,
      ]

      deps = [
        ":${fidl_source.library_name}_tables",
        ":fidlc_${fidl_source.library_name}",
      ]

      public_configs = [ ":fidl_config" ]
    }

    source_set("${fidl_source.library_name}_cpp") {
      sources = [
        cpp_header,
        cpp_source,
      ]

      deps = [
        ":${fidl_source.library_name}_tables",
        ":fidlgen_cpp_${fidl_source.library_name}",
      ]

      public_configs = [
        ":fidl_config",
        ":zx_config",
      ]
    }
  }

  static_library("fuchsia") {
    deps = [
      ":fidl_base",
      ":fidl_cpp_base",
      ":fuchsia.mem_cpp",
      ":fuchsia.sysinfo_c",
      ":zx",
    ]

    public_configs = [
      ":fidl_config",
      ":zx_config",
    ]
  }
}
