# 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("$zx/public/gn/config/standard.gni")
import("$zx/public/gn/zbi.gni")

assert(current_toolchain != default_toolchain)
assert(current_cpu != "")

# TODO(BLD-353): This is all temporary hacks for integrating with
# the legacy Fuchsia GN build.  This file should not exist at all.

group("ulib") {
  testonly = true
  deps = [
    "$zx/system/dev/audio/lib",
    "$zx/system/dev/lib",
    "$zx/system/fidl/fuchsia-net-stack:c",
    "$zx/third_party/ulib",
    "async",
    "async:async-cpp",
    "async:async-default",
    "async-loop",
    "async-loop:async-loop-cpp",
    "async-testing",
    "audio-driver-proto",
    "audio-proto-utils",
    "audio-utils",
    "backtrace-request",
    "bitmap",
    "blktest",
    "blobfs",
    "block-client",
    "bootdata",
    "bootfs",
    "c",
    "c:crt1",
    "chromeos-disk-setup",
    "cmdline",
    "cobalt-client",
    "crypto",
    "ddk",
    "ddktl",
    "devmgr-integration-test",
    "devmgr-launcher",
    "digest",
    "disk-inspector",
    "dispatcher-pool",
    "driver",
    "driver-info",
    "driver-unit-test",
    "edid",
    "elf-search",
    "elfload",
    "explicit-memory",
    "fbl",
    "fdio",
    "fidl",
    "fidl:fidl-llcpp",
    "fidl:fidl_base",
    "fidl-async",
    "fidl-async:fidl-async-cpp",
    "fidl-utils",
    "fit",
    "framebuffer",
    "fs",
    "fs-management",
    "fs-test-utils",
    "ftl",
    "fvm",
    "fzl",
    "gfx",
    "gfx-font-data",
    "gpt",
    "hid",
    "hid-parser",
    "hwreg",
    "inet6",
    "inspect-vmo",
    "inspector",
    "intel-hda",
    "kvstore",
    "launchpad",
    "ldmsg",
    "libzbi",
    "loader-service",
    "lockdep",
    "log",
    "log-writer-logger",
    "log-writer-textfile",
    "logger",
    "memfs",
    "memfs:memfs-cpp",
    "minfs",
    "mini-process",
    "mock-function",
    "pci",
    "perftest",
    "port",
    "pretty",
    "process-launcher",
    "ramdevice-client",
    "region-alloc",
    "rtc",
    "runtests-utils",
    "runtime",
    "smbios",
    "storage-metrics",
    "svc",
    "sync",
    "syslog",
    "sysmem-connector",
    "task-utils",
    "tee-client-api",
    "test-utils",
    "tftp",
    "trace",
    "trace:trace-with-static-engine",
    "trace-engine",
    "trace-engine:trace-engine-headers-for-reader",
    "trace-engine:trace-engine-static",
    "trace-provider",
    "trace-provider:trace-handler",
    "trace-provider:trace-provider-fdio-connect",
    "trace-provider:trace-provider-with-fdio",
    "trace-provider:trace-provider-with-static-engine",
    "trace-reader",
    "trace-test-utils",
    "trace-vthread",
    "trace-vthread:trace-vthread-with-static-engine",
    "unittest",
    "utf_conversion",
    "virtio",
    "xdc-host-utils",
    "xdc-server-utils",
    "zbi-bootfs",
    "zircon",
    "zircon-internal",
    "zx",
    "zxcrypt:zxcrypt-dev",
    "zxcrypt:zxcrypt-fdio",
    "zxio",
    "zxs",
    "zxtest",
  ]
}
