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

# Generate a .gni file with a GN arg for each module and lists of modules and
# tests. Then, import the generated .gni file.
#
# To avoid generating it multiple times, the modules list is only generated by
# the default toolchain. The default toolchain runs before any other toolchains,
# so the module list will be created before it is used by other toolchains.

import("pw_build/generated_pigweed_modules_lists.gni")

declare_args() {
  # This is retained for backwards compatibility. Prefer using the pw_external_*
  # variables instead.
  dir_pw_third_party = get_path_info("third_party", "abspath")
}

# When referencing an external dependency, prefer to use these names to prevent
# multiple definitions of the same build rules. These default to Pigweed's GN
# integrations in Pigweed's third_party directory.
#
# Warning: If your project overrides these, keep in mind that you'll need to
# chase any changes in exposed build targets, their semantics, and any other
# changes Pigweed might make.
declare_args() {
  pw_external_abseil_cpp =
      get_path_info("$dir_pw_third_party/abseil-cpp", "abspath")
  pw_external_ambiq = get_path_info("$dir_pw_third_party/ambiq", "abspath")
  pw_external_apollo4 = get_path_info("$dir_pw_third_party/apollo4", "abspath")
  pw_external_arduino = get_path_info("$dir_pw_third_party/arduino", "abspath")
  pw_external_boringssl =
      get_path_info("$dir_pw_third_party/boringssl", "abspath")
  pw_external_chre = get_path_info("$dir_pw_third_party/chre", "abspath")
  pw_external_chromium_verifier =
      get_path_info("$dir_pw_third_party/chromium_verifier", "abspath")
  pw_external_embos = get_path_info("$dir_pw_third_party/embos", "abspath")
  pw_external_emboss = get_path_info("$dir_pw_third_party/emboss", "abspath")
  pw_external_freertos =
      get_path_info("$dir_pw_third_party/freertos", "abspath")
  pw_external_fuchsia = get_path_info("$dir_pw_third_party/fuchsia", "abspath")
  pw_external_fuzztest =
      get_path_info("$dir_pw_third_party/fuzztest", "abspath")
  pw_external_googletest =
      get_path_info("$dir_pw_third_party/googletest", "abspath")
  pw_external_llvm_builtins =
      get_path_info("$dir_pw_third_party/llvm_builtins", "abspath")
  pw_external_llvm_libc =
      get_path_info("$dir_pw_third_party/llvm_libc", "abspath")
  pw_external_llvm_libcxx =
      get_path_info("$dir_pw_third_party/llvm_libcxx", "abspath")
  pw_external_mbedtls = get_path_info("$dir_pw_third_party/mbedtls", "abspath")
  pw_external_mcuxpresso =
      get_path_info("$dir_pw_third_party/mcuxpresso", "abspath")
  pw_external_nanopb = get_path_info("$dir_pw_third_party/nanopb", "abspath")
  pw_external_perfetto =
      get_path_info("$dir_pw_third_party/perfetto", "abspath")
  pw_external_pico_sdk =
      get_path_info("$dir_pw_third_party/pico_sdk", "abspath")
  pw_external_protobuf =
      get_path_info("$dir_pw_third_party/protobuf", "abspath")
  pw_external_repo = get_path_info("$dir_pw_third_party/repo", "abspath")
  pw_external_smartfusion_mss =
      get_path_info("$dir_pw_third_party/smartfusion_mss", "abspath")
  pw_external_stm32cube =
      get_path_info("$dir_pw_third_party/stm32cube", "abspath")
  pw_external_threadx = get_path_info("$dir_pw_third_party/threadx", "abspath")
  pw_external_tinyusb = get_path_info("$dir_pw_third_party/tinyusb", "abspath")
}
