# Copyright 2023 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("@rules_cc//cc:cc_binary.bzl", "cc_binary")
load("@rules_cc//cc:cc_library.bzl", "cc_library")
load("@sphinxdocs//sphinxdocs:sphinx_docs_library.bzl", "sphinx_docs_library")
load("//pw_build:compatibility.bzl", "incompatible_with_mcu")
load("//pw_unit_test:pw_cc_test.bzl", "pw_cc_test")

package(
    default_visibility = ["//visibility:public"],
    features = ["-layering_check"],
)

licenses(["notice"])

cc_library(
    name = "initiator",
    srcs = [
        "initiator.cc",
    ],
    hdrs = [
        "public/pw_i2c_linux/initiator.h",
    ],
    implementation_deps = ["//pw_assert:check"],
    strip_include_prefix = "public",
    target_compatible_with = ["@platforms//os:linux"],
    deps = [
        "//pw_bytes",
        "//pw_chrono:system_clock",
        "//pw_i2c:address",
        "//pw_i2c:initiator",
        "//pw_log",
        "//pw_status",
        "//pw_sync:lock_annotations",
        "//pw_sync:timed_mutex",
    ],
)

pw_cc_test(
    name = "initiator_test",
    srcs = [
        "initiator_test.cc",
    ],
    deps = [
        ":initiator",
        "//pw_i2c:initiator",
    ],
)

filegroup(
    name = "doxygen",
    srcs = [
        "public/pw_i2c_linux/initiator.h",
    ],
)

sphinx_docs_library(
    name = "docs",
    srcs = [
        "docs.rst",
    ],
    prefix = "pw_i2c_linux/",
    target_compatible_with = incompatible_with_mcu(),
)

cc_binary(
    name = "pw_i2c_linux_cli",
    srcs = [
        "cli.cc",
    ],
    target_compatible_with = [
        "@platforms//os:linux",
    ],
    deps = [
        ":initiator",
        "//pw_assert:check",
        "//pw_build:default_link_extra_lib",
        "//pw_log",
        "//pw_preprocessor",
        "//pw_result",
    ],
)
