# 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_deps = [
    "$dir_pw_digital_io",
    "$dir_pw_result",
    "$dir_pw_status",
  ]
  sources = [ "digital_io.cc" ]
  remove_configs = [ "$dir_pw_build:strict_warnings" ]
}

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

pw_doc_group("docs") {
  sources = [ "docs.rst" ]
}

# 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 = [ "mock_vfs.cc" ]
}

pw_test("digital_io_test") {
  enable_if = current_os == "linux"
  sources = [ "digital_io_test.cc" ]
  deps = [
    ":mock_vfs",
    ":pw_digital_io_linux",
    "$dir_pw_log",
  ]
  ldflags = [
    "-Wl,--wrap=close",
    "-Wl,--wrap=ioctl",
  ]
}

pw_test_group("tests") {
  tests = [ ":digital_io_test" ]
}
