# See Project CHIP LICENSE file for licensing information.

import("//build_overrides/build.gni")
import("//build_overrides/chip.gni")
import("//build_overrides/pigweed.gni")

import("${chip_root}/src/platform/device.gni")

source_set("headers") {
  public = [ "LogV.h" ]
}

if (current_os == "android") {
  static_library("android") {
    sources = [ "impl/android/Logging.cpp" ]
    deps = [
      ":headers",
      "${chip_root}/src/lib/core:chip_config_header",
      "${chip_root}/src/lib/support:attributes",
      "${chip_root}/src/lib/support:logging_constants",
      "${chip_root}/src/platform:platform_buildconfig",
    ]

    libs = [ "log" ]
  }
}

# We need to reference the output file of ":stdio" at build time,
# but get_target_outputs() does not work for binary targets. As a
# workaround, define a reasonable path and make the target use it.
stdio_archive = "$root_out_dir/liblogging-stdio.a"

static_library("stdio") {
  if (chip_device_platform == "darwin") {
    sources = [ "impl/stdio/darwin/Logging.cpp" ]
  } else {
    sources = [ "impl/stdio/Logging.cpp" ]
  }

  deps = [
    ":headers",
    "${chip_root}/src/lib/core:chip_config_header",
    "${chip_root}/src/lib/support:attributes",
    "${chip_root}/src/lib/support:logging_constants",
    "${chip_root}/src/platform:platform_buildconfig",
  ]

  # Ensure we end up with the expected output file name
  output_dir = get_path_info(stdio_archive, "dir")
  output_name = get_path_info(stdio_archive, "name")
  output_extension = get_path_info(stdio_archive, "extension")
  output_prefix_override = true
}

# Depending on this target (via public_deps) pulls in the stdio
# logger and ensures it takes precendce over the platform backend.
group("force_stdio") {
  deps = [ ":stdio" ]
  public_configs = [ ":force_stdio_config" ]
}

config("force_stdio_config") {
  # Ensure the linker sees the stdio implementation first. This
  # works because ldflags come before inputs on the command line.
  ldflags = [ rebase_path(stdio_archive, root_build_dir) ]
}
