# 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.

load(
    "//pw_build:pigweed.bzl",
    "pw_cc_test",
)

package(default_visibility = ["//visibility:public"])

licenses(["notice"])

cc_library(
    name = "pw_digital_io_linux",
    srcs = [
        "digital_io.cc",
        "log_errno.h",
        "notifier.cc",
    ],
    hdrs = [
        "public/pw_digital_io_linux/digital_io.h",
        "public/pw_digital_io_linux/internal/owned_fd.h",
        "public/pw_digital_io_linux/notifier.h",
    ],
    includes = ["public"],
    target_compatible_with = ["@platforms//os:linux"],
    deps = [
        "//pw_digital_io",
        "//pw_log",
        "//pw_result",
        "//pw_status",
        "//pw_sync:lock_annotations",
        "//pw_sync:mutex",
        "//pw_thread:thread",
    ],
)

cc_binary(
    name = "pw_digital_io_linux_cli",
    srcs = [
        "digital_io_cli.cc",
    ],
    deps = [
        ":pw_digital_io_linux",
        "//pw_build:default_link_extra_lib",
        "//pw_log",
    ],
)

# TODO(b/328262654): Move this to a more appropriate module.
cc_library(
    name = "mock_vfs",
    srcs = [
        "log_errno.h",
        "mock_vfs.cc",
    ],
    hdrs = ["mock_vfs.h"],
    target_compatible_with = ["@platforms//os:linux"],
    deps = [
        "//pw_assert",
        "//pw_log",
    ],
)

pw_cc_test(
    name = "digital_io_test",
    srcs = [
        "digital_io_test.cc",
        "test_utils.h",
    ],
    linkopts = [
        "-Wl,--wrap=close",
        "-Wl,--wrap=ioctl",
        "-Wl,--wrap=read",
    ],
    deps = [
        ":mock_vfs",
        ":pw_digital_io_linux",
        "//pw_assert",
        "//pw_log",
        "//pw_sync:mutex",
        "//pw_sync:timed_thread_notification",
        "//pw_thread:thread",
        "//pw_thread_stl:thread",
    ],
)

pw_cc_test(
    name = "notifier_test",
    srcs = [
        "log_errno.h",
        "notifier_test.cc",
        "test_utils.h",
    ],
    target_compatible_with = ["@platforms//os:linux"],
    deps = [
        ":pw_digital_io_linux",
        "//pw_assert",
        "//pw_log",
        "//pw_sync:counting_semaphore",
        "//pw_thread:thread",
        "//pw_thread_stl:thread",
    ],
)
