Automated g4 rollback of changelist 449982178. *** Reason for rollback *** We've figured out how to make this work in Envoy. *** Original change description *** Automated g4 rollback of changelist 449624054. *** Reason for rollback *** This CL breaks Envoy: ERROR: /usr/local/google/home/rch/.cache/bazel/_bazel_rch/1bcaf4376ad2a122efbb41b7f1024923/external/com_github_google_quiche/BUILD.bazel:239:22: Label '@com_github_google_quiche//:quiche/http2/adapter/mock_http2_visitor.h' is invalid because '@com_github_google_quiche//quiche' is a subpackage; perhaps you meant to put the colon here: '@com_github_google_quiche//quiche:http2/adapter/mock_http2_visi... *** PiperOrigin-RevId: 450749239
diff --git a/.bazelrc b/.bazelrc new file mode 100644 index 0000000..4748ed8 --- /dev/null +++ b/.bazelrc
@@ -0,0 +1,8 @@ +build --cxxopt=-std=c++17 +build --cxxopt=-fno-rtti + +# Enable Abseil/Googletest integration +build --define absl=1 + +# Don't fail on converting "0xff" to char +build --copt=-Wno-narrowing
diff --git a/BUILD.bazel b/BUILD.bazel new file mode 100644 index 0000000..044dc1f --- /dev/null +++ b/BUILD.bazel
@@ -0,0 +1,7 @@ +# Copyright 2022 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +licenses(["notice"]) + +exports_files(["LICENSE"])
diff --git a/WORKSPACE.bazel b/WORKSPACE.bazel new file mode 100644 index 0000000..620ac8a --- /dev/null +++ b/WORKSPACE.bazel
@@ -0,0 +1,87 @@ +# Copyright 2022 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +workspace(name = "com_google_quiche") + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +# -------- Bazel tooling dependencies -------- + +http_archive( + name = "bazel_skylib", + sha256 = "f7be3474d42aae265405a592bb7da8e171919d74c16f082a5457840f06054728", # Last updated 2022-05-18 + urls = ["https://github.com/bazelbuild/bazel-skylib/releases/download/1.2.1/bazel-skylib-1.2.1.tar.gz"], +) + +# -------- Dependencies used in core QUICHE build -------- + +http_archive( + name = "com_google_absl", + sha256 = "44634eae586a7158dceedda7d8fd5cec6d1ebae08c83399f75dd9ce76324de40", # Last updated 2022-05-18 + strip_prefix = "abseil-cpp-3e04aade4e7a53aebbbed1a1268117f1f522bfb0", + urls = ["https://github.com/abseil/abseil-cpp/archive/3e04aade4e7a53aebbbed1a1268117f1f522bfb0.zip"], +) + +http_archive( + name = "com_google_protobuf", + sha256 = "8b28fdd45bab62d15db232ec404248901842e5340299a57765e48abe8a80d930", # Last updated 2022-05-18 + strip_prefix = "protobuf-3.20.1", + urls = ["https://github.com/protocolbuffers/protobuf/archive/refs/tags/v3.20.1.tar.gz"], +) + +http_archive( + name = "boringssl", + sha256 = "482a59ea63d03fbb4d3cab22e40043fb4eef2cbbdc2eb944cd627675ae8b0cf3", # Last updated 2022-05-18 + strip_prefix = "boringssl-02c6711efbb6c9dc6236a1c3779af1bcb0274dfd", + urls = ["https://github.com/google/boringssl/archive/02c6711efbb6c9dc6236a1c3779af1bcb0274dfd.tar.gz"], +) + +http_archive( + name = "com_google_quic_trace", + sha256 = "079331de8c3cbf145a3b57adb3ad4e73d733ecfa84d3486e1c5a9eaeef286549", # Last updated 2022-05-18 + strip_prefix = "quic-trace-c7b993eb750e60c307e82f75763600d9c06a6de1", + urls = ["https://github.com/google/quic-trace/archive/c7b993eb750e60c307e82f75763600d9c06a6de1.tar.gz"], +) + +http_archive( + name = "com_google_googleurl", + sha256 = "a1bc96169d34dcc1406ffb750deef3bc8718bd1f9069a2878838e1bd905de989", + urls = ["https://storage.googleapis.com/quiche-envoy-integration/googleurl_9cdb1f4d1a365ebdbcbf179dadf7f8aa5ee802e7.tar.gz"], +) + +http_archive( + name = "zlib", + build_file = "//build:zlib.BUILD", + sha256 = "d8688496ea40fb61787500e863cc63c9afcbc524468cedeb478068924eb54932", # Last updated 2022-05-18 + strip_prefix = "zlib-1.2.12", + urls = ["https://github.com/madler/zlib/archive/refs/tags/v1.2.12.tar.gz"], +) + +# -------- Dependencies used by QUICHE tests and extra tooling -------- + +http_archive( + name = "com_google_googletest", + sha256 = "7ee83802222f9392452c57b4757185697a51639b69b64590f2c2188f58618581", # Last updated 2022-05-18 + strip_prefix = "googletest-8d51dc50eb7e7698427fed81b85edad0e032112e", + urls = ["https://github.com/google/googletest/archive/8d51dc50eb7e7698427fed81b85edad0e032112e.zip"], +) + +# Note this must use a commit from the `abseil` branch of the RE2 project. +# https://github.com/google/re2/tree/abseil +http_archive( + name = "com_googlesource_code_re2", + sha256 = "906d0df8ff48f8d3a00a808827f009a840190f404559f649cb8e4d7143255ef9", + strip_prefix = "re2-a276a8c738735a0fe45a6ee590fe2df69bcf4502", + urls = ["https://github.com/google/re2/archive/a276a8c738735a0fe45a6ee590fe2df69bcf4502.zip"], # 2022-04-08 +) + +# -------- Load and call dependencies of underlying libraries -------- + +load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace") + +bazel_skylib_workspace() + +load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") + +protobuf_deps()
diff --git a/build/BUILD.bazel b/build/BUILD.bazel new file mode 100644 index 0000000..0ba41e4 --- /dev/null +++ b/build/BUILD.bazel
@@ -0,0 +1,7 @@ +# Copyright 2022 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +licenses(["notice"]) + +exports_files(["source_list.json"])
diff --git a/build/test.bzl b/build/test.bzl new file mode 100644 index 0000000..9beb0ca --- /dev/null +++ b/build/test.bzl
@@ -0,0 +1,26 @@ +"""Tools for building QUICHE tests.""" + +load("@bazel_skylib//lib:paths.bzl", "paths") + +def test_suite_from_source_list(name, srcs, **kwargs): + """ + Generates a test target for every individual test source file specified. + + Args: + name: the name of the resulting test_suite target. + srcs: the list of source files from which the test targets are generated. + **kwargs: other arguments that are passed to the cc_test rule directly.s + """ + + tests = [] + for sourcefile in srcs: + if not sourcefile.endswith("_test.cc"): + fail("All source files passed to test_suite_from_source_list() must end with _test.cc") + test_name, _ = paths.split_extension(paths.basename(sourcefile)) + native.cc_test( + name = test_name, + srcs = [sourcefile], + **kwargs + ) + tests.append(test_name) + native.test_suite(name = name, tests = tests)
diff --git a/build/zlib.BUILD b/build/zlib.BUILD new file mode 100644 index 0000000..61a5507 --- /dev/null +++ b/build/zlib.BUILD
@@ -0,0 +1,25 @@ +# Copyright 2022 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +licenses(["notice"]) + +cc_library( + name = "zlib", + srcs = glob( + include = [ + "*.c", + "*.h", + ], + exclude = [ + "zlib.h", + "zconf.h", + ], + ), + hdrs = [ + "zconf.h", + "zlib.h", + ], + copts = ["-Wno-implicit-function-declaration"], + visibility = ["//visibility:public"], +)
diff --git a/quiche/BUILD.bazel b/quiche/BUILD.bazel new file mode 100644 index 0000000..6650f84 --- /dev/null +++ b/quiche/BUILD.bazel
@@ -0,0 +1,270 @@ +# Copyright 2022 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +load( + "//build:source_list.bzl", + "default_platform_impl_hdrs", + "default_platform_impl_srcs", + "default_platform_impl_test_support_hdrs", + "default_platform_impl_test_support_srcs", + "default_platform_impl_tool_support_hdrs", + "default_platform_impl_tool_support_srcs", + "quiche_core_hdrs", + "quiche_core_srcs", + "quiche_test_support_hdrs", + "quiche_test_support_srcs", + "quiche_tests_srcs", + "quiche_tool_support_hdrs", + "quiche_tool_support_srcs", +) +load("//build:test.bzl", "test_suite_from_source_list") + +licenses(["notice"]) + +package( + default_visibility = ["//visibility:private"], + features = [ + "parse_headers", + "layering_check", + ], +) + +cc_library( + name = "quic_flags_list", + textual_hdrs = [ + "quic/core/quic_flags_list.h", + "quic/core/quic_protocol_flags_list.h", + ], +) + +# QUICHE_EXPORT is used by all platform definitions, and thus needs to be handled separately. +cc_library( + name = "quiche_platform_default_quiche_export", + hdrs = [ + "common/platform/default/quiche_platform_impl/quiche_export_impl.h", + ], + strip_include_prefix = "common/platform/default", +) + +cc_library( + name = "quiche_platform_quiche_export", + hdrs = [ + "common/platform/api/quiche_export.h", + ], + deps = [":quiche_platform_default_quiche_export"], +) + +cc_library( + name = "quiche_platform_default", + srcs = default_platform_impl_srcs, + hdrs = default_platform_impl_hdrs, + strip_include_prefix = "common/platform/default", + deps = [ + ":quic_flags_list", + ":quiche_platform_quiche_export", + "@com_google_absl//absl/base:core_headers", + "@com_google_absl//absl/container:flat_hash_map", + "@com_google_absl//absl/container:flat_hash_set", + "@com_google_absl//absl/debugging:stacktrace", + "@com_google_absl//absl/debugging:symbolize", + "@com_google_absl//absl/strings", + "@com_google_absl//absl/strings:str_format", + "@com_google_absl//absl/synchronization", + "@com_google_absl//absl/time", + "@com_google_absl//absl/types:optional", + "@com_google_googleurl//url", + ], +) + +cc_library( + name = "quiche_platform_default_tools", + srcs = default_platform_impl_tool_support_srcs, + hdrs = default_platform_impl_tool_support_hdrs, + strip_include_prefix = "common/platform/default", + deps = [ + ":quiche_core", + "@com_google_absl//absl/flags:flag", + "@com_google_absl//absl/flags:parse", + "@com_google_absl//absl/flags:usage", + "@com_google_absl//absl/strings", + "@com_google_absl//absl/types:optional", + "@com_google_googletest//:gtest", + ], +) + +cc_library( + name = "quiche_platform_default_testonly", + testonly = 1, + srcs = default_platform_impl_test_support_srcs, + hdrs = default_platform_impl_test_support_hdrs, + strip_include_prefix = "common/platform/default", + deps = [ + ":quiche_core", + "@com_google_absl//absl/flags:flag", + "@com_google_absl//absl/flags:parse", + "@com_google_absl//absl/flags:usage", + "@com_google_googletest//:gtest", + ], +) + +proto_library( + name = "quiche_protobufs", + srcs = [ + "quic/core/proto/cached_network_parameters.proto", + "quic/core/proto/crypto_server_config.proto", + "quic/core/proto/source_address_token.proto", + ], +) + +cc_proto_library( + name = "quiche_protobufs_cc_proto", + deps = [":quiche_protobufs"], +) + +proto_library( + name = "quiche_protobufs_testonly", + srcs = [ + "quic/test_tools/send_algorithm_test_result.proto", + ], +) + +cc_proto_library( + name = "quiche_protobufs_testonly_cc_proto", + deps = [":quiche_protobufs_testonly"], +) + +cc_library( + name = "quiche_core", + srcs = quiche_core_srcs, + hdrs = quiche_core_hdrs, + textual_hdrs = ["http2/hpack/hpack_static_table_entries.inc"], + deps = [ + ":quiche_platform_default", + ":quiche_protobufs_cc_proto", + "@boringssl//:crypto", + "@boringssl//:ssl", + "@com_google_absl//absl/algorithm:container", + "@com_google_absl//absl/base:core_headers", + "@com_google_absl//absl/container:btree", + "@com_google_absl//absl/container:flat_hash_map", + "@com_google_absl//absl/container:flat_hash_set", + "@com_google_absl//absl/container:inlined_vector", + "@com_google_absl//absl/container:node_hash_map", + "@com_google_absl//absl/hash", + "@com_google_absl//absl/memory", + "@com_google_absl//absl/numeric:int128", + "@com_google_absl//absl/strings", + "@com_google_absl//absl/strings:str_format", + "@com_google_absl//absl/types:optional", + "@com_google_absl//absl/types:span", + "@com_google_googleurl//url", + "@com_google_quic_trace//quic_trace:quic_trace_cc_proto", + "@zlib", + ], +) + +cc_library( + name = "quiche_tool_support", + srcs = quiche_tool_support_srcs, + hdrs = quiche_tool_support_hdrs, + deps = [ + ":quiche_core", + ":quiche_platform_default_tools", + "@boringssl//:crypto", + "@com_google_absl//absl/base:core_headers", + "@com_google_absl//absl/container:flat_hash_map", + "@com_google_absl//absl/container:flat_hash_set", + "@com_google_absl//absl/memory", + "@com_google_absl//absl/strings", + "@com_google_absl//absl/strings:str_format", + "@com_google_absl//absl/types:optional", + "@com_google_googletest//:gtest", + "@com_google_googleurl//url", + ], +) + +cc_library( + name = "quiche_test_support", + testonly = 1, + srcs = quiche_test_support_srcs, + hdrs = quiche_test_support_hdrs, + deps = [ + ":quiche_core", + ":quiche_platform_default_testonly", + ":quiche_protobufs_testonly_cc_proto", + ":quiche_tool_support", + "@boringssl//:crypto", + "@boringssl//:ssl", + "@com_google_absl//absl/base:core_headers", + "@com_google_absl//absl/container:flat_hash_map", + "@com_google_absl//absl/container:flat_hash_set", + "@com_google_absl//absl/memory", + "@com_google_absl//absl/strings", + "@com_google_absl//absl/strings:str_format", + "@com_google_absl//absl/types:optional", + "@com_google_googletest//:gtest", + ], +) + +test_suite_from_source_list( + name = "quiche_tests", + srcs = quiche_tests_srcs, + data = glob([ + "common/platform/api/testdir/**", + "quic/test_tools/quic_http_response_cache_data/**", + ]), + deps = [ + ":quiche_core", + ":quiche_platform_default_testonly", + ":quiche_protobufs_testonly_cc_proto", + ":quiche_test_support", + ":quiche_tool_support", + "@boringssl//:crypto", + "@boringssl//:ssl", + "@com_google_absl//absl/algorithm:container", + "@com_google_absl//absl/base:core_headers", + "@com_google_absl//absl/container:flat_hash_map", + "@com_google_absl//absl/container:flat_hash_set", + "@com_google_absl//absl/container:node_hash_map", + "@com_google_absl//absl/functional:bind_front", + "@com_google_absl//absl/hash", + "@com_google_absl//absl/memory", + "@com_google_absl//absl/numeric:int128", + "@com_google_absl//absl/strings", + "@com_google_absl//absl/strings:str_format", + "@com_google_absl//absl/types:optional", + "@com_google_googletest//:gtest_main", + ], +) + +# TODO(vasilvv): make a rule that generates cc_binary rules for all _bin targets. +cc_binary( + name = "quic_packet_printer", + srcs = ["quic/tools/quic_packet_printer_bin.cc"], + deps = [ + ":quiche_core", + ":quiche_tool_support", + "@com_google_absl//absl/strings", + ], +) + +# Indicate that QUICHE APIs are explicitly unstable by providing only +# appropriately named aliases as publicly visible targets. +alias( + name = "quiche_unstable_api", + actual = ":quiche_core", + visibility = ["//visibility:public"], +) + +alias( + name = "quiche_unstable_api_tool_support", + actual = ":quiche_tool_support", + visibility = ["//visibility:public"], +) + +alias( + name = "quiche_unstable_api_test_support", + actual = ":quiche_test_support", + visibility = ["//visibility:public"], +)