# 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/pi_pico.gni")
import("//build_overrides/pigweed.gni")

import("$dir_pw_arduino_build/arduino.gni")
import("$dir_pw_build/python.gni")
import("$dir_pw_build/python_dist.gni")
import("$dir_pw_build/python_venv.gni")
import("$dir_pw_third_party/mcuxpresso/mcuxpresso.gni")
import("$dir_pw_third_party/stm32cube/stm32cube.gni")
import("$dir_pw_tokenizer/database.gni")
import("$dir_pw_unit_test/test.gni")

# Lists all the targets build by default with e.g. `ninja -C out`.
group("default") {
  deps = [
    ":applications",
    ":arduino",
    ":host",
    ":host_opt",
    ":mimxrt595_evk",
    ":pico",
    ":pw_experimental_python.lint",
    ":pw_experimental_python.tests",
    ":python.install",
  ]
}

# Group all targets that run on host only, e.g. tests, utils.
group("host") {
  deps = [
    ":host_tests(//targets/host:host_debug_tests)",
    "$dir_pw_color:tests.run(//targets/host:host_debug_tests)",
    "$dir_pw_data_link:tests.run(//targets/host:host_debug_tests)",
    "$dir_pw_display:tests.run(//targets/host:host_debug_tests)",
    "$dir_pw_draw:tests.run(//targets/host:host_debug_tests)",
    "$dir_pw_framebuffer:tests.run(//targets/host:host_debug_tests)",

    # See //applications/pw_lcd_display_host_imgui/README.md for instructions.
    "//applications/32blit_demo:all(//targets/host:host_debug)",
    "//applications/terminal_display:all(//targets/host:host_debug)",
  ]
}

# Group targets which need to do an optimized host build (e.g. for benchmarking).
group("host_opt") {
  deps = [
    "$dir_pw_async_bench:size_benchmarks(//targets/host:host_size_optimized)",
  ]
}

# Arduino specific targets.
group("arduino") {
  if (pw_arduino_build_CORE_PATH != "") {
    deps = [ ":arduino_tests(//targets/arduino:arduino_debug_tests)" ]

    if (pw_arduino_build_CORE_NAME == "teensy") {
      deps += [
        # TODO(tonymd): pw_framebuffer_pool depends on
        # "pw_sync/counting_semaphore.h". Teensy does not have a implementation
        # for that yet.
        # See //pw_lcd_display_teensy_ili9341/README.md for instructions.
        # "//applications/terminal_display:all(//targets/arduino:arduino_debug)",
      ]
    }
  }
}

# This gn arg must be set to build for the rp2040
# PICO_SRC_DIR = "$HOME/pico-sdk"
group("pico") {
  if (PICO_SRC_DIR != "") {
    deps = [
      ":pico_tests(//targets/rp2040)",
      "//applications/32blit_demo:all(//targets/rp2040)",
      "//applications/terminal_display:all(//targets/rp2040)",
    ]
  }
}

group("mimxrt595_evk") {
  if (pw_third_party_mcuxpresso_SDK != "") {
    deps = [ "//applications/terminal_display:all(//targets/mimxrt595_evk:mimxrt595_evk_debug)" ]
  }
}

# stm32f429i_disc1 specific targets.
group("stm32f429i_disc1") {
  _default_toolchain = "//targets/stm32f429i_disc1:stm32f429i_disc1_debug"
  _testing_toolchain = "${_default_toolchain}_tests"
  deps = [
    # ":app(${_default_toolchain})",
    ":tests(${_testing_toolchain})",
  ]
}

# stm32f769i_disc0 specific targets.
group("stm32f769i_disc0") {
  _default_toolchain = "//targets/stm32f769i_disc0:stm32f769i_disc0_debug"
  _testing_toolchain = "${_default_toolchain}_tests"
  deps = [
    # ":app(${_default_toolchain})",
    ":tests(${_testing_toolchain})",
  ]
}

# This group is built during bootstrap to setup the interactive Python
# environment.
pw_python_group("python") {
  python_deps = [
    # Generate and pip install _all_python_packages
    ":pip_install_experimental_tools",
  ]
}

# In-tree Python packages
_pw_experimental_python_packages = [
  "//applications/tls_example/trust_store/py",
  "//tools:tools",
  "//pw_graphics/py",
]

# Pigweed Python packages to include
_pigweed_python_packages = [
  "$dir_pw_env_setup:core_pigweed_python_packages",
  "$dir_pigweed/targets/lm3s6965evb_qemu/py",
  "$dir_pigweed/targets/stm32f429i_disc1/py",
  "//targets/stm32f769i_disc0/py",
]

_all_python_packages =
    _pw_experimental_python_packages + _pigweed_python_packages

pw_python_group("pw_experimental_python") {
  python_deps = _pw_experimental_python_packages
}

# The default venv for Python actions in GN
# Set this gn arg in a declare_args block in this file 'BUILD.gn' or in '.gn' to
# use this venv.
#
#   pw_build_PYTHON_BUILD_VENV = "//:pw_experimental_build_venv"
#
pw_python_venv("pw_experimental_build_venv") {
  path = "$root_build_dir/python-venv"
  constraints = pw_build_PIP_CONSTRAINTS
  requirements = pw_build_PIP_REQUIREMENTS

  # Ensure all third party Python dependencies are installed into this venv.
  # This works by checking the setup.cfg files for all packages listed here and
  # installing the packages listed in the [options].install_requires field.
  source_packages = _all_python_packages
}

# This template collects all python packages and their dependencies into a
# single super Python package for installation into the bootstrapped virtual
# environment.
pw_create_python_source_tree(
    "generate_experimental_tools_python_distribution") {
  packages = _all_python_packages
  generate_setup_cfg = {
    name = "pw-experimental-tools"
    version = "0.0.1"
    append_date_to_version = true
    include_default_pyproject_file = true
  }
}

# Install the pw-experimental-tools super Python package into the bootstrapped
# Python venv.
pw_internal_pip_install("pip_install_experimental_tools") {
  packages = [ ":generate_experimental_tools_python_distribution" ]
}

group("applications") {
  deps = []

  # Teensy 3.0/4.0 applications steps.
  if (pw_arduino_build_CORE_PATH != "") {
    deps += [
      ":applications_tests(//targets/arduino:arduino_debug_tests)",
      "//applications/blinky:blinky(//targets/arduino:arduino_debug)",
      "//applications/rpc:all(//targets/arduino:arduino_debug)",
      "//applications/strings:all(//targets/arduino:arduino_debug)",
    ]

    # TODO(b/258827934): Fix size report and reenable.
    if (pw_arduino_build_CORE_NAME == "teensy-<disabled>") {
      deps += [
        "//applications/tls_example:boringssl_teensy_ethernet(//targets/arduino:arduino_debug)",
        "//applications/tls_example:mbedtls_teensy_ethernet(//targets/arduino:arduino_debug)",
        "//applications/tls_example:picotls_teensy_ethernet(//targets/arduino:arduino_debug)",
      ]
    }
  }

  # Raspberry Pi Pico
  if (PICO_SRC_DIR != "") {
    deps += [
      ":applications_tests(//targets/rp2040)",
      "//applications/blinky:blinky(//targets/rp2040)",
      "//applications/rpc:all(//targets/rp2040)",
      "//applications/strings:all(//targets/rp2040)",
    ]
  }

  # MIMXRT595-EVK application steps.
  if (pw_third_party_mcuxpresso_SDK != "") {
    deps += [
      ":applications_tests(//targets/mimxrt595_evk:mimxrt595_evk_debug)",
      "//applications/blinky:blinky(//targets/mimxrt595_evk:mimxrt595_evk_debug)",
      "//applications/rpc:all(//targets/mimxrt595_evk:mimxrt595_evk_debug)",
      "//applications/strings:all(//targets/mimxrt595_evk:mimxrt595_evk_debug)",
      "//applications/terminal_display:all(//targets/mimxrt595_evk:mimxrt595_evk_debug)",
    ]
  }

  if (dir_pw_third_party_stm32cube_f4 != "") {
    # STMicroelectronics STM32F429I-DISC1 applications steps.
    deps += [
      ":applications_tests(//targets/stm32f429i_disc1:stm32f429i_disc1_debug_tests)",
      "//applications/blinky:blinky(//targets/stm32f429i_disc1:stm32f429i_disc1_debug)",
      "//applications/rpc:all(//targets/stm32f429i_disc1:stm32f429i_disc1_debug)",
      "//applications/strings:all(//targets/stm32f429i_disc1:stm32f429i_disc1_debug)",
    ]

    # STMicroelectronics STM32F429I-DISC1 STM32Cube applications steps.
    deps += [
      ":applications_tests(//targets/stm32f429i_disc1_stm32cube:stm32f429i_disc1_stm32cube_debug)",
      "//applications/32blit_demo:all(//targets/stm32f429i_disc1_stm32cube:stm32f429i_disc1_stm32cube_debug)",
      "//applications/blinky:blinky(//targets/stm32f429i_disc1_stm32cube:stm32f429i_disc1_stm32cube_debug)",
      "//applications/terminal_display:all(//targets/stm32f429i_disc1_stm32cube:stm32f429i_disc1_stm32cube_debug)",
    ]

    # STMicroelectronics STM32F439ZI-Nucleo applications steps.
    deps += [
      ":applications_tests(//targets/stm32f439zi_nucleo:stm32f439zi_nucleo_debug)",
      "//applications/blinky:blinky(//targets/stm32f439zi_nucleo:stm32f439zi_nucleo_debug)",
    ]
  }

  if (dir_pw_third_party_stm32cube_f2 != "") {
    deps += [ "//applications/blinky:blinky(//targets/stm32f207zg-nucleo:stm32f207zg_nucleo_debug)" ]
  }

  if (dir_pw_third_party_stm32cube_f7 != "") {
    # STMicroelectronics STM32F769I-DISC0 applications steps.
    deps += [
      ":applications_tests(//targets/stm32f769i_disc0:stm32f769i_disc0_debug_tests)",
      "//applications/blinky:blinky(//targets/stm32f769i_disc0:stm32f769i_disc0_debug)",
      "//applications/rpc:all(//targets/stm32f769i_disc0:stm32f769i_disc0_debug)",
      "//applications/strings:all(//targets/stm32f769i_disc0:stm32f769i_disc0_debug)",
    ]

    # STMicroelectronics STM32F769I-DISC0 STM32Cube applications steps.
    deps += [
      ":applications_tests(//targets/stm32f769i_disc0_stm32cube:stm32f769i_disc0_stm32cube_debug)",
      "//applications/blinky:blinky(//targets/stm32f769i_disc0_stm32cube:stm32f769i_disc0_stm32cube_debug)",
    ]
  }

  if (dir_pw_third_party_stm32cube_l5 != "") {
    deps += [ "//applications/blinky:blinky(//targets/stm32l552ze-nucleo:stm32l552ze_nucleo_debug)" ]
  }

  if (dir_pw_third_party_stm32cube_h7 != "") {
    deps += [ "//applications/blinky:blinky(//targets/stm32h753zi-nucleo:stm32h753zi_nucleo_debug)" ]
  }

  # Host applications steps.
  deps += [
    ":applications_tests(//targets/host:host_debug_tests)",
    "$dir_pw_data_link:sample_app(//targets/host:host_debug)",
    "//applications/blinky:blinky(//targets/host:host_debug)",
    "//applications/strings:all(//targets/host:host_debug)",
  ]
}

# Group the different modules tests together.
pw_test_group("tests") {
  group_deps = [
    "//applications/strings:tests",
    "//applications/terminal_display:tests",
  ]

  if (pw_arduino_build_CORE_NAME == "teensy") {
    group_deps += []
  }
}

# Test groups for each platform that will build and optionally run the tests.
foreach(test_group,
        [
          "arduino",
          "pico",
          "mimxrt595_evk",
          "host",
          "applications",
        ]) {
  group("${test_group}_tests") {
    deps = []
    if (pw_unit_test_AUTOMATIC_RUNNER == "" || test_group != "host") {
      # Without a test runner defined, build the tests but don't run them.
      deps += [ ":tests" ]
    } else {
      # With a test runner, build and run tests.
      deps += [ ":tests.run" ]
    }
  }
}
