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

import("$dir_pw_build/input_group.gni")
import("$dir_pw_build/target_types.gni")
import("$dir_pw_docgen/docs.gni")
import("$dir_pw_fuzzer/fuzzer.gni")
import("$dir_pw_protobuf_compiler/proto.gni")
import("$dir_pw_unit_test/test.gni")

config("default_config") {
  include_dirs = [ "public" ]
}

pw_source_set("pw_protobuf") {
  public_configs = [ ":default_config" ]
  public_deps = [
    "$dir_pw_status",
    "$dir_pw_varint",
  ]
  public = [
    "public/pw_protobuf/codegen.h",
    "public/pw_protobuf/decoder.h",
    "public/pw_protobuf/encoder.h",
    "public/pw_protobuf/find.h",
    "public/pw_protobuf/wire_format.h",
  ]
  sources = [
    "decoder.cc",
    "encoder.cc",
    "find.cc",
  ]
  sources += public
}

pw_doc_group("docs") {
  sources = [
    "decoding.rst",
    "docs.rst",
  ]
  report_deps = [
    "size_report:decoder_full",
    "size_report:decoder_incremental",
  ]
}

# Source files for pw_protobuf's protoc plugin.
pw_input_group("codegen_protoc_plugin") {
  inputs = [
    "py/pw_protobuf/codegen_pwpb.py",
    "py/pw_protobuf/plugin.py",
    "py/pw_protobuf/proto_tree.py",
  ]
}

pw_test_group("tests") {
  tests = [
    ":codegen_test",
    ":decoder_test",
    ":encoder_test",
    ":encoder_fuzzer",
    ":find_test",
  ]
}

pw_test("decoder_test") {
  deps = [ ":pw_protobuf" ]
  sources = [ "decoder_test.cc" ]
}

pw_test("encoder_test") {
  deps = [ ":pw_protobuf" ]
  sources = [ "encoder_test.cc" ]
}

pw_test("find_test") {
  deps = [ ":pw_protobuf" ]
  sources = [ "find_test.cc" ]
}

pw_test("codegen_test") {
  deps = [ ":codegen_test_protos_pwpb" ]
  sources = [ "codegen_test.cc" ]
}

pw_proto_library("codegen_test_protos") {
  sources = [
    "pw_protobuf_protos/test_protos/full_test.proto",
    "pw_protobuf_protos/test_protos/imported.proto",
    "pw_protobuf_protos/test_protos/importer.proto",
    "pw_protobuf_protos/test_protos/proto2.proto",
    "pw_protobuf_protos/test_protos/repeated.proto",
  ]
}

pw_fuzzer("encoder_fuzzer") {
  sources = [ "encoder_fuzzer.cc" ]
  deps = [ ":pw_protobuf" ]
}
