blob: 5bbe52543141afe233533518762113e50c9131e5 [file] [log] [blame]
# 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/zircon/zx_library.gni")
import("//tools/cppdocgen/cpp_docgen.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 = "partner"
sdk_headers = [ "lib/fdio/spawn-actions.h" ]
deps = [
":fdio",
"//zircon/system/ulib/zx",
]
}
}
fdio_constants = [
"include/lib/fdio/limits.h",
"include/lib/fdio/vfs.h",
]
# This target provides access to some shared constants and helper macros, without requiring fdio as
# a runtime dependency. This target must never provide (or reference) any public/extern symbols.
sdk_source_set("constants") {
category = "partner"
sdk_name = "fdio_constants"
include_base = "//sdk"
public_configs = [ ":fdio_includes" ]
sources = fdio_constants
}
# Headers exposed by fdio that we also want to use for the documentation target.
fdio_public_headers = [
"include/lib/fdio/directory.h",
"include/lib/fdio/fd.h",
"include/lib/fdio/fdio.h",
"include/lib/fdio/io.h",
"include/lib/fdio/namespace.h",
"include/lib/fdio/spawn.h",
"include/lib/fdio/unsafe.h",
"include/lib/fdio/watcher.h",
] + fdio_constants
# TODO(https://fxbug.dev/42113953): 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 (is_fuzzer) {
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 = "partner"
# This list is relative to the include/ directory.
sdk_headers = rebase_path(fdio_public_headers, "include")
sources = [
"bsdsocket.cc",
"directory.cc",
"directory_internal.h",
"errno.cc",
"event.cc",
"fd.cc",
"fdio.cc",
"fdio_slot.cc",
"fdio_slot.h",
"fdio_state.cc",
"fdio_state.h",
"fdio_unistd.cc",
"fdio_unistd.h",
"get_client.h",
"internal.h",
"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",
"socket.h",
"spawn.cc",
"stubs.cc",
"timer.cc",
"uname.cc",
"unistd.cc",
"unistd.h",
"unsafe.cc",
"waitable.cc",
"watcher.cc",
"zxio.cc",
"zxio.h",
]
deps = [
":cleanpath",
"//sdk/fidl/fuchsia.device:fuchsia.device_cpp",
"//sdk/fidl/fuchsia.io:fuchsia.io_cpp",
"//sdk/fidl/fuchsia.net:fuchsia.net_cpp",
"//sdk/fidl/fuchsia.net.name:fuchsia.net.name_cpp",
"//sdk/fidl/fuchsia.posix.socket:fuchsia.posix.socket_cpp",
"//sdk/fidl/fuchsia.posix.socket.packet:fuchsia.posix.socket.packet_cpp",
"//sdk/fidl/fuchsia.posix.socket.raw:fuchsia.posix.socket.raw_cpp",
"//sdk/fidl/fuchsia.process:fuchsia.process_cpp",
"//sdk/lib/fidl",
"//sdk/lib/fit",
"//sdk/lib/zxio",
"//sdk/lib/zxio:inception",
"//zircon/system/ulib/fbl",
"//zircon/system/ulib/zircon-internal",
"//zircon/system/ulib/zx",
"//zircon/third_party/ulib/musl:getifaddrs-internal",
"//zircon/third_party/ulib/safemath",
]
fdio_version_script = "fdio.ld"
symbols_api = "fdio.ifs"
inputs = [ fdio_version_script ]
ldflags = [ "-Wl,--version-script=" +
rebase_path(fdio_version_script, root_build_dir) ]
configs += [
# TODO(https://fxbug.dev/42085293): delete the below and fix compiler warnings
"//build/config:Wno-vla-cxx-extension",
# TODO(b/331282813): 'ENODATA' is deprecated in ISO C++, disable the warning for now.
"//build/config:Wno-deprecated-pragma",
]
}
} else {
source_set("fdio") {
public_configs = [ ":fdio_includes" ]
}
}
source_set("cleanpath") {
visibility = [
":*",
"tests:*",
]
sources = [
"cleanpath.cc",
"cleanpath.h",
]
deps = [ "//zircon/system/ulib/fbl" ]
}
cpp_docgen("docs") {
headers = fdio_public_headers
overview = "README.md"
include_dir = "include"
library_name = "fdio"
reference_repo_path = "sdk/lib/fdio"
deps = [ ":fdio" ]
}