# 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/components.gni")
import("//build/test.gni")
import("//build/zircon/zx_library.gni")

#  ________  _________  ________  ________
# |\   ____\|\___   ___\\   __  \|\   __  \
# \ \  \___|\|___ \  \_\ \  \|\  \ \  \|\  \
#  \ \_____  \   \ \  \ \ \  \\\  \ \   ____\
#   \|____|\  \   \ \  \ \ \  \\\  \ \  \___|
#     ____\_\  \   \ \__\ \ \_______\ \__\
#    |\_________\   \|__|  \|_______|\|__|
#    \|_________|
#
# This is an allowlist of targets that use the deprecated `syslog` C++ library.
# C++ libraries should now be using `//sdk/lib/syslog/cpp` instead.
#
# Developers are encouraged to migrate to use the `diagnostics_log` and `tracing` libraries
# instead which bring structured logging support.
#
# The policy at this time is:
# 1. Pre-existing use of syslog in fuchsia.git are allowlisted.
# 2. Use of syslog in new libraries and binaries is strongly discouraged and only allowed
#    under special circumstances under which the new library isn't covering the needs.
#
# To add items to the allowlist, please send a change to one of the OWNERS of
# this file to add an element to the visibility list below.
# Please allowlist entire directories rather than individual targets as it
# requires less allowlist churn over time.
#
# To regenerate:
# fx gn refs $(fx get-build-dir) /zircon/system/ulib/syslog:syslog //zircon/system/ulib/syslog | sed 's|\(.*:\).*|"\1*",|' | sort | uniq
syslog_visibility_allowlist = [
  "//sdk/lib/syslog/cpp:*",
  "//sdk/lib/syslog/duplicate_header_test:*",
  "//sdk/lib/ui/scenic/cpp:*",
  "//src/camera/drivers/controller:*",
  "//src/camera/drivers/hw_accel/gdc:*",
  "//src/camera/drivers/hw_accel/task:*",
  "//src/camera/drivers/test_utils:*",
  "//src/connectivity/lowpan/drivers/lowpan-spinel-driver/tests/lib:*",
  "//src/connectivity/lowpan/drivers/lowpan-spinel-driver/tests/test-code:*",
  "//src/connectivity/lowpan/drivers/lowpan-spinel-driver/tests/test-components:*",
  "//src/connectivity/network/drivers/network-device/device:*",
  "//src/connectivity/network/drivers/network-device/mac:*",
  "//src/connectivity/network/tun/network-tun:*",
  "//src/connectivity/openthread/tests/lib:*",
  "//src/connectivity/openthread/tests/test-code:*",
  "//src/connectivity/openthread/tests/test-components:*",
  "//src/connectivity/telephony/tests/component-integration/fake-at-driver-test:*",
  "//src/connectivity/telephony/tests/component-integration/fake-at-query:*",
  "//src/connectivity/telephony/tests/component-integration/fake-qmi-query:*",
  "//src/connectivity/telephony/tests/component-integration/snooper:*",
  "//src/devices/lib/log:*",
  "//src/devices/tests/fx-logger:*",
  "//src/diagnostics/archivist:*",
  "//src/diagnostics/archivist/tests/logs/cpp:*",
  "//src/lib/syslog/rust:*",
  "//src/media/lib/codec_impl:*",
  "//src/storage/extractor/cpp:*",
  "//src/storage/fuchsia-fatfs:*",
  "//src/storage/lib/watchdog:*",
  "//src/sys/appmgr:*",
  "//src/sys/tools/log:*",
  "//src/virtualization/bin/vmm/device:*",
  "//zircon/system/ulib/devmgr-integration-test:*",
  "//zircon/system/ulib/profile:*",
]

# At this time we are not enforcing restrictions on the below.
syslog_visibility_allowlist += [
  "//third_party/*",
  "//vendor/*",
]

# Syslog code can depend on syslog.
syslog_visibility_allowlist += [ "//zircon/system/ulib/syslog:*" ]

