# Copyright 2019 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_build/input_group.gni")
import("$dir_pw_docgen/docs.gni")
import("$dir_pw_protobuf_compiler/proto.gni")
import("$dir_pw_unit_test/test.gni")
pw_doc_group("docs") {
  sources = [ "docs.rst" ]
}

_compiling_for_nanopb = pw_protobuf_generators + [ "nanopb" ] - [ "nanopb" ] !=
                        pw_protobuf_generators

pw_test_group("tests") {
  tests = []
  if (_compiling_for_nanopb) {
    tests += [ ":nanopb_test" ]
  }
}

if (_compiling_for_nanopb) {
  pw_test("nanopb_test") {
    deps = [ ":nanopb_test_protos_nanopb" ]
    sources = [ "nanopb_test.cc" ]
  }

  pw_proto_library("nanopb_test_protos") {
    sources = [ "pw_protobuf_compiler_protos/nanopb_test.proto" ]
  }
} else {
  pw_input_group("not_needed") {
    inputs = [ "nanopb_test.cc" ]
  }
}
