123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- # Copyright (c) 2009-2021, Google LLC
- # All rights reserved.
- #
- # Redistribution and use in source and binary forms, with or without
- # modification, are permitted provided that the following conditions are met:
- # * Redistributions of source code must retain the above copyright
- # notice, this list of conditions and the following disclaimer.
- # * Redistributions in binary form must reproduce the above copyright
- # notice, this list of conditions and the following disclaimer in the
- # documentation and/or other materials provided with the distribution.
- # * Neither the name of Google LLC nor the
- # names of its contributors may be used to endorse or promote products
- # derived from this software without specific prior written permission.
- #
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- # DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY
- # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- load(
- "//bazel:upb_proto_library.bzl",
- "upb_proto_library",
- "upb_proto_reflection_library",
- )
- load(
- ":build_defs.bzl",
- "tmpl_cc_binary",
- "cc_optimizefor_proto_library",
- "expand_suffixes",
- "proto_library",
- )
- licenses(["notice"])
- proto_library(
- name = "descriptor_proto",
- srcs = ["descriptor.proto"],
- )
- upb_proto_library(
- name = "benchmark_descriptor_upb_proto",
- deps = [":descriptor_proto"],
- )
- upb_proto_reflection_library(
- name = "benchmark_descriptor_upb_proto_reflection",
- deps = [":descriptor_proto"],
- )
- upb_proto_reflection_library(
- name = "ads_upb_proto_reflection",
- deps = ["@com_google_googleapis//:ads_proto"],
- )
- cc_proto_library(
- name = "benchmark_descriptor_cc_proto",
- deps = [":descriptor_proto"],
- )
- proto_library(
- name = "benchmark_descriptor_sv_proto",
- srcs = ["descriptor_sv.proto"],
- )
- cc_proto_library(
- name = "benchmark_descriptor_sv_cc_proto",
- deps = [":benchmark_descriptor_sv_proto"],
- )
- cc_binary(
- name = "benchmark",
- testonly = 1,
- srcs = ["benchmark.cc"],
- deps = [
- ":ads_upb_proto_reflection",
- ":benchmark_descriptor_cc_proto",
- ":benchmark_descriptor_sv_cc_proto",
- ":benchmark_descriptor_upb_proto",
- ":benchmark_descriptor_upb_proto_reflection",
- "//:descriptor_upb_proto",
- "//:reflection",
- "@com_github_google_benchmark//:benchmark_main",
- "@com_google_absl//absl/container:flat_hash_set",
- ],
- )
- # Size benchmarks.
- SIZE_BENCHMARKS = {
- "empty": "Empty",
- "descriptor": "FileDescriptorSet",
- "100_msgs": "Message100",
- "200_msgs": "Message200",
- "100_fields": "Message",
- "200_fields": "Message",
- }
- py_binary(
- name = "gen_synthetic_protos",
- srcs = ["gen_synthetic_protos.py"],
- python_version = "PY3",
- )
- py_binary(
- name = "gen_upb_binary_c",
- srcs = ["gen_upb_binary_c.py"],
- python_version = "PY3",
- )
- py_binary(
- name = "gen_protobuf_binary_cc",
- srcs = ["gen_protobuf_binary_cc.py"],
- python_version = "PY3",
- )
- genrule(
- name = "do_gen_synthetic_protos",
- tools = [":gen_synthetic_protos"],
- outs = [
- "100_msgs.proto",
- "200_msgs.proto",
- "100_fields.proto",
- "200_fields.proto",
- ],
- cmd = "$(execpath :gen_synthetic_protos) $(RULEDIR)",
- )
- proto_library(
- name = "100_msgs_proto",
- srcs = ["100_msgs.proto"],
- )
- proto_library(
- name = "200_msgs_proto",
- srcs = ["200_msgs.proto"],
- )
- proto_library(
- name = "100_fields_proto",
- srcs = ["100_fields.proto"],
- )
- proto_library(
- name = "200_fields_proto",
- srcs = ["200_fields.proto"],
- )
- proto_library(
- name = "empty_proto",
- srcs = ["empty.proto"],
- )
- [(
- upb_proto_library(
- name = k + "_upb_proto",
- deps = [":" + k + "_proto"],
- ),
- cc_proto_library(
- name = k + "_cc_proto",
- deps = [":" + k + "_proto"],
- ),
- tmpl_cc_binary(
- name = k + "_upb_binary",
- testonly = 1,
- gen = ":gen_upb_binary_c",
- args = [
- package_name() + "/" + k + ".upb.h",
- "upb_benchmark_" + v,
- ],
- deps = [
- ":" + k + "_upb_proto",
- ],
- ),
- tmpl_cc_binary(
- name = k + "_protobuf_binary",
- testonly = 1,
- gen = ":gen_protobuf_binary_cc",
- args = [
- package_name() + "/" + k + ".pb.h",
- "upb_benchmark::" + v,
- ],
- deps = [
- ":" + k + "_cc_proto",
- ],
- ),
- cc_optimizefor_proto_library(
- srcs = [k + ".proto"],
- outs = [k + "_lite.proto"],
- name = k + "_cc_lite_proto",
- optimize_for = "LITE_RUNTIME",
- ),
- tmpl_cc_binary(
- name = k + "_lite_protobuf_binary",
- testonly = 1,
- gen = ":gen_protobuf_binary_cc",
- args = [
- package_name() + "/" + k + "_lite.pb.h",
- "upb_benchmark::" + v,
- ],
- deps = [
- ":" + k + "_cc_lite_proto",
- ],
- ),
- cc_optimizefor_proto_library(
- srcs = [k + ".proto"],
- outs = [k + "_codesize.proto"],
- name = k + "_cc_codesize_proto",
- optimize_for = "CODE_SIZE",
- ),
- tmpl_cc_binary(
- name = k + "_codesize_protobuf_binary",
- testonly = 1,
- gen = ":gen_protobuf_binary_cc",
- args = [
- package_name() + "/" + k + "_codesize.pb.h",
- "upb_benchmark::" + v,
- ],
- deps = [
- ":" + k + "_cc_codesize_proto",
- ],
- )
- ) for k, v in SIZE_BENCHMARKS.items()]
- genrule(
- testonly = 1,
- name = "size_data",
- srcs = expand_suffixes(
- SIZE_BENCHMARKS.keys(),
- suffixes = ["_upb_binary", "_protobuf_binary", "_lite_protobuf_binary", "_codesize_protobuf_binary"],
- ),
- outs = ["size_data.txt"],
- # We want --format=GNU which counts rodata with data, not text.
- cmd = "size $$($$OSTYPE == 'linux-gnu' ? '--format=GNU -d' : '') $(SRCS) > $@",
- # "size" sometimes isn't available remotely.
- local = 1,
- )
|