# 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_assert = get_path_info("pw_assert", "abspath")
  dir_pw_assert_basic = get_path_info("pw_assert_basic", "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_i2c = get_path_info("pw_i2c", "abspath")
  dir_pw_i2c_baremetal_stm32f429 =
      get_path_info("pw_i2c_baremetal_stm32f429", "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_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_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_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_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_stdio = get_path_info("pw_sys_io_stdio", "abspath")
  dir_pw_target_runner = get_path_info("pw_target_runner", "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")
}
