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

# gn-format disable
import("//build_overrides/pigweed.gni")

import("$dir_pigweed/legacy_target.gni")
import("$dir_pw_docgen/docs.gni")
import("arm_gcc/toolchains.gni")
import("generate_toolchain.gni")
import("host_clang/toolchains.gni")
import("host_gcc/toolchains.gni")

# For each of the toolchains below, the toolchain GNI file has the corresponding
# configs. This allows BUILDCONFIG.gn to set default target values on "flat"
# lists of configs, i.e. not nested. This in turn allows individual targets
# fine-grained control over which default configs they wise to override.

# Generate ARM GCC toolchains
generate_toolchains("arm_gcc_suite") {
  toolchains = arm_gcc_toolchains
}

# Generate Host GCC toolchains
generate_toolchains("host_gcc_suite") {
  toolchains = host_gcc_toolchains
}

# Generate Host Clang toolchains
generate_toolchains("host_clang_suite") {
  toolchains = host_clang_toolchains
}

pw_doc_group("docs") {
  sources = [ "docs.rst" ]
}
