| load("@bazel_skylib//rules:copy_file.bzl", "copy_file") |
| load("@nanopb_pypi//:requirements.bzl", "requirement") |
| load("@protobuf//:protobuf.bzl", "py_proto_library") |
| |
| # Note: if you are still using WORKSPACE, you will need to patch this file to use the following instead |
| # load("@python_3_11//:defs.bzl", "py_binary") |
| load("@python_versions//3.11:defs.bzl", "py_binary") |
| load("@rules_proto//proto:defs.bzl", "proto_library") |
| load("@rules_proto_grpc//:defs.bzl", "proto_plugin") |
| load("@rules_python//python/pip_install:requirements.bzl", "compile_pip_requirements") |
| load("//extra/bazel:nanopb_cc_proto_library.bzl", "cc_nanopb_proto_library") |
| |
| package(default_visibility = ["//visibility:public"]) |
| |
| licenses(["notice"]) |
| |
| exports_files(["LICENSE.txt"]) |
| |
| cc_library( |
| name = "nanopb", |
| srcs = [ |
| "pb_common.c", |
| "pb_decode.c", |
| "pb_encode.c", |
| ], |
| hdrs = [ |
| "pb.h", |
| "pb_common.h", |
| "pb_decode.h", |
| "pb_encode.h", |
| ], |
| visibility = ["//visibility:public"], |
| ) |
| |
| copy_file( |
| name = "protoc-gen-nanopb.py", |
| src = "generator/protoc-gen-nanopb", |
| out = "generator/protoc-gen-nanopb.py", |
| allow_symlink = True, |
| ) |
| |
| py_binary( |
| name = "protoc-gen-nanopb", |
| srcs = glob([ |
| "generator/**/*.py", |
| ]) + [ |
| ":protoc-gen-nanopb.py", |
| ], |
| data = glob([ |
| "generator/**/*.proto", |
| ]), |
| imports = [ |
| "generator", |
| ], |
| deps = [ |
| ":nanopb_py_proto", |
| requirement("grpcio-tools"), |
| ], |
| ) |
| |
| proto_plugin( |
| name = "nanopb_plugin", |
| env = { |
| "NANOPB_PB2_NO_REBUILD": "1", |
| }, |
| options = [ |
| "--library-include-format=quote", |
| ], |
| outputs = [ |
| "{protopath}.pb.h", |
| "{protopath}.pb.c", |
| ], |
| separate_options_flag = True, |
| tool = ":protoc-gen-nanopb", |
| use_built_in_shell_environment = False, |
| visibility = ["//visibility:public"], |
| ) |
| |
| proto_library( |
| name = "nanopb_proto", |
| srcs = [ |
| "generator/proto/nanopb.proto", |
| ], |
| strip_import_prefix = "generator/proto/", |
| deps = ["@protobuf//:descriptor_proto"], |
| ) |
| |
| py_proto_library( |
| name = "descriptor_py_proto", |
| srcs = [ |
| "generator/proto/google/protobuf/descriptor.proto", |
| ], |
| include = "generator/proto", |
| ) |
| |
| py_proto_library( |
| name = "nanopb_py_proto", |
| srcs = [ |
| "generator/proto/nanopb.proto", |
| ], |
| include = "generator/proto", |
| deps = [":descriptor_py_proto"], |
| ) |
| |
| cc_nanopb_proto_library( |
| name = "test_compilation", |
| protos = ["@protobuf//:descriptor_proto"], |
| visibility = ["//visibility:private"], |
| ) |
| |
| proto_library( |
| name = "all_types_proto", |
| srcs = ["tests/alltypes/alltypes.proto"], |
| ) |
| |
| cc_nanopb_proto_library( |
| name = "all_types_nanopb", |
| nanopb_options_files = ["tests/alltypes/alltypes.options"], |
| protos = [":all_types_proto"], |
| visibility = ["//visibility:private"], |
| ) |
| |
| cc_test( |
| name = "bazel_options_support", |
| srcs = ["tests/bazel_options_support/bazel_options_support.cc"], |
| deps = [":all_types_nanopb"], |
| ) |
| |
| # Run `bazel run //:requirements.update` if you want to update the requirements. |
| compile_pip_requirements( |
| name = "requirements", |
| extra_args = ["--allow-unsafe"], |
| requirements_in = "extra/requirements.txt", |
| requirements_txt = "extra/requirements_lock.txt", |
| ) |