# Copyright 2024 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.

import("//build_overrides/pigweed.gni")
import("$dir_pw_build/target_types.gni")
import("$dir_pw_docgen/docs.gni")
import("$dir_pw_unit_test/test.gni")

config("public_includes") {
  include_dirs = [ "public" ]
}

pw_source_set("pw_digital_io_linux") {
  public_configs = [ ":public_includes" ]
  public = [
    "public/pw_digital_io_linux/digital_io.h",
    "public/pw_digital_io_linux/internal/owned_fd.h",
    "public/pw_digital_io_linux/notifier.h",
  ]
  public_deps = [
    "$dir_pw_digital_io",
    "$dir_pw_result",
    "$dir_pw_status",
    "$dir_pw_sync:lock_annotations",
    "$dir_pw_sync:mutex",
    "$dir_pw_thread:thread",
  ]
  deps = [ "$dir_pw_log" ]
  sources = [
    "digital_io.cc",
    "log_errno.h",
    "notifier.cc",
  ]
}

pw_executable("pw_digital_io_linux_cli") {
  sources = [ "digital_io_cli.cc" ]
  deps = [
    ":pw_digital_io_linux",
    "$dir_pw_log",
  ]
}

# TODO(b/328262654): Move this to a more appropriate module.
pw_source_set("mock_vfs") {
  public_configs = [ ":public_includes" ]
  public = [ "mock_vfs.h" ]
  public_deps = [ "$dir_pw_log" ]
  sources = [
    "log_errno.h",
    "mock_vfs.cc",
  ]
  deps = [ "$dir_pw_assert" ]
}

pw_test("digital_io_test") {
  enable_if = current_os == "linux"
  sources = [
    "digital_io_test.cc",
    "test_utils.h",
  ]
  deps = [
    ":mock_vfs",
    ":pw_digital_io_linux",
    "$dir_pw_assert",
    "$dir_pw_log",
    "$dir_pw_sync:mutex",
    "$dir_pw_sync:timed_thread_notification",
    "$dir_pw_thread:thread",
    "$dir_pw_thread_stl:thread",
  ]
  ldflags = [
    "-Wl,--wrap=close",
    "-Wl,--wrap=ioctl",
    "-Wl,--wrap=read",
  ]
}

pw_test("notifier_test") {
  enable_if = current_os == "linux"
  sources = [
    "log_errno.h",
    "notifier_test.cc",
    "test_utils.h",
  ]
  deps = [
    ":pw_digital_io_linux",
    "$dir_pw_assert",
    "$dir_pw_log",
    "$dir_pw_sync:counting_semaphore",
    "$dir_pw_thread:thread",
    "$dir_pw_thread_stl:thread",
  ]
}

pw_test_group("tests") {
  tests = [
    ":digital_io_test",
    ":notifier_test",
  ]
  group_deps = [ "examples" ]
}

pw_doc_group("docs") {
  inputs = [
    "examples/input.cc",
    "examples/output.cc",
    "examples/interrupt.cc",
  ]
  sources = [ "docs.rst" ]
}
