# Copyright 2021 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() {
  # This file defines a directory variable for each of Pigweed's modules. This
  # allows modules to be moved or swapped out without breaking existing builds.
  # All module variables are prefixed with dir_.
  dir_docker = get_path_info("docker", "abspath")
  dir_pw_analog = get_path_info("pw_analog", "abspath")
  dir_pw_allocator = get_path_info("pw_allocator", "abspath")
  dir_pw_android_toolchain = get_path_info("pw_android_toolchain", "abspath")
  dir_pw_arduino_build = get_path_info("pw_arduino_build", "abspath")
  dir_pw_assert = get_path_info("pw_assert", "abspath")
  dir_pw_assert_basic = get_path_info("pw_assert_basic", "abspath")
  dir_pw_assert_log = get_path_info("pw_assert_log", "abspath")
  dir_pw_base64 = get_path_info("pw_base64", "abspath")
  dir_pw_bloat = get_path_info("pw_bloat", "abspath")
  dir_pw_blob_store = get_path_info("pw_blob_store", "abspath")
  dir_pw_boot = get_path_info("pw_boot", "abspath")
  dir_pw_boot_cortex_m = get_path_info("pw_boot_cortex_m", "abspath")
  dir_pw_build = get_path_info("pw_build", "abspath")
  dir_pw_build_info = get_path_info("pw_build_info", "abspath")
  dir_pw_bytes = get_path_info("pw_bytes", "abspath")
  dir_pw_checksum = get_path_info("pw_checksum", "abspath")
  dir_pw_chrono = get_path_info("pw_chrono", "abspath")
  dir_pw_chrono_embos = get_path_info("pw_chrono_embos", "abspath")
  dir_pw_chrono_freertos = get_path_info("pw_chrono_freertos", "abspath")
  dir_pw_chrono_stl = get_path_info("pw_chrono_stl", "abspath")
  dir_pw_chrono_threadx = get_path_info("pw_chrono_threadx", "abspath")
  dir_pw_cli = get_path_info("pw_cli", "abspath")
  dir_pw_console = get_path_info("pw_console", "abspath")
  dir_pw_containers = get_path_info("pw_containers", "abspath")
  dir_pw_cpu_exception = get_path_info("pw_cpu_exception", "abspath")
  dir_pw_cpu_exception_cortex_m =
      get_path_info("pw_cpu_exception_cortex_m", "abspath")
  dir_pw_crypto = get_path_info("pw_crypto", "abspath")
  dir_pw_docgen = get_path_info("pw_docgen", "abspath")
  dir_pw_doctor = get_path_info("pw_doctor", "abspath")
  dir_pw_env_setup = get_path_info("pw_env_setup", "abspath")
  dir_pw_function = get_path_info("pw_function", "abspath")
  dir_pw_fuzzer = get_path_info("pw_fuzzer", "abspath")
  dir_pw_hex_dump = get_path_info("pw_hex_dump", "abspath")
  dir_pw_hdlc = get_path_info("pw_hdlc", "abspath")
  dir_pw_i2c = get_path_info("pw_i2c", "abspath")
  dir_pw_interrupt = get_path_info("pw_interrupt", "abspath")
  dir_pw_interrupt_cortex_m = get_path_info("pw_interrupt_cortex_m", "abspath")
  dir_pw_kvs = get_path_info("pw_kvs", "abspath")
  dir_pw_libc = get_path_info("pw_libc", "abspath")
  dir_pw_log = get_path_info("pw_log", "abspath")
  dir_pw_log_basic = get_path_info("pw_log_basic", "abspath")
  dir_pw_log_null = get_path_info("pw_log_null", "abspath")
  dir_pw_log_rpc = get_path_info("pw_log_rpc", "abspath")
  dir_pw_log_tokenized = get_path_info("pw_log_tokenized", "abspath")
  dir_pw_malloc = get_path_info("pw_malloc", "abspath")
  dir_pw_malloc_freelist = get_path_info("pw_malloc_freelist", "abspath")
  dir_pw_metric = get_path_info("pw_metric", "abspath")
  dir_pw_minimal_cpp_stdlib = get_path_info("pw_minimal_cpp_stdlib", "abspath")
  dir_pw_module = get_path_info("pw_module", "abspath")
  dir_pw_multisink = get_path_info("pw_multisink", "abspath")
  dir_pw_package = get_path_info("pw_package", "abspath")
  dir_pw_persistent_ram = get_path_info("pw_persistent_ram", "abspath")
  dir_pw_polyfill = get_path_info("pw_polyfill", "abspath")
  dir_pw_preprocessor = get_path_info("pw_preprocessor", "abspath")
  dir_pw_presubmit = get_path_info("pw_presubmit", "abspath")
  dir_pw_protobuf = get_path_info("pw_protobuf", "abspath")
  dir_pw_protobuf_compiler = get_path_info("pw_protobuf_compiler", "abspath")
  dir_pw_random = get_path_info("pw_random", "abspath")
  dir_pw_result = get_path_info("pw_result", "abspath")
  dir_pw_ring_buffer = get_path_info("pw_ring_buffer", "abspath")
  dir_pw_router = get_path_info("pw_router", "abspath")
  dir_pw_rpc = get_path_info("pw_rpc", "abspath")
  dir_pw_snapshot = get_path_info("pw_snapshot", "abspath")
  dir_pw_span = get_path_info("pw_span", "abspath")
  dir_pw_status = get_path_info("pw_status", "abspath")
  dir_pw_stm32cube_build = get_path_info("pw_stm32cube_build", "abspath")
  dir_pw_stream = get_path_info("pw_stream", "abspath")
  dir_pw_string = get_path_info("pw_string", "abspath")
  dir_pw_symbolizer = get_path_info("pw_symbolizer", "abspath")
  dir_pw_sync = get_path_info("pw_sync", "abspath")
  dir_pw_sync_embos = get_path_info("pw_sync_embos", "abspath")
  dir_pw_sync_freertos = get_path_info("pw_sync_freertos", "abspath")
  dir_pw_sync_baremetal = get_path_info("pw_sync_baremetal", "abspath")
  dir_pw_sync_stl = get_path_info("pw_sync_stl", "abspath")
  dir_pw_sync_threadx = get_path_info("pw_sync_threadx", "abspath")
  dir_pw_sys_io = get_path_info("pw_sys_io", "abspath")
  dir_pw_sys_io_baremetal_lm3s6965evb =
      get_path_info("pw_sys_io_baremetal_lm3s6965evb", "abspath")
  dir_pw_sys_io_baremetal_stm32f429 =
      get_path_info("pw_sys_io_baremetal_stm32f429", "abspath")
  dir_pw_sys_io_arduino = get_path_info("pw_sys_io_arduino", "abspath")
  dir_pw_sys_io_stdio = get_path_info("pw_sys_io_stdio", "abspath")
  dir_pw_target_runner = get_path_info("pw_target_runner", "abspath")
  dir_pw_thread = get_path_info("pw_thread", "abspath")
  dir_pw_thread_stl = get_path_info("pw_thread_stl", "abspath")
  dir_pw_thread_embos = get_path_info("pw_thread_embos", "abspath")
  dir_pw_thread_freertos = get_path_info("pw_thread_freertos", "abspath")
  dir_pw_thread_threadx = get_path_info("pw_thread_threadx", "abspath")
  dir_pw_third_party = get_path_info("third_party", "abspath")
  dir_pw_tls_client = get_path_info("pw_tls_client", "abspath")
  dir_pw_tls_client_boringssl =
      get_path_info("pw_tls_client_boringssl", "abspath")
  dir_pw_tls_client_mbedtls = get_path_info("pw_tls_client_mbedtls", "abspath")
  dir_pw_tokenizer = get_path_info("pw_tokenizer", "abspath")
  dir_pw_tool = get_path_info("pw_tool", "abspath")
  dir_pw_toolchain = get_path_info("pw_toolchain", "abspath")
  dir_pw_trace = get_path_info("pw_trace", "abspath")
  dir_pw_trace_tokenized = get_path_info("pw_trace_tokenized", "abspath")
  dir_pw_transfer = get_path_info("pw_transfer", "abspath")
  dir_pw_unit_test = get_path_info("pw_unit_test", "abspath")
  dir_pw_varint = get_path_info("pw_varint", "abspath")
  dir_pw_watch = get_path_info("pw_watch", "abspath")
  dir_pw_web_ui = get_path_info("pw_web_ui", "abspath")
  dir_pw_work_queue = get_path_info("pw_work_queue", "abspath")
}
