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

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_allocator = get_path_info("pw_allocator", "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_armv7m = get_path_info("pw_boot_armv7m", "abspath")
  dir_pw_build = get_path_info("pw_build", "abspath")
  dir_pw_bytes = get_path_info("pw_bytes", "abspath")
  dir_pw_checksum = get_path_info("pw_checksum", "abspath")
  dir_pw_cli = get_path_info("pw_cli", "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_armv7m =
      get_path_info("pw_cpu_exception_armv7m", "abspath")
  dir_pw_docgen = get_path_info("pw_docgen", "abspath")
  dir_pw_doctor = get_path_info("pw_doctor", "abspath")
  dir_pw_hex_dump = get_path_info("pw_hex_dump", "abspath")
  dir_pw_env_setup = get_path_info("pw_env_setup", "abspath")
  dir_pw_hdlc_lite = get_path_info("pw_hdlc_lite", "abspath")
  dir_pw_kvs = get_path_info("pw_kvs", "abspath")
  dir_pw_log = get_path_info("pw_log", "abspath")
  dir_pw_log_basic = get_path_info("pw_log_basic", "abspath")
  dir_pw_log_multisink = get_path_info("pw_log_multisink", "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_fuzzer = get_path_info("pw_fuzzer", "abspath")
  dir_pw_package = get_path_info("pw_package", "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_rpc = get_path_info("pw_rpc", "abspath")
  dir_pw_span = get_path_info("pw_span", "abspath")
  dir_pw_status = get_path_info("pw_status", "abspath")
  dir_pw_stream = get_path_info("pw_stream", "abspath")
  dir_pw_string = get_path_info("pw_string", "abspath")
  dir_pw_sync = get_path_info("pw_sync", "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_third_party = get_path_info("third_party", "abspath")
  dir_pw_tokenizer = get_path_info("pw_tokenizer", "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_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")
}
