Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions bazel/external/quiche.BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Transformations to QUICHE tarball:
# - Move subtree under quiche/ base dir, for clarity in #include statements.
# - Rewrite include directives for platform/impl files.
#
# The mechanics of this are likely to change as QUICHE evolves, supplies its own
# Bazel buildfiles, and perhaps provides a more graceful way to override
# platform impl directory location. However, the end result (QUICHE files placed
# under quiche/{http2,quic,spdy}/, with the Envoy-specific implementation of the
# QUICHE platform APIs in //source/extensions/quic_listeners/quiche/platform/,
# should remain the same.

src_files = glob(["**/*.h", "**/*.c", "**/*.cc", "**/*.inc", "**/*.proto"])

genrule(
name = "quiche_files",
srcs = src_files,
outs = ["quiche/" + f for f in src_files],
cmd = "\n".join(
["sed -e '/^#include/ s!net/\(http2\|quic\|spdy\)/platform/impl/!extensions/quic_listeners/quiche/platform/!' $(location %s) > $(location :%s)" % (f, "quiche/" + f) for f in src_files],
),
visibility = ["//visibility:private"],
)

cc_library(
name = "http2_platform",
hdrs = [
"quiche/http2/platform/api/http2_arraysize.h",
"quiche/http2/platform/api/http2_bug_tracker.h",
"quiche/http2/platform/api/http2_containers.h",
"quiche/http2/platform/api/http2_estimate_memory_usage.h",
"quiche/http2/platform/api/http2_export.h",
"quiche/http2/platform/api/http2_flags.h",
"quiche/http2/platform/api/http2_flag_utils.h",
"quiche/http2/platform/api/http2_macros.h",
"quiche/http2/platform/api/http2_mock_log.h",
"quiche/http2/platform/api/http2_optional.h",
"quiche/http2/platform/api/http2_ptr_util.h",
"quiche/http2/platform/api/http2_reconstruct_object.h",
"quiche/http2/platform/api/http2_string.h",
"quiche/http2/platform/api/http2_string_piece.h",
"quiche/http2/platform/api/http2_string_utils.h",
"quiche/http2/platform/api/http2_test_helpers.h",
],
visibility = ["//visibility:public"],
deps = [
"@envoy//source/extensions/quic_listeners/quiche/platform:http2_platform_impl_lib",
Comment thread
mpwarres marked this conversation as resolved.
],
)
11 changes: 11 additions & 0 deletions bazel/repositories.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,7 @@ def envoy_dependencies(path = "@envoy_deps//", skip_targets = []):
_com_github_tencent_rapidjson()
_com_google_googletest()
_com_google_protobuf()
_com_google_quiche()

# Used for bundling gcovr into a relocatable .par file.
_repository_impl("subpar")
Expand Down Expand Up @@ -539,6 +540,16 @@ def _com_google_protobuf():
actual = "@com_google_protobuf//util/python:python_headers",
)

def _com_google_quiche():
_repository_impl(
name = "com_google_quiche",
build_file = "@envoy//bazel/external:quiche.BUILD",
)
native.bind(
name = "quiche_http2_platform",
actual = "@com_google_quiche//:http2_platform",
)

def _com_github_grpc_grpc():
_repository_impl("com_github_grpc_grpc")

Expand Down
5 changes: 5 additions & 0 deletions bazel/repository_locations.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -191,4 +191,9 @@ REPOSITORY_LOCATIONS = dict(
strip_prefix = "subpar-1.3.0",
urls = ["https://github.com/google/subpar/archive/1.3.0.tar.gz"],
),
com_google_quiche = dict(
Comment thread
mpwarres marked this conversation as resolved.
Outdated
# Static snapshot of https://quiche.googlesource.com/quiche/+archive/c9b2cecd1d005893114a03c101532017ddfa12cb.tar.gz
sha256 = "c8faea835132103d574cc2769a58e244bee3de02669471330a174f2ffae6fcc3",
urls = ["https://storage.googleapis.com/quiche-envoy-integration/c9b2cecd1d005893114a03c101532017ddfa12cb.tar.gz"],
),
)
16 changes: 16 additions & 0 deletions source/extensions/quic_listeners/quiche/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
licenses(["notice"]) # Apache 2

load(
"//bazel:envoy_build_system.bzl",
"envoy_cc_library",
"envoy_package",
)

envoy_package()

envoy_cc_library(
name = "dummy_lib",
Comment thread
mpwarres marked this conversation as resolved.
srcs = ["dummy.cc"],
hdrs = ["dummy.h"],
external_deps = ["quiche_http2_platform"],
)
17 changes: 17 additions & 0 deletions source/extensions/quic_listeners/quiche/dummy.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#include "extensions/quic_listeners/quiche/dummy.h"

using http2::Http2String;

namespace Envoy {
namespace Extensions {
namespace QuicListeners {
namespace Quiche {

Http2String moreCowbell(const Http2String& s) {
return s + " cowbell";
}

} // namespace Quiche
} // namespace QuicListeners
} // namespace Extensions
} // namespace Envoy
15 changes: 15 additions & 0 deletions source/extensions/quic_listeners/quiche/dummy.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#pragma once

#include "quiche/http2/platform/api/http2_string.h"

namespace Envoy {
namespace Extensions {
namespace QuicListeners {
namespace Quiche {

http2::Http2String moreCowbell(const http2::Http2String& s);

} // namespace Quiche
} // namespace QuicListeners
} // namespace Extensions
} // namespace Envoy
32 changes: 32 additions & 0 deletions source/extensions/quic_listeners/quiche/platform/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
licenses(["notice"]) # Apache 2

load(
"//bazel:envoy_build_system.bzl",
"envoy_cc_library",
"envoy_package",
)

envoy_package()

