This is an automated email from the ASF dual-hosted git repository.
xiaofeng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brpc.git
The following commit(s) were added to refs/heads/master by this push:
new 37814d2d Support Protobuf 22 (#2546)
37814d2d is described below
commit 37814d2da8f4a08da642eca28f139c293321d519
Author: Xiaofeng Wang <[email protected]>
AuthorDate: Wed Mar 13 13:31:41 2024 +0800
Support Protobuf 22 (#2546)
* Support Protobuf 22
* config_brpc.sh: support to build with protobuf 22
* ci-macos: compatible with Apple silicon
* ci: compile with protobuf 22+ using macos
---
.github/workflows/ci-macos.yml | 47 +++++++++++++++++++++--
CMakeLists.txt | 50 +++++++++++++++++++++++--
Makefile | 6 +--
config_brpc.sh | 85 +++++++++++++++++++++++++++++++++++++++++-
src/brpc/esp_message.h | 2 +-
src/brpc/global.cpp | 4 ++
src/brpc/memcache.h | 8 ++--
src/brpc/nshead_message.h | 2 +-
src/brpc/pb_compat.h | 6 +++
src/brpc/redis.h | 8 ++--
src/brpc/serialized_request.h | 4 +-
src/json2pb/json_to_pb.cpp | 8 +++-
src/json2pb/pb_to_json.cpp | 8 +++-
13 files changed, 210 insertions(+), 28 deletions(-)
diff --git a/.github/workflows/ci-macos.yml b/.github/workflows/ci-macos.yml
index 4e98aa31..c23885d5 100644
--- a/.github/workflows/ci-macos.yml
+++ b/.github/workflows/ci-macos.yml
@@ -27,9 +27,9 @@ jobs:
- name: config_brpc
run: |
- GETOPT_PATH=$(find "/usr/local/Cellar/" -name "getopt" -type f
-perm +111 -exec dirname {} \;)
+ GETOPT_PATH=$(brew --prefix gnu-getopt)/bin
export PATH=$GETOPT_PATH:$PATH
- ./config_brpc.sh --header="/usr/local/include"
--libs="/usr/local/lib"
+ ./config_brpc.sh --header="$(brew --prefix)/include" --libs="$(brew
--prefix)/lib"
- name: compile
run: |
@@ -44,7 +44,7 @@ jobs:
- name: install dependences
run: |
brew install ./homebrew-formula/protobuf.rb
- brew install openssl gnu-getopt coreutils gflags leveldb
+ brew install openssl gflags leveldb
- name: cmake
run: |
@@ -56,3 +56,44 @@ jobs:
run: |
cd build
make -j ${{env.proc_num}}
+
+ compile-with-make-protobuf22:
+ runs-on: macos-latest # https://github.com/actions/runner-images
+
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: install dependences
+ run: |
+ brew install protobuf openssl gnu-getopt coreutils gflags leveldb
+
+ - name: config_brpc
+ run: |
+ GETOPT_PATH=$(brew --prefix gnu-getopt)/bin
+ export PATH=$GETOPT_PATH:$PATH
+ ./config_brpc.sh --header="$(brew --prefix)/include" --libs="$(brew
--prefix)/lib"
+
+ - name: compile
+ run: |
+ make -j ${{env.proc_num}}
+
+ compile-with-cmake-protobuf22:
+ runs-on: macos-latest
+
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: install dependences
+ run: |
+ brew install protobuf openssl gflags leveldb
+
+ - name: cmake
+ run: |
+ mkdir build
+ cd build
+ cmake ..
+
+ - name: compile
+ run: |
+ cd build
+ make -j ${{env.proc_num}}
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2eeec049..9df7f1ef 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
-cmake_minimum_required(VERSION 2.8.10)
+cmake_minimum_required(VERSION 2.8.12)
project(brpc C CXX)
option(WITH_GLOG "With glog" OFF)
@@ -140,8 +140,6 @@ else()
endif()
endmacro(use_cxx11)
-use_cxx11()
-
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
#required by butil/crc32.cc to boost performance for 10x
if((CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)") AND NOT
(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.4))
@@ -156,6 +154,50 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
endif()
find_package(Protobuf REQUIRED)
+if(Protobuf_VERSION GREATER_EQUAL 4.22)
+ # required by absl
+ set(CMAKE_CXX_STANDARD 17)
+
+ find_package(absl REQUIRED CONFIG)
+ set(protobuf_ABSL_USED_TARGETS
+ absl::absl_check
+ absl::absl_log
+ absl::algorithm
+ absl::base
+ absl::bind_front
+ absl::bits
+ absl::btree
+ absl::cleanup
+ absl::cord
+ absl::core_headers
+ absl::debugging
+ absl::die_if_null
+ absl::dynamic_annotations
+ absl::flags
+ absl::flat_hash_map
+ absl::flat_hash_set
+ absl::function_ref
+ absl::hash
+ absl::layout
+ absl::log_initialize
+ absl::log_severity
+ absl::memory
+ absl::node_hash_map
+ absl::node_hash_set
+ absl::optional
+ absl::span
+ absl::status
+ absl::statusor
+ absl::strings
+ absl::synchronization
+ absl::time
+ absl::type_traits
+ absl::utility
+ absl::variant
+ )
+else()
+ use_cxx11()
+endif()
find_package(Threads REQUIRED)
find_path(LEVELDB_INCLUDE_PATH NAMES leveldb/db.h)
@@ -229,7 +271,7 @@ include_directories(
set(DYNAMIC_LIB
${GFLAGS_LIBRARY}
- ${PROTOBUF_LIBRARIES}
+ ${PROTOBUF_LIBRARIES} ${protobuf_ABSL_USED_TARGETS}
${LEVELDB_LIB}
${PROTOC_LIB}
${CMAKE_THREAD_LIBS_INIT}
diff --git a/Makefile b/Makefile
index 0ed8a352..04d0a243 100644
--- a/Makefile
+++ b/Makefile
@@ -23,7 +23,7 @@ include config.mk
# 2. Removed -Werror: Not block compilation for non-vital warnings, especially
when the
# code is tested on newer systems. If the code is used in production, add
-Werror back
CPPFLAGS+=-DBTHREAD_USE_FAST_PTHREAD_MUTEX -D_GNU_SOURCE -DUSE_SYMBOLIZE
-DNO_TCMALLOC -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
-D__STDC_CONSTANT_MACROS -DNDEBUG -DBRPC_REVISION=\"$(shell
./tools/get_brpc_revision.sh .)\"
-CXXFLAGS=$(CPPFLAGS) -O2 -pipe -Wall -W -fPIC -fstrict-aliasing
-Wno-invalid-offsetof -Wno-unused-parameter -fno-omit-frame-pointer -std=c++0x
+CXXFLAGS+=$(CPPFLAGS) -O2 -pipe -Wall -W -fPIC -fstrict-aliasing
-Wno-invalid-offsetof -Wno-unused-parameter -fno-omit-frame-pointer
CFLAGS=$(CPPFLAGS) -O2 -pipe -Wall -W -fPIC -fstrict-aliasing
-Wno-unused-parameter -fno-omit-frame-pointer
DEBUG_CXXFLAGS = $(filter-out -DNDEBUG,$(CXXFLAGS)) -DUNIT_TEST
-DBVAR_NOT_LINK_DEFAULT_VARIABLES
DEBUG_CFLAGS = $(filter-out -DNDEBUG,$(CFLAGS)) -DUNIT_TEST
@@ -243,9 +243,9 @@ clean_debug:
protoc-gen-mcpack: src/idl_options.pb.cc src/mcpack2pb/generator.o libbrpc.a
@echo "> Linking $@"
ifeq ($(SYSTEM),Linux)
- $(CXX) -o $@ $(CXXFLAGS) $(HDRPATHS) $(LIBPATHS) -std=c++0x -Xlinker
"-(" $^ -Wl,-Bstatic $(STATIC_LINKINGS) -Wl,-Bdynamic -Xlinker "-)"
$(DYNAMIC_LINKINGS)
+ $(CXX) -o $@ $(CXXFLAGS) $(HDRPATHS) $(LIBPATHS) -Xlinker "-(" $^
-Wl,-Bstatic $(STATIC_LINKINGS) -Wl,-Bdynamic -Xlinker "-)" $(DYNAMIC_LINKINGS)
else ifeq ($(SYSTEM),Darwin)
- $(CXX) -o $@ $(CXXFLAGS) $(HDRPATHS) $(LIBPATHS) -std=c++0x $^
$(STATIC_LINKINGS) $(DYNAMIC_LINKINGS)
+ $(CXX) -o $@ $(CXXFLAGS) $(HDRPATHS) $(LIBPATHS) $^ $(STATIC_LINKINGS)
$(DYNAMIC_LINKINGS)
endif
# force generation of pb headers before compiling to avoid fail-to-import
issues in compiling pb.cc
diff --git a/config_brpc.sh b/config_brpc.sh
index 7e459b75..777b76be 100755
--- a/config_brpc.sh
+++ b/config_brpc.sh
@@ -262,10 +262,89 @@ if [ -z "$GFLAGS_NS" ]; then
fi
PROTOBUF_HDR=$(find_dir_of_header_or_die google/protobuf/message.h)
+PROTOBUF_VERSION=$(grep '#define GOOGLE_PROTOBUF_VERSION [0-9]\+'
$PROTOBUF_HDR/google/protobuf/stubs/common.h | awk '{print $3}')
+if [ "$PROTOBUF_VERSION" -ge 4022000 ]; then
+ ABSL_HDR=$(find_dir_of_header_or_die absl/base/config.h)
+ ABSL_LIB=$(find_dir_of_lib_or_die absl_strings)
+ ABSL_LIB_NAMES="
+ absl_bad_optional_access
+ absl_bad_variant_access
+ absl_base
+ absl_city
+ absl_civil_time
+ absl_cord
+ absl_cord_internal
+ absl_cordz_functions
+ absl_cordz_handle
+ absl_cordz_info
+ absl_crc32c
+ absl_crc_cord_state
+ absl_crc_cpu_detect
+ absl_crc_internal
+ absl_debugging_internal
+ absl_demangle_internal
+ absl_die_if_null
+ absl_examine_stack
+ absl_exponential_biased
+ absl_flags
+ absl_flags_commandlineflag
+ absl_flags_commandlineflag_internal
+ absl_flags_config
+ absl_flags_internal
+ absl_flags_marshalling
+ absl_flags_private_handle_accessor
+ absl_flags_program_name
+ absl_flags_reflection
+ absl_graphcycles_internal
+ absl_hash
+ absl_hashtablez_sampler
+ absl_int128
+ absl_kernel_timeout_internal
+ absl_leak_check
+ absl_log_entry
+ absl_log_globals
+ absl_log_initialize
+ absl_log_internal_check_op
+ absl_log_internal_conditions
+ absl_log_internal_format
+ absl_log_internal_globals
+ absl_log_internal_log_sink_set
+ absl_log_internal_message
+ absl_log_internal_nullguard
+ absl_log_internal_proto
+ absl_log_severity
+ absl_log_sink
+ absl_low_level_hash
+ absl_malloc_internal
+ absl_raw_hash_set
+ absl_raw_logging_internal
+ absl_spinlock_wait
+ absl_stacktrace
+ absl_status
+ absl_statusor
+ absl_str_format_internal
+ absl_strerror
+ absl_string_view
+ absl_strings
+ absl_strings_internal
+ absl_symbolize
+ absl_synchronization
+ absl_throw_delegate
+ absl_time
+ absl_time_zone
+ "
+ for i in $ABSL_LIB_NAMES; do
+ append_linking "$ABSL_LIB" "$i"
+ done
+ CXXFLAGS="-std=c++17"
+else
+ CXXFLAGS="-std=c++0x"
+fi
+
LEVELDB_HDR=$(find_dir_of_header_or_die leveldb/db.h)
-HDRS=$($ECHO "$GFLAGS_HDR\n$PROTOBUF_HDR\n$LEVELDB_HDR\n$OPENSSL_HDR" | sort |
uniq)
-LIBS=$($ECHO
"$GFLAGS_LIB\n$PROTOBUF_LIB\n$LEVELDB_LIB\n$OPENSSL_LIB\n$SNAPPY_LIB" | sort |
uniq)
+HDRS=$($ECHO
"$GFLAGS_HDR\n$PROTOBUF_HDR\n$ABSL_HDR\n$LEVELDB_HDR\n$OPENSSL_HDR" | sort |
uniq)
+LIBS=$($ECHO
"$GFLAGS_LIB\n$PROTOBUF_LIB\n$ABSL_LIB\n$LEVELDB_LIB\n$OPENSSL_LIB\n$SNAPPY_LIB"
| sort | uniq)
absent_in_the_list() {
TMP=`$ECHO "$1\n$2" | sort | uniq`
@@ -390,6 +469,8 @@ ifeq (\$(CC),gcc)
endif
"
+append_to_output "CXXFLAGS=${CXXFLAGS}"
+
append_to_output "ifeq (\$(NEED_LIBPROTOC), 1)"
PROTOC_LIB=$(find $PROTOBUF_LIB -name "libprotoc.*" | head -n1)
if [ -z "$PROTOC_LIB" ]; then
diff --git a/src/brpc/esp_message.h b/src/brpc/esp_message.h
index 279f7b6a..aecc837c 100644
--- a/src/brpc/esp_message.h
+++ b/src/brpc/esp_message.h
@@ -72,7 +72,7 @@ public:
::google::protobuf::io::CodedOutputStream* output) const
PB_310_OVERRIDE;
::google::protobuf::uint8* SerializeWithCachedSizesToArray(
::google::protobuf::uint8* output) const PB_310_OVERRIDE;
- int GetCachedSize() const override { return ByteSize(); }
+ int GetCachedSize() const PB_422_OVERRIDE { return ByteSize(); }
protected:
::google::protobuf::Metadata GetMetadata() const override;
diff --git a/src/brpc/global.cpp b/src/brpc/global.cpp
index 121b9d97..d45c67f0 100644
--- a/src/brpc/global.cpp
+++ b/src/brpc/global.cpp
@@ -297,6 +297,7 @@ static void* GlobalUpdate(void*) {
return NULL;
}
+#if GOOGLE_PROTOBUF_VERSION < 3022000
static void BaiduStreamingLogHandler(google::protobuf::LogLevel level,
const char* filename, int line,
const std::string& message) {
@@ -316,6 +317,7 @@ static void
BaiduStreamingLogHandler(google::protobuf::LogLevel level,
}
CHECK(false) << filename << ':' << line << ' ' << message;
}
+#endif
static void GlobalInitializeOrDieImpl() {
//////////////////////////////////////////////////////////////////
@@ -331,8 +333,10 @@ static void GlobalInitializeOrDieImpl() {
CHECK(SIG_ERR != signal(SIGPIPE, SIG_IGN));
}
+#if GOOGLE_PROTOBUF_VERSION < 3022000
// Make GOOGLE_LOG print to comlog device
SetLogHandler(&BaiduStreamingLogHandler);
+#endif
// Set bthread create span function
bthread_set_create_span_func(CreateBthreadSpan);
diff --git a/src/brpc/memcache.h b/src/brpc/memcache.h
index c6fd2b95..014f075b 100644
--- a/src/brpc/memcache.h
+++ b/src/brpc/memcache.h
@@ -107,7 +107,7 @@ public:
void SerializeWithCachedSizes(
::google::protobuf::io::CodedOutputStream* output) const
PB_310_OVERRIDE;
::google::protobuf::uint8*
SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const
PB_310_OVERRIDE;
- int GetCachedSize() const override { return _cached_size_; }
+ int GetCachedSize() const PB_422_OVERRIDE { return _cached_size_; }
static const ::google::protobuf::Descriptor* descriptor();
@@ -125,7 +125,7 @@ private:
void SharedCtor();
void SharedDtor();
- void SetCachedSize(int size) const override;
+ void SetCachedSize(int size) const PB_422_OVERRIDE;
int _pipelined_count;
butil::IOBuf _buf;
@@ -220,7 +220,7 @@ public:
void SerializeWithCachedSizes(
::google::protobuf::io::CodedOutputStream* output) const
PB_310_OVERRIDE;
::google::protobuf::uint8*
SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const
PB_310_OVERRIDE;
- int GetCachedSize() const override { return _cached_size_; }
+ int GetCachedSize() const PB_422_OVERRIDE { return _cached_size_; }
static const ::google::protobuf::Descriptor* descriptor();
@@ -233,7 +233,7 @@ private:
void SharedCtor();
void SharedDtor();
- void SetCachedSize(int size) const override;
+ void SetCachedSize(int size) const PB_422_OVERRIDE;
std::string _err;
butil::IOBuf _buf;
diff --git a/src/brpc/nshead_message.h b/src/brpc/nshead_message.h
index 11cc1c60..6cd06caf 100644
--- a/src/brpc/nshead_message.h
+++ b/src/brpc/nshead_message.h
@@ -67,7 +67,7 @@ public:
void SerializeWithCachedSizes(
::google::protobuf::io::CodedOutputStream* output) const
PB_310_OVERRIDE;
::google::protobuf::uint8*
SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const
PB_310_OVERRIDE;
- int GetCachedSize() const override { return ByteSize(); }
+ int GetCachedSize() const PB_422_OVERRIDE { return ByteSize(); }
protected:
::google::protobuf::Metadata GetMetadata() const override;
diff --git a/src/brpc/pb_compat.h b/src/brpc/pb_compat.h
index 70faeb54..d089530f 100644
--- a/src/brpc/pb_compat.h
+++ b/src/brpc/pb_compat.h
@@ -19,6 +19,12 @@
#ifndef BRPC_PB_COMPAT_H
#define BRPC_PB_COMPAT_H
+#if GOOGLE_PROTOBUF_VERSION < 4022000
+# define PB_422_OVERRIDE override
+#else
+# define PB_422_OVERRIDE
+#endif
+
#if GOOGLE_PROTOBUF_VERSION < 3021000
# define PB_321_OVERRIDE override
#else
diff --git a/src/brpc/redis.h b/src/brpc/redis.h
index d02e8941..6b949ea4 100644
--- a/src/brpc/redis.h
+++ b/src/brpc/redis.h
@@ -125,7 +125,7 @@ public:
void SerializeWithCachedSizes(
::google::protobuf::io::CodedOutputStream* output) const
PB_310_OVERRIDE;
::google::protobuf::uint8*
SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const
PB_310_OVERRIDE;
- int GetCachedSize() const override { return _cached_size_; }
+ int GetCachedSize() const PB_422_OVERRIDE { return _cached_size_; }
static const ::google::protobuf::Descriptor* descriptor();
@@ -137,7 +137,7 @@ protected:
private:
void SharedCtor();
void SharedDtor();
- void SetCachedSize(int size) const override;
+ void SetCachedSize(int size) const PB_422_OVERRIDE;
bool AddCommandWithArgs(const char* fmt, ...);
int _ncommand; // # of valid commands
@@ -198,7 +198,7 @@ public:
void SerializeWithCachedSizes(
::google::protobuf::io::CodedOutputStream* output) const
PB_310_OVERRIDE;
::google::protobuf::uint8*
SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const
PB_310_OVERRIDE;
- int GetCachedSize() const override { return _cached_size_; }
+ int GetCachedSize() const PB_422_OVERRIDE { return _cached_size_; }
static const ::google::protobuf::Descriptor* descriptor();
@@ -208,7 +208,7 @@ protected:
private:
void SharedCtor();
void SharedDtor();
- void SetCachedSize(int size) const override;
+ void SetCachedSize(int size) const PB_422_OVERRIDE;
RedisReply _first_reply;
RedisReply* _other_replies;
diff --git a/src/brpc/serialized_request.h b/src/brpc/serialized_request.h
index 0fbf76ba..5b68262e 100644
--- a/src/brpc/serialized_request.h
+++ b/src/brpc/serialized_request.h
@@ -53,7 +53,7 @@ public:
void Clear() override;
bool IsInitialized() const override;
int ByteSize() const;
- int GetCachedSize() const override { return (int)_serialized.size(); }
+ int GetCachedSize() const PB_422_OVERRIDE { return
(int)_serialized.size(); }
butil::IOBuf& serialized_data() { return _serialized; }
const butil::IOBuf& serialized_data() const { return _serialized; }
@@ -71,7 +71,7 @@ private:
void MergeFrom(const SerializedRequest& from);
void SharedCtor();
void SharedDtor();
- void SetCachedSize(int size) const override;
+ void SetCachedSize(int size) const PB_422_OVERRIDE;
private:
butil::IOBuf _serialized;
diff --git a/src/json2pb/json_to_pb.cpp b/src/json2pb/json_to_pb.cpp
index 6a6f46cc..2652d6d4 100644
--- a/src/json2pb/json_to_pb.cpp
+++ b/src/json2pb/json_to_pb.cpp
@@ -534,8 +534,12 @@ bool JsonValueToProtoMessage(const
BUTIL_RAPIDJSON_NAMESPACE::Value& json_value,
for (int i = 0; i < descriptor->extension_range_count(); ++i) {
const google::protobuf::Descriptor::ExtensionRange*
ext_range = descriptor->extension_range(i);
- for (int tag_number = ext_range->start; tag_number < ext_range->end;
- ++tag_number) {
+#if GOOGLE_PROTOBUF_VERSION < 4022000
+ for (int tag_number = ext_range->start; tag_number < ext_range->end;
++tag_number)
+#else
+ for (int tag_number = ext_range->start_number(); tag_number <
ext_range->end_number(); ++tag_number)
+#endif
+ {
const google::protobuf::FieldDescriptor* field =
reflection->FindKnownExtensionByNumber(tag_number);
if (field) {
diff --git a/src/json2pb/pb_to_json.cpp b/src/json2pb/pb_to_json.cpp
index c6ce183a..a299e424 100644
--- a/src/json2pb/pb_to_json.cpp
+++ b/src/json2pb/pb_to_json.cpp
@@ -75,8 +75,12 @@ bool PbToJsonConverter::Convert(const
google::protobuf::Message& message, Handle
for (int i = 0; i < ext_range_count; ++i) {
const google::protobuf::Descriptor::ExtensionRange*
ext_range = descriptor->extension_range(i);
- for (int tag_number = ext_range->start;
- tag_number < ext_range->end; ++tag_number) {
+#if GOOGLE_PROTOBUF_VERSION < 4022000
+ for (int tag_number = ext_range->start; tag_number < ext_range->end;
++tag_number)
+#else
+ for (int tag_number = ext_range->start_number(); tag_number <
ext_range->end_number(); ++tag_number)
+#endif
+ {
const google::protobuf::FieldDescriptor* field =
reflection->FindKnownExtensionByNumber(tag_number);
if (field) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]