# 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.

declare_args() {
  # Location of the Pigweed repository.
  dir_pigweed = "//third_party/pigweed/"
  dir_pigweed_experimental = "//"
}

# Upstream Pigweed modules.
import("$dir_pigweed/modules.gni")

# Experimental modules.
declare_args() {
  dir_app_common =
      get_path_info("$dir_pigweed_experimental/applications/app_common",
                    "abspath")
  dir_pw_async_bench =
      get_path_info("$dir_pigweed_experimental/pw_async_bench", "abspath")
  dir_pw_board_led =
      get_path_info("$dir_pigweed_experimental/pw_board_led", "abspath")
  dir_pw_board_led_arduino =
      get_path_info("$dir_pigweed_experimental/pw_board_led_arduino", "abspath")
  dir_pw_board_led_host =
      get_path_info("$dir_pigweed_experimental/pw_board_led_host", "abspath")
  dir_pw_board_led_mimxrt595_evk =
      get_path_info("$dir_pigweed_experimental/pw_board_led_mimxrt595_evk",
                    "abspath")
  dir_pw_board_led_pico =
      get_path_info("$dir_pigweed_experimental/pw_board_led_pico", "abspath")
  dir_pw_board_led_stm32f429i_disc1 =
      get_path_info("$dir_pigweed_experimental/pw_board_led_stm32f429i_disc1",
                    "abspath")
  dir_pw_board_led_stm32f769i_disc0 =
      get_path_info("$dir_pigweed_experimental/pw_board_led_stm32f769i_disc0",
                    "abspath")
  dir_pw_board_led_stm32cube =
      get_path_info("$dir_pigweed_experimental/pw_board_led_stm32cube",
                    "abspath")
  dir_pw_color =
      get_path_info("$dir_pigweed_experimental/pw_graphics/pw_color", "abspath")
  dir_pw_math =
      get_path_info("$dir_pigweed_experimental/pw_graphics/pw_math", "abspath")
  dir_pw_digital_io_arduino =
      get_path_info("$dir_pigweed_experimental/pw_digital_io_arduino",
                    "abspath")
  dir_pw_digital_io_pico =
      get_path_info("$dir_pigweed_experimental/pw_digital_io_pico", "abspath")
  dir_pw_digital_io_stm32cube =
      get_path_info("$dir_pigweed_experimental/pw_digital_io_stm32cube",
                    "abspath")
  dir_pw_display =
      get_path_info("$dir_pigweed_experimental/pw_graphics/pw_display",
                    "abspath")
  dir_pw_display_driver =
      get_path_info("$dir_pigweed_experimental/pw_display_driver", "abspath")
  dir_pw_display_driver_ili9341 =
      get_path_info("$dir_pigweed_experimental/pw_display_driver_ili9341",
                    "abspath")
  dir_pw_display_driver_imgui =
      get_path_info("$dir_pigweed_experimental/pw_display_driver_imgui",
                    "abspath")
  dir_pw_display_driver_mipi_dsi =
      get_path_info("$dir_pigweed_experimental/pw_display_driver_mipi",
                    "abspath")
  dir_pw_display_driver_null =
      get_path_info("$dir_pigweed_experimental/pw_display_driver_null",
                    "abspath")
  dir_pw_display_driver_st7735 =
      get_path_info("$dir_pigweed_experimental/pw_display_driver_st7735",
                    "abspath")
  dir_pw_display_driver_st7789 =
      get_path_info("$dir_pigweed_experimental/pw_display_driver_st7789",
                    "abspath")
  dir_pw_display_imgui =
      get_path_info("$dir_pigweed_experimental/pw_graphics/pw_display_imgui",
                    "abspath")
  dir_pw_draw =
      get_path_info("$dir_pigweed_experimental/pw_graphics/pw_draw", "abspath")
  dir_pw_framebuffer =
      get_path_info("$dir_pigweed_experimental/pw_graphics/pw_framebuffer",
                    "abspath")
  dir_pw_framebuffer_pool =
      get_path_info("$dir_pigweed_experimental/pw_graphics/pw_framebuffer_pool",
                    "abspath")
  dir_pw_framebuffer_pool_mcuxpresso = get_path_info(
          "$dir_pigweed_experimental/pw_graphics/pw_framebuffer_pool_mcuxpresso",
          "abspath")
  dir_pw_mipi_dsi =
      get_path_info("$dir_pigweed_experimental/pw_mipi_dsi", "abspath")
  dir_pw_mipi_dsi_mcuxpresso =
      get_path_info("$dir_pigweed_experimental/pw_mipi_dsi_mcuxpresso",
                    "abspath")
  dir_pw_spi_arduino =
      get_path_info("$dir_pigweed_experimental/pw_spi_arduino", "abspath")
  dir_pw_spi_pico =
      get_path_info("$dir_pigweed_experimental/pw_spi_pico", "abspath")
  dir_pw_spi_stm32cube =
      get_path_info("$dir_pigweed_experimental/pw_spi_stm32cube", "abspath")
  dir_pw_spin_delay =
      get_path_info("$dir_pigweed_experimental/pw_spin_delay", "abspath")
  dir_pw_spin_delay_arduino =
      get_path_info("$dir_pigweed_experimental/pw_spin_delay_arduino",
                    "abspath")
  dir_pw_spin_delay_host =
      get_path_info("$dir_pigweed_experimental/pw_spin_delay_host", "abspath")
  dir_pw_spin_delay_mcuxpresso =
      get_path_info("$dir_pigweed_experimental/pw_spin_delay_mcuxpresso",
                    "abspath")
  dir_pw_spin_delay_pico =
      get_path_info("$dir_pigweed_experimental/pw_spin_delay_pico", "abspath")
  dir_pw_spin_delay_stm32f429i_disc1 =
      get_path_info("$dir_pigweed_experimental/pw_spin_delay_stm32f429i_disc1",
                    "abspath")
  dir_pw_spin_delay_stm32cube =
      get_path_info("$dir_pigweed_experimental/pw_spin_delay_stm32cube",
                    "abspath")
  dir_pw_spin_delay_stm32f769i_disc0 =
      get_path_info("$dir_pigweed_experimental/pw_spin_delay_stm32f769i_disc0",
                    "abspath")
  dir_pw_sys_io_baremetal_stm32f769 =
      get_path_info("$dir_pigweed_experimental/pw_sys_io_baremetal_stm32f769",
                    "abspath")
  dir_pw_touchscreen =
      get_path_info("$dir_pigweed_experimental/pw_graphics/pw_touchscreen",
                    "abspath")
  dir_pw_touchscreen_null =
      get_path_info("$dir_pigweed_experimental/pw_graphics/pw_touchscreen_null",
                    "abspath")
  dir_pw_touchscreen_teensy_stmpe610 = get_path_info(
          "$dir_pigweed_experimental/pw_graphics/pw_touchscreen_teensy_stmpe610",
          "abspath")
  dir_pw_touchscreen_teensy_xpt2046 =
      get_path_info(
          "$dir_pigweed_experimental/pw_graphics/pw_touchscreen_teensy_xpt2046",
          "abspath")
  dir_pw_pixel_pusher =
      get_path_info("$dir_pigweed_experimental/pw_pixel_pusher", "abspath")
}