envoy_cc_library(
name = "http2_platform_impl_lib",
hdrs = [
"http2_arraysize_impl.h",
Comment thread
mpwarres marked this conversation as resolved.
"http2_bug_tracker_impl.h",
"http2_containers_impl.h",
"http2_estimate_memory_usage_impl.h",
"http2_export_impl.h",
"http2_flag_utils_impl.h",
"http2_flags_impl.h",
"http2_macros_impl.h",
"http2_mock_log_impl.h",
"http2_optional_impl.h",
"http2_ptr_util_impl.h",
"http2_reconstruct_object_impl.h",
"http2_string_impl.h",
"http2_string_piece_impl.h",
"http2_string_utils_impl.h",
"http2_test_helpers_impl.h",
],
visibility = ["//visibility:public"],
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#pragma once

#define HTTP2_ARRAYSIZE_IMPL(x) 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#pragma once

#define HTTP2_BUG_IMPL 0
#define HTTP2_BUG_IF_IMPL 0
#define FLAGS_http2_always_log_bugs_for_tests_IMPL 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#pragma once

namespace http2 {

template <typename T>
class Http2DequeImpl {};

} // namespace http2
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#pragma once

namespace http2 {

template <class T>
size_t Http2EstimateMemoryUsageImpl(const T& object) {
return 0;
}

} // namespace http2
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#pragma once

#define HTTP2_EXPORT
#define HTTP2_EXPORT_PRIVATE
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#pragma once

#define HTTP2_RELOADABLE_FLAG_COUNT_IMPL(flag) 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#pragma once

#define GetHttp2ReloadableFlagImpl(flag) 0
#define SetHttp2ReloadableFlagImpl(flag, value) 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#pragma once

#define HTTP2_FALLTHROUGH_IMPL 0
#define HTTP2_UNREACHABLE_IMPL() 0
#define HTTP2_DIE_IF_NULL_IMPL(ptr) 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#pragma once

#define CREATE_HTTP2_MOCK_LOG_IMPL(log) 0
#define EXPECT_HTTP2_LOG_CALL_IMPL(log) 0
#define EXPECT_HTTP2_LOG_CALL_CONTAINS_IMPL(log, level, content) 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#pragma once

namespace http2 {

template <typename T>
class Http2OptionalImpl {};

} // namespace http2
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#pragma once

namespace http2 {

template <typename T, typename... Args>
std::unique_ptr<T> Http2MakeUniqueImpl(Args&&... args) {
return nullptr;
}

} // namespace http2
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#pragma once

namespace http2 {
Comment thread
mpwarres marked this conversation as resolved.
namespace test {

void MarkMemoryUninitialized(void* ptr, size_t num_bytes) {}
void MarkMemoryUninitialized(void* ptr, size_t num_bytes, Http2Random* rng) {}

template <class T>
void MarkObjectUninitialized(T* ptr) {}
template <class T>
void MarkObjectUninitialized(T* ptr, Http2Random* rng) {}

template <class T, size_t N>
void MarkArrayUninitialized(T (&array)[N]) {}
template <class T, size_t N>
void MarkArrayUninitialized(T (&array)[N], Http2Random* rng) {}

template <class T, class... Args>
void Http2ReconstructObjectImpl(T* ptr, Http2Random* rng, Args&&... args) {}
template <class T>
void Http2DefaultReconstructObjectImpl(T* ptr, Http2Random* rng) {}

} // namespace test
} // namespace http2
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#pragma once

#include <string>

namespace http2 {

using Http2StringImpl = std::string;

} // namespace http2
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#pragma once

namespace http2 {

class Http2StringPieceImpl {};

} // namespace http2
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#pragma once

namespace http2 {

template <typename... Args>
inline Http2String Http2StrCatImpl(const Args&... args) {
return Http2String();
}

template <typename... Args>
inline void Http2StrAppendImpl(Http2String* output, const Args&... args) {}

template <typename... Args>
inline Http2String Http2StringPrintfImpl(const Args&... args) {
return Http2String();
}

inline Http2String Http2HexEncodeImpl(const void* bytes, size_t size) {
return Http2String();
}

inline Http2String Http2HexDecodeImpl(Http2StringPiece data) {
return Http2String();
}

inline Http2String Http2HexDumpImpl(Http2StringPiece data) {
return Http2String();
}

inline Http2String Http2HexEscapeImpl(Http2StringPiece data) {
return Http2String();
}

template <typename Number>
inline Http2String Http2HexImpl(Number number) {
return Http2String();
}

} // namespace http2
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#pragma once
23 changes: 23 additions & 0 deletions test/extensions/quic_listeners/quiche/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
licenses(["notice"]) # Apache 2

load(
"//bazel:envoy_build_system.bzl",
"envoy_cc_fuzz_test",
"envoy_cc_test",
"envoy_cc_test_binary",
"envoy_cc_test_library",
"envoy_package",
"envoy_proto_library",
)

envoy_package()

envoy_cc_test(
name = "dummy_test",
srcs = ["dummy_test.cc"],
external_deps = ["quiche_http2_platform"],
deps = [
"//source/extensions/quic_listeners/quiche:dummy_lib",
"//test/test_common:utility_lib",
],
)
19 changes: 19 additions & 0 deletions test/extensions/quic_listeners/quiche/dummy_test.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#include "extensions/quic_listeners/quiche/dummy.h"

#include "gtest/gtest.h"
#include "quiche/http2/platform/api/http2_string.h"

namespace Envoy {
namespace Extensions {
namespace QuicListeners {
namespace Quiche {

TEST(DummyTest, Dummy) {
http2::Http2String foo = "bar";
EXPECT_EQ("bar cowbell", moreCowbell(foo));
}

} // namespace Quiche
} // namespace QuicListeners
} // namespace Extensions
} // namespace Envoy