# Copyright 2020 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/python.gni")
import("$dir_pw_docgen/docs.gni")

pw_doc_group("docs") {
  inputs = [ "doc_resources/pw_env_setup_output.png" ]
  sources = [ "docs.rst" ]
}

pw_python_group("python") {
  python_deps = [
    # Python packages
    "$dir_pw_allocator/py",
    "$dir_pw_arduino_build/py",
    "$dir_pw_bloat/py",
    "$dir_pw_build/py",
    "$dir_pw_cli/py",
    "$dir_pw_console/py",
    "$dir_pw_cpu_exception_cortex_m/py",
    "$dir_pw_docgen/py",
    "$dir_pw_doctor/py",
    "$dir_pw_env_setup/py",
    "$dir_pw_hdlc/py",
    "$dir_pw_log:protos.python",
    "$dir_pw_log_tokenized/py",
    "$dir_pw_module/py",
    "$dir_pw_package/py",
    "$dir_pw_presubmit/py",
    "$dir_pw_protobuf/py",
    "$dir_pw_protobuf_compiler/py",
    "$dir_pw_rpc/py",
    "$dir_pw_snapshot/py",
    "$dir_pw_status/py",
    "$dir_pw_stm32cube_build/py",
    "$dir_pw_third_party/boringssl/py",
    "$dir_pw_tokenizer/py",
    "$dir_pw_toolchain/py",
    "$dir_pw_trace/py",
    "$dir_pw_trace_tokenized/py",
    "$dir_pw_transfer/py",
    "$dir_pw_unit_test/py",
    "$dir_pw_watch/py",

    # Standalone scripts
    "$dir_pw_hdlc/rpc_example:example_script",
    "$dir_pw_third_party/nanopb:generate_nanopb_proto",

    # Python requirements for CIPD packages that don't have dedicated modules.
    ":renode_requirements",
  ]
}

# Python packages for supporting specific targets.
pw_python_group("target_support_packages") {
  python_deps = [
    "$dir_pigweed/targets/lm3s6965evb_qemu/py",
    "$dir_pigweed/targets/stm32f429i_disc1/py",
  ]
}

pw_python_requirements("renode_requirements") {
  requirements = [
    "psutil",
    "pyyaml",
    "robotframework==3.1",
  ]
}
