# Copyright 2022 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_arduino_build/arduino.gni")
import("$dir_pw_build/target_types.gni")

if (pw_arduino_build_CORE_PATH != "") {
  config("default_config") {
    include_dirs = [ "public" ]
  }

  # Common library arguments to the arduino_builder tool.
  _library_args = [
    "--library-path",
    rebase_path(
        "$pw_arduino_build_CORE_PATH/teensy/hardware/${pw_arduino_build_PACKAGE_NAME}/libraries"),
    "--library-names",

    # Arduino Core Libaries. The c/c++ files for these should only be included
    # once in any given pw_executable.
    "SPI",
  ]

  _library_include_dirs =
      exec_script(arduino_builder_script,
                  arduino_show_command_args + _library_args +
                      [ "--library-include-dirs" ],
                  "list lines")

  config("arduino_spi_config") {
    include_dirs = _library_include_dirs
  }

  _library_c_files = exec_script(
          arduino_builder_script,
          arduino_show_command_args + _library_args + [ "--library-c-files" ],
          "list lines")

  _library_cpp_files = exec_script(
          arduino_builder_script,
          arduino_show_command_args + _library_args + [ "--library-cpp-files" ],
          "list lines")

  pw_source_set("arduino_spi_sources") {
    public_configs = [ ":arduino_spi_config" ]
    deps = [ "$dir_pw_third_party/arduino:arduino_core_sources" ]
    sources = _library_c_files + _library_cpp_files
    include_dirs = _library_include_dirs
    remove_configs = [ "$dir_pw_build:strict_warnings" ]
  }
}

pw_source_set("pw_spi_arduino") {
  public_configs = [ ":default_config" ]
  public = [
    "public/pw_spi_arduino/chip_selector.h",
    "public/pw_spi_arduino/initiator.h",
  ]
  public_deps = [
    ":arduino_spi_sources",
    "$dir_pw_status",
  ]
  deps = [
    "$dir_pw_digital_io",
    "$dir_pw_log",
    "$dir_pw_spi:chip_selector",
    "$dir_pw_spi:initiator",
  ]
  sources = [
    "chip_selector.cc",
    "initiator.cc",
  ]
  remove_configs = [ "$dir_pw_build:strict_warnings" ]
}