syslog_static_visibility_allowlist = [
  "//src/devices/tests/fx-logger:*",
  "//src/graphics/lib/magma/src/magma_util/platform/zircon:*",
]

syslog_static_visibility_allowlist += [
  "//third_party/*",
  "//vendor/*",
]

# Syslog code can depend on syslog-static.
syslog_static_visibility_allowlist += [ "//zircon/system/ulib/syslog:*" ]

syslog_headers_visibility_allowlist = [
  "//src/devices/lib/iommu:*",
  "//src/lib/ddk:*",
]

syslog_headers_visibility_allowlist += [
  "//third_party/*",
  "//vendor/*",
]

# Syslog code can depend on syslog-headers.
syslog_headers_visibility_allowlist += [ "//zircon/system/ulib/syslog:*" ]

syslog_headers = [
  "lib/syslog/global.h",
  "lib/syslog/logger.h",
  "lib/syslog/wire_format.h",
]

zx_library("syslog") {
  sdk = "shared"
  sdk_publishable = true
  sdk_headers = syslog_headers

  sources = [
    "fx_logger.cc",
    "global.cc",
    "legacy.cc",
    "logger.cc",
  ]
  deps = [
    ":helpers",
    "//sdk/fidl/fuchsia.logger:fuchsia.logger_llcpp",
    "//sdk/lib/syslog:client_includes",
    "//sdk/lib/syslog/cpp:cpp-macros",
    "//sdk/lib/syslog/structured_backend",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/service:service-llcpp",
    "//zircon/system/ulib/zx",
  ]
  runtime_deps = [
    "//sdk/lib/fdio:fdio_sdk",
    "//zircon/system/ulib/trace-engine:trace-engine_sdk",
  ]

  visibility = syslog_visibility_allowlist
}

# This static library should have no shared library dependencies,
# except libzircon, so it may be used from magma client driver libraries
# such as the Vulkan ICD.
# This library cannot connect to the logging service, so a console_fd
# or log_sink_socket must be provided at initialization.
zx_library("syslog-static") {
  sdk = "static"
  sdk_headers = syslog_headers
  sources = [
    "fx_logger.cc",
    "global.cc",
    "logger.cc",
  ]
  deps = [
    ":helpers",
    "//sdk/lib/syslog:client_includes",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/zx",
  ]
  defines = [ "SYSLOG_STATIC" ]

  visibility = syslog_static_visibility_allowlist
}

zx_library("syslog-headers") {
  sdk = "static"
  sdk_publishable = true
  sdk_headers = syslog_headers
  visibility = syslog_headers_visibility_allowlist
}

source_set("helpers") {
  sources = [
    "helpers.cc",
    "helpers.h",
  ]
  deps = [ ":syslog-headers" ]
}

_test_sources = [
  "syslog_socket_tests.cc",
  "syslog_tests.cc",
]

_test_deps = [
  ":helpers",
  "//sdk/fidl/fuchsia.logger:fuchsia.logger_llcpp",
  "//zircon/system/ulib/fbl",
  "//zircon/system/ulib/zx",
  "//zircon/system/ulib/zxtest",
]

test("syslog-test") {
  sources = _test_sources
  deps = _test_deps + [ ":syslog" ]
}

test("syslog-static-test") {
  sources = _test_sources
  deps = _test_deps + [ ":syslog-static" ]
  defines = [ "SYSLOG_STATIC" ]
}

fuchsia_unittest_component("c-syslog-test") {
  deps = [ ":syslog-test" ]
}

fuchsia_unittest_component("c-syslog-static-test") {
  deps = [ ":syslog-static-test" ]
}

fuchsia_test_package("c-syslog-tests") {
  test_components = [
    ":c-syslog-test",
    ":c-syslog-static-test",
  ]
}

group("tests") {
  testonly = true
  deps = [ ":c-syslog-tests" ]
}
