# Copyright 2019 The Fuchsia 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("//build/fuzzing/fuzzer.gni")
import("//build/unification/zx_library.gni")

group("tests") {
  testonly = true
  deps = [ "tests" ]
}

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

if (is_fuchsia) {
  zx_library("fdio-spawn-actions") {
    configs += [ "//build/config:all_source" ]
    sdk = "source"
    sdk_publishable = true
    sdk_headers = [ "lib/fdio/spawn-actions.h" ]
    shared = true
    deps = [
      ":fdio",
      "//zircon/public/lib/zx",
    ]
  }
}

# TODO(fxbug.dev/38226): This is a kludge to make "foosan-fuzzer" builds actually just use
# the plain "foosan" build of libfdio.  This works around the problem that
# libfuzzer itself calls into libfdio and so its own calls pollute the data
# it's collecting about the code under test. We explicitly depend on the build
# that has the same foosan instrumentation to catch bugs but doesn't have the
# fuzzer (i.e. coverage tracking) instrumentation that influences libfuzzer's
# choices.
#
# In Fuchsia's GN, this requires a `select_variant` scope in args.gn must
# specify the "foosan" varaint for the toolchain variant to be available.
# `fx set`ensures this by adding a `select_variant` scope for libfdio.so itself
# with its "-fuzz-with" parameter.
if (toolchain_variant.configs + fuzzer_configs - fuzzer_configs !=
    toolchain_variant.configs) {
  group("fdio") {
    suffix = string_replace(toolchain_variant.suffix, "-fuzzer", "")
    public_deps = [ ":fdio(${toolchain_variant.base}${suffix})" ]
    public_configs = [ ":fdio_includes" ]
  }
} else if (is_fuchsia) {
  zx_library("fdio") {
    configs += [ "//build/config:all_source" ]
    sdk = "shared"
    sdk_publishable = true
    sdk_headers = [
      "lib/fdio/directory.h",
      "lib/fdio/fd.h",
      "lib/fdio/fdio.h",
      "lib/fdio/io.h",
      "lib/fdio/limits.h",
      "lib/fdio/namespace.h",
      "lib/fdio/private.h",
      "lib/fdio/spawn.h",
      "lib/fdio/unsafe.h",
      "lib/fdio/vfs.h",
      "lib/fdio/watcher.h",
    ]
    shared = true
    sources = [
      "bsdsocket.cc",
      "errno.cc",
      "event.cc",
      "fd.cc",
      "fdio.cc",
      "fdio_unistd.cc",
      "get-vmo.cc",
      "iovec.cc",
      "mem.cc",
      "namespace/local-connection.cc",
      "namespace/local-filesystem.cc",
      "namespace/local-vnode.cc",
      "namespace/namespace.cc",
      "null.cc",
      "remoteio.cc",
      "socket.cc",
      "spawn.cc",
      "stubs.cc",
      "timer.cc",
      "uname.cc",
      "unistd.cc",
      "waitable.cc",
      "watcher.cc",
      "zxio.cc",
    ]
    deps = [
      "//sdk/fidl/fuchsia.device:fuchsia.device_llcpp",
      "//sdk/fidl/fuchsia.hardware.pty:fuchsia.hardware.pty_llcpp",
      "//sdk/fidl/fuchsia.io:fuchsia.io_llcpp",
      "//sdk/fidl/fuchsia.io2:fuchsia.io2_llcpp",
      "//sdk/fidl/fuchsia.net:fuchsia.net_llcpp",
      "//sdk/fidl/fuchsia.posix.socket:fuchsia.posix.socket_llcpp",
      "//sdk/fidl/fuchsia.process:fuchsia.process_llcpp",
      "//zircon/public/lib/fbl",
      "//zircon/public/lib/fidl",
      "//zircon/public/lib/safemath",
      "//zircon/public/lib/zircon-internal",
      "//zircon/public/lib/zx",
      "//zircon/system/ulib/zxio",
      "//zircon/third_party/ulib/musl:getifaddrs-internal",
    ]
  }
} else {
  source_set("fdio") {
    public_configs = [ ":fdio_includes" ]
  }
}
