# 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/inotify.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",
      "directory.cc",
      "errno.cc",
      "event.cc",
      "fd.cc",
      "fdio.cc",
      "fdio_unistd.cc",
      "inotify.cc",
      "io.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",
      "unsafe.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",
      "//sdk/lib/stdcompat",
      "//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" ]
  }
}
