aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVanilla I. Shu <vanilla@FreeBSD.org>2026-05-01 14:22:23 +0000
committerVanilla I. Shu <vanilla@FreeBSD.org>2026-05-01 14:23:23 +0000
commita4a400be07ce2161f12997a32a11c3cf46a9dde5 (patch)
tree81258a070e9e29b6a54f0134cd0adab51b4381d9
parent902fcfa4ee5d1f946fb3ada040d4744ba9f4406b (diff)
devel/brpc: add new ports.
PR: 293396
-rw-r--r--devel/Makefile1
-rw-r--r--devel/brpc/Makefile41
-rw-r--r--devel/brpc/distinfo3
-rw-r--r--devel/brpc/files/patch-CMakeLists.txt49
-rw-r--r--devel/brpc/files/patch-src_brpc_controller.cpp11
-rw-r--r--devel/brpc/files/patch-src_brpc_event__dispatcher.cpp11
-rw-r--r--devel/brpc/files/patch-src_brpc_policy_domain__naming__service.cpp11
-rw-r--r--devel/brpc/files/patch-src_brpc_socket.cpp124
-rw-r--r--devel/brpc/files/patch-src_bthread_context.h18
-rw-r--r--devel/brpc/files/patch-src_bthread_errno.cpp11
-rw-r--r--devel/brpc/files/patch-src_bthread_fd.cpp92
-rw-r--r--devel/brpc/files/patch-src_bthread_mutex.cpp15
-rw-r--r--devel/brpc/files/patch-src_bthread_sys__futex.cpp11
-rw-r--r--devel/brpc/files/patch-src_bthread_sys__futex.h11
-rw-r--r--devel/brpc/files/patch-src_bthread_task__control.cpp17
-rw-r--r--devel/brpc/files/patch-src_bthread_task__group.cpp20
-rw-r--r--devel/brpc/files/patch-src_butil_compat.h22
-rw-r--r--devel/brpc/files/patch-src_butil_details_extended__endpoint.hpp20
-rw-r--r--devel/brpc/files/patch-src_butil_endpoint.cpp38
-rw-r--r--devel/brpc/files/patch-src_butil_errno.cpp20
-rw-r--r--devel/brpc/files/patch-src_butil_fd__utility.cpp29
-rw-r--r--devel/brpc/files/patch-src_butil_logging.cc44
-rw-r--r--devel/brpc/files/patch-src_butil_popen.cpp12
-rw-r--r--devel/brpc/files/patch-src_butil_process__util.cc38
-rw-r--r--devel/brpc/files/patch-src_butil_threading_platform__thread__freebsd.cc18
-rw-r--r--devel/brpc/files/patch-src_bvar_default__variables.cpp12
-rw-r--r--devel/brpc/pkg-descr9
-rw-r--r--devel/brpc/pkg-plist541
28 files changed, 1249 insertions, 0 deletions
diff --git a/devel/Makefile b/devel/Makefile
index aeda92049c62..4b09caa30b6f 100644
--- a/devel/Makefile
+++ b/devel/Makefile
@@ -339,6 +339,7 @@
SUBDIR += boxed-cpp
SUBDIR += boxfort
SUBDIR += bpython
+ SUBDIR += brpc
SUBDIR += brz
SUBDIR += bsdbuild
SUBDIR += bsdcflow
diff --git a/devel/brpc/Makefile b/devel/brpc/Makefile
new file mode 100644
index 000000000000..8c4ee108a5c3
--- /dev/null
+++ b/devel/brpc/Makefile
@@ -0,0 +1,41 @@
+PORTNAME= brpc
+DISTVERSION= 1.16.0
+CATEGORIES= devel
+
+MAINTAINER= daniel@morante.net
+COMMENT= Apache bRPC - Industrial-grade RPC framework
+WWW= https://brpc.apache.org/
+
+LICENSE= APACHE20
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+BUILD_DEPENDS= ${LOCALBASE}/include/gtest/gtest.h:devel/googletest
+LIB_DEPENDS= libabsl_base.so:devel/abseil \
+ libgflags.so:devel/gflags \
+ libleveldb.so:databases/leveldb \
+ libprotobuf.so:devel/protobuf
+
+USES= cmake:noninja localbase:ldflags ssl
+USE_GITHUB= yes
+GH_ACCOUNT= apache
+
+CMAKE_ARGS= -DBUILD_BRPC_TOOLS=ON
+
+PLIST_SUB= VERSION=${PORTVERSION}
+
+OPTIONS_DEFINE= GLOG
+OPTIONS_DEFAULT=
+
+GLOG_DESC= Use Google glog for logging
+GLOG_LIB_DEPENDS= libglog.so:devel/glog
+GLOG_CMAKE_BOOL= WITH_GLOG
+GLOG_CXXFLAGS= -DGLOG_USE_GLOG_EXPORT
+
+post-install:
+ @${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/parallel_http
+ @${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/rpc_press
+ @${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/rpc_replay
+ @${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/rpc_view
+ @${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/trackme_server
+
+.include <bsd.port.mk>
diff --git a/devel/brpc/distinfo b/devel/brpc/distinfo
new file mode 100644
index 000000000000..be8d00893f7e
--- /dev/null
+++ b/devel/brpc/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1771808781
+SHA256 (apache-brpc-1.16.0_GH0.tar.gz) = 60f218554527f05ad8fae3cb8f81879d0c7dc72b249cde132049c44b1a73e76d
+SIZE (apache-brpc-1.16.0_GH0.tar.gz) = 25921710
diff --git a/devel/brpc/files/patch-CMakeLists.txt b/devel/brpc/files/patch-CMakeLists.txt
new file mode 100644
index 000000000000..f8132011074f
--- /dev/null
+++ b/devel/brpc/files/patch-CMakeLists.txt
@@ -0,0 +1,49 @@
+--- CMakeLists.txt.orig 2026-02-23 02:11:29 UTC
++++ CMakeLists.txt
+@@ -64,6 +64,13 @@ if(WITH_GLOG)
+ if(WITH_GLOG)
+ set(WITH_GLOG_VAL "1")
+ set(BRPC_WITH_GLOG 1)
++ # glog >= 0.7 requires GLOG_USE_GLOG_EXPORT to define GLOG_EXPORT/GLOG_NO_EXPORT.
++ # glog/export.h only exists in glog >= 0.7, so use it as a version check.
++ include(CheckIncludeFileCXX)
++ check_include_file_cxx("glog/export.h" GLOG_HAS_EXPORT_H)
++ if(GLOG_HAS_EXPORT_H)
++ add_definitions(-DGLOG_USE_GLOG_EXPORT)
++ endif()
+ endif()
+
+ if(WITH_DEBUG_SYMBOLS)
+@@ -147,6 +154,11 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CPP_FLAGS} -O2 -pipe -Wal
+ set(CMAKE_CPP_FLAGS "${CMAKE_CPP_FLAGS} -DBTHREAD_USE_FAST_PTHREAD_MUTEX -D__const__=__unused__ -D_GNU_SOURCE -DUSE_SYMBOLIZE -DNO_TCMALLOC -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -DBRPC_REVISION=\\\"${BRPC_REVISION}\\\" -D__STRICT_ANSI__")
+ set(CMAKE_CPP_FLAGS "${CMAKE_CPP_FLAGS} ${DEBUG_SYMBOL} ${THRIFT_CPP_FLAG}")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CPP_FLAGS} -O2 -pipe -Wall -W -fPIC -fstrict-aliasing -Wno-invalid-offsetof -Wno-unused-parameter -fno-omit-frame-pointer")
++
++if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
++ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNO_PTHREAD_MUTEX_HOOK")
++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNO_PTHREAD_MUTEX_HOOK")
++endif()
+ set(CMAKE_C_FLAGS "${CMAKE_CPP_FLAGS} -O2 -pipe -Wall -W -fPIC -fstrict-aliasing -Wno-unused-parameter -fno-omit-frame-pointer")
+
+ macro(use_cxx11)
+@@ -342,6 +354,9 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ set(DYNAMIC_LIB ${DYNAMIC_LIB} rt)
+ set(BRPC_PRIVATE_LIBS "${BRPC_PRIVATE_LIBS} -lrt")
++elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
++ set(DYNAMIC_LIB ${DYNAMIC_LIB} execinfo)
++ set(BRPC_PRIVATE_LIBS "${BRPC_PRIVATE_LIBS} -lexecinfo")
+ elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+ set(DYNAMIC_LIB ${DYNAMIC_LIB}
+ pthread
+@@ -500,6 +515,10 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+ ${PROJECT_SOURCE_DIR}/src/butil/strings/sys_string_conversions_mac.mm
+ ${PROJECT_SOURCE_DIR}/src/butil/time/time_mac.cc
+ ${PROJECT_SOURCE_DIR}/src/butil/mac/scoped_mach_port.cc)
++elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
++ set(BUTIL_SOURCES ${BUTIL_SOURCES}
++ ${PROJECT_SOURCE_DIR}/src/butil/threading/platform_thread_freebsd.cc
++ ${PROJECT_SOURCE_DIR}/src/butil/strings/sys_string_conversions_posix.cc)
+ endif()
+
+ file(GLOB_RECURSE BVAR_SOURCES "${PROJECT_SOURCE_DIR}/src/bvar/*.cpp")
diff --git a/devel/brpc/files/patch-src_brpc_controller.cpp b/devel/brpc/files/patch-src_brpc_controller.cpp
new file mode 100644
index 000000000000..83c5bcc78f1f
--- /dev/null
+++ b/devel/brpc/files/patch-src_brpc_controller.cpp
@@ -0,0 +1,11 @@
+--- src/brpc/controller.cpp.orig 2026-02-23 02:11:29 UTC
++++ src/brpc/controller.cpp
+@@ -1577,7 +1577,7 @@ void Controller::CallAfterRpcResp(const google::protob
+ }
+ }
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_FREEBSD)
+ typedef sig_t SignalHandler;
+ #else
+ typedef sighandler_t SignalHandler;
diff --git a/devel/brpc/files/patch-src_brpc_event__dispatcher.cpp b/devel/brpc/files/patch-src_brpc_event__dispatcher.cpp
new file mode 100644
index 000000000000..f08befc17b7f
--- /dev/null
+++ b/devel/brpc/files/patch-src_brpc_event__dispatcher.cpp
@@ -0,0 +1,11 @@
+--- src/brpc/event_dispatcher.cpp.orig 2026-02-23 02:11:29 UTC
++++ src/brpc/event_dispatcher.cpp
+@@ -101,7 +101,7 @@ void IOEventData::BeforeRecycled() {
+
+ #if defined(OS_LINUX)
+ #include "brpc/event_dispatcher_epoll.cpp"
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_FREEBSD)
+ #include "brpc/event_dispatcher_kqueue.cpp"
+ #else
+ #error Not implemented
diff --git a/devel/brpc/files/patch-src_brpc_policy_domain__naming__service.cpp b/devel/brpc/files/patch-src_brpc_policy_domain__naming__service.cpp
new file mode 100644
index 000000000000..c3b5fa6b0221
--- /dev/null
+++ b/devel/brpc/files/patch-src_brpc_policy_domain__naming__service.cpp
@@ -0,0 +1,11 @@
+--- src/brpc/policy/domain_naming_service.cpp.orig 2026-02-23 02:11:29 UTC
++++ src/brpc/policy/domain_naming_service.cpp
+@@ -106,7 +106,7 @@ int DomainNamingService::GetServers(const char* dns_na
+
+ }
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_FREEBSD)
+ _aux_buf_len = 0; // suppress unused warning
+ // gethostbyname on MAC is thread-safe (with current usage) since the
+ // returned hostent is TLS. Check following link for the ref:
diff --git a/devel/brpc/files/patch-src_brpc_socket.cpp b/devel/brpc/files/patch-src_brpc_socket.cpp
new file mode 100644
index 000000000000..bdee7d300c91
--- /dev/null
+++ b/devel/brpc/files/patch-src_brpc_socket.cpp
@@ -0,0 +1,124 @@
+--- src/brpc/socket.cpp.orig 2026-02-23 02:11:29 UTC
++++ src/brpc/socket.cpp
+@@ -52,7 +52,7 @@
+ #include "brpc/details/health_check.h"
+ #include "brpc/rdma/rdma_endpoint.h"
+ #include "brpc/rdma/rdma_helper.h"
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_FREEBSD)
+ #include <sys/event.h>
+ #endif
+
+@@ -677,6 +677,30 @@ void Socket::SetSocketOptions(int fd) {
+ PLOG(ERROR) << "Fail to set keepcnt of fd=" << fd;
+ }
+ }
++#elif defined(OS_FREEBSD)
++ if (_keepalive_options->keepalive_idle_s > 0) {
++ if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE,
++ &_keepalive_options->keepalive_idle_s,
++ sizeof(_keepalive_options->keepalive_idle_s)) != 0) {
++ PLOG(ERROR) << "Fail to set keepidle of fd=" << fd;
++ }
++ }
++
++ if (_keepalive_options->keepalive_interval_s > 0) {
++ if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL,
++ &_keepalive_options->keepalive_interval_s,
++ sizeof(_keepalive_options->keepalive_interval_s)) != 0) {
++ PLOG(ERROR) << "Fail to set keepintvl of fd=" << fd;
++ }
++ }
++
++ if (_keepalive_options->keepalive_count > 0) {
++ if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPCNT,
++ &_keepalive_options->keepalive_count,
++ sizeof(_keepalive_options->keepalive_count)) != 0) {
++ PLOG(ERROR) << "Fail to set keepcnt of fd=" << fd;
++ }
++ }
+ #elif defined(OS_MACOSX)
+ if (_keepalive_options->keepalive_idle_s > 0) {
+ if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPALIVE,
+@@ -2068,7 +2092,7 @@ int Socket::SSLHandshake(int fd, bool server_mode) {
+ case SSL_ERROR_WANT_READ:
+ #if defined(OS_LINUX)
+ if (bthread_fd_wait(fd, EPOLLIN) != 0) {
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_FREEBSD)
+ if (bthread_fd_wait(fd, EVFILT_READ) != 0) {
+ #endif
+ return -1;
+@@ -2078,7 +2102,7 @@ int Socket::SSLHandshake(int fd, bool server_mode) {
+ case SSL_ERROR_WANT_WRITE:
+ #if defined(OS_LINUX)
+ if (bthread_fd_wait(fd, EPOLLOUT) != 0) {
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_FREEBSD)
+ if (bthread_fd_wait(fd, EVFILT_WRITE) != 0) {
+ #endif
+ return -1;
+@@ -2246,7 +2270,7 @@ int Socket::OnInputEvent(void* user_data, uint32_t eve
+ if (s->fd() < 0) {
+ #if defined(OS_LINUX)
+ CHECK(!(events & EPOLLIN)) << "epoll_events=" << events;
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_FREEBSD)
+ CHECK((short)events != EVFILT_READ) << "kqueue filter=" << events;
+ #endif
+ return -1;
+@@ -2482,7 +2506,11 @@ void Socket::DebugSocket(std::ostream& os, SocketId id
+ {
+ int keepidle = 0;
+ socklen_t len = sizeof(keepidle);
+-#if defined(OS_MACOSX)
++#if defined(OS_FREEBSD)
++ if (getsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &keepidle, &len) == 0) {
++ os << "\ntcp_keepalive_time=" << keepidle;
++ }
++#elif defined(OS_MACOSX)
+ if (getsockopt(fd, IPPROTO_TCP, TCP_KEEPALIVE, &keepidle, &len) == 0) {
+ os << "\ntcp_keepalive_time=" << keepidle;
+ }
+@@ -2496,7 +2524,7 @@ void Socket::DebugSocket(std::ostream& os, SocketId id
+ {
+ int keepintvl = 0;
+ socklen_t len = sizeof(keepintvl);
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_FREEBSD)
+ if (getsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, &keepintvl, &len) == 0) {
+ os << "\ntcp_keepalive_intvl=" << keepintvl;
+ }
+@@ -2510,7 +2538,7 @@ void Socket::DebugSocket(std::ostream& os, SocketId id
+ {
+ int keepcnt = 0;
+ socklen_t len = sizeof(keepcnt);
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_FREEBSD)
+ if (getsockopt(fd, IPPROTO_TCP, TCP_KEEPCNT, &keepcnt, &len) == 0) {
+ os << "\ntcp_keepalive_probes=" << keepcnt;
+ }
+@@ -2531,7 +2559,22 @@ void Socket::DebugSocket(std::ostream& os, SocketId id
+ }
+ #endif
+
+-#if defined(OS_MACOSX)
++#if defined(OS_FREEBSD)
++ struct tcp_info ti;
++ socklen_t len = sizeof(ti);
++ if (fd >= 0 && getsockopt(fd, IPPROTO_TCP, TCP_INFO, &ti, &len) == 0) {
++ os << "\ntcpi={\n state=" << (uint32_t)ti.tcpi_state
++ << "\n snd_wscale=" << (uint32_t)ti.tcpi_snd_wscale
++ << "\n rcv_wscale=" << (uint32_t)ti.tcpi_rcv_wscale
++ << "\n options=" << (uint32_t)ti.tcpi_options
++ << "\n rto=" << ti.tcpi_rto
++ << "\n snd_mss=" << ti.tcpi_snd_mss
++ << "\n snd_ssthresh=" << ti.tcpi_snd_ssthresh
++ << "\n snd_cwnd=" << ti.tcpi_snd_cwnd
++ << "\n rcv_space=" << ti.tcpi_rcv_space
++ << "\n}";
++ }
++#elif defined(OS_MACOSX)
+ struct tcp_connection_info ti;
+ socklen_t len = sizeof(ti);
+ if (fd >= 0 && getsockopt(fd, IPPROTO_TCP, TCP_CONNECTION_INFO, &ti, &len) == 0) {
diff --git a/devel/brpc/files/patch-src_bthread_context.h b/devel/brpc/files/patch-src_bthread_context.h
new file mode 100644
index 000000000000..3a36184d99cf
--- /dev/null
+++ b/devel/brpc/files/patch-src_bthread_context.h
@@ -0,0 +1,18 @@
+--- src/bthread/context.h.orig 2026-02-23 02:11:29 UTC
++++ src/bthread/context.h
+@@ -58,6 +58,15 @@
+ #define BTHREAD_CONTEXT_CALL_CONVENTION __cdecl
+ #endif
+
++ #elif defined(__FreeBSD__)
++ #ifdef __x86_64__
++ #define BTHREAD_CONTEXT_PLATFORM_linux_x86_64
++ #define BTHREAD_CONTEXT_CALL_CONVENTION
++ #elif __aarch64__
++ #define BTHREAD_CONTEXT_PLATFORM_linux_arm64
++ #define BTHREAD_CONTEXT_CALL_CONVENTION
++ #endif
++
+ #elif defined(__APPLE__) && defined(__MACH__)
+ #if defined (__i386__)
+ #define BTHREAD_CONTEXT_PLATFORM_apple_i386
diff --git a/devel/brpc/files/patch-src_bthread_errno.cpp b/devel/brpc/files/patch-src_bthread_errno.cpp
new file mode 100644
index 000000000000..6bb3ac1718c8
--- /dev/null
+++ b/devel/brpc/files/patch-src_bthread_errno.cpp
@@ -0,0 +1,11 @@
+--- src/bthread/errno.cpp.orig 2026-02-23 02:11:29 UTC
++++ src/bthread/errno.cpp
+@@ -35,7 +35,7 @@ int *bthread_errno_location() {
+ int *bthread_errno_location() {
+ return __errno_location();
+ }
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_FREEBSD)
+
+ extern int * __error(void);
+
diff --git a/devel/brpc/files/patch-src_bthread_fd.cpp b/devel/brpc/files/patch-src_bthread_fd.cpp
new file mode 100644
index 000000000000..1e136f4c3b6f
--- /dev/null
+++ b/devel/brpc/files/patch-src_bthread_fd.cpp
@@ -0,0 +1,92 @@
+--- src/bthread/fd.cpp.orig 2026-02-23 02:11:29 UTC
++++ src/bthread/fd.cpp
+@@ -22,7 +22,7 @@
+ #include "butil/compat.h"
+ #include <new> // std::nothrow
+ #include <sys/poll.h> // poll()
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_FREEBSD)
+ #include <sys/types.h> // struct kevent
+ #include <sys/event.h> // kevent(), kqueue()
+ #endif
+@@ -133,7 +133,7 @@ class EpollThread { (public)
+ }
+ #if defined(OS_LINUX)
+ _epfd = epoll_create(epoll_size);
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_FREEBSD)
+ _epfd = kqueue();
+ #endif
+ _start_mutex.unlock();
+@@ -181,7 +181,7 @@ class EpollThread { (public)
+ epoll_event evt = { EPOLLOUT, { NULL } };
+ if (epoll_ctl(saved_epfd, EPOLL_CTL_ADD,
+ closing_epoll_pipe[1], &evt) < 0) {
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_FREEBSD)
+ struct kevent kqueue_event;
+ EV_SET(&kqueue_event, closing_epoll_pipe[1], EVFILT_WRITE, EV_ADD | EV_ENABLE,
+ 0, 0, NULL);
+@@ -257,7 +257,7 @@ class EpollThread { (public)
+ return -1;
+ }
+ # endif
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_FREEBSD)
+ struct kevent kqueue_event;
+ EV_SET(&kqueue_event, fd, events, EV_ADD | EV_ENABLE | EV_ONESHOT,
+ 0, 0, butex);
+@@ -299,7 +299,7 @@ class EpollThread { (public)
+ }
+ #if defined(OS_LINUX)
+ epoll_ctl(_epfd, EPOLL_CTL_DEL, fd, NULL);
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_FREEBSD)
+ struct kevent evt;
+ EV_SET(&evt, fd, EVFILT_WRITE, EV_DELETE, 0, 0, NULL);
+ kevent(_epfd, &evt, 1, NULL, 0, NULL);
+@@ -325,7 +325,7 @@ class EpollThread { (public)
+ const size_t MAX_EVENTS = 32;
+ #if defined(OS_LINUX)
+ epoll_event* e = new (std::nothrow) epoll_event[MAX_EVENTS];
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_FREEBSD)
+ typedef struct kevent KEVENT;
+ struct kevent* e = new (std::nothrow) KEVENT[MAX_EVENTS];
+ #endif
+@@ -343,7 +343,7 @@ class EpollThread { (public)
+ const int epfd = _epfd;
+ #if defined(OS_LINUX)
+ const int n = epoll_wait(epfd, e, MAX_EVENTS, -1);
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_FREEBSD)
+ const int n = kevent(epfd, NULL, 0, e, MAX_EVENTS, NULL);
+ #endif
+ if (_stop) {
+@@ -383,7 +383,7 @@ class EpollThread { (public)
+ EpollButex* butex = pbutex ?
+ pbutex->load(butil::memory_order_consume) : NULL;
+ # endif
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_FREEBSD)
+ EpollButex* butex = static_cast<EpollButex*>(e[i].udata);
+ #endif
+ if (butex != NULL && butex != CLOSING_GUARD) {
+@@ -495,7 +495,7 @@ int bthread_connect(int sockfd, const sockaddr* serv_a
+ }
+ #if defined(OS_LINUX)
+ if (bthread_fd_wait(sockfd, EPOLLOUT) < 0) {
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_FREEBSD)
+ if (bthread_fd_wait(sockfd, EVFILT_WRITE) < 0) {
+ #endif
+ return -1;
+@@ -531,7 +531,7 @@ int bthread_timed_connect(int sockfd, const struct soc
+ }
+ #if defined(OS_LINUX)
+ if (bthread_fd_timedwait(sockfd, EPOLLOUT, abstime) < 0) {
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_FREEBSD)
+ if (bthread_fd_timedwait(sockfd, EVFILT_WRITE, abstime) < 0) {
+ #endif
+ return -1;
diff --git a/devel/brpc/files/patch-src_bthread_mutex.cpp b/devel/brpc/files/patch-src_bthread_mutex.cpp
new file mode 100644
index 000000000000..2326578703ae
--- /dev/null
+++ b/devel/brpc/files/patch-src_bthread_mutex.cpp
@@ -0,0 +1,15 @@
+--- src/bthread/mutex.cpp.orig 2026-02-23 02:11:29 UTC
++++ src/bthread/mutex.cpp
+@@ -477,6 +477,12 @@ static void init_sys_mutex_lock() {
+ sys_pthread_mutex_lock = (MutexOp)dlsym(RTLD_NEXT, "pthread_mutex_lock");
+ sys_pthread_mutex_trylock = (MutexOp)dlsym(RTLD_NEXT, "pthread_mutex_trylock");
+ sys_pthread_mutex_unlock = (MutexOp)dlsym(RTLD_NEXT, "pthread_mutex_unlock");
++#elif defined(OS_FREEBSD)
++ sys_pthread_mutex_init = (MutexInitOp)dlsym(RTLD_NEXT, "pthread_mutex_init");
++ sys_pthread_mutex_destroy = (MutexOp)dlsym(RTLD_NEXT, "pthread_mutex_destroy");
++ sys_pthread_mutex_lock = (MutexOp)dlsym(RTLD_NEXT, "pthread_mutex_lock");
++ sys_pthread_mutex_trylock = (MutexOp)dlsym(RTLD_NEXT, "pthread_mutex_trylock");
++ sys_pthread_mutex_unlock = (MutexOp)dlsym(RTLD_NEXT, "pthread_mutex_unlock");
+ #endif
+ }
+
diff --git a/devel/brpc/files/patch-src_bthread_sys__futex.cpp b/devel/brpc/files/patch-src_bthread_sys__futex.cpp
new file mode 100644
index 000000000000..e154b008417e
--- /dev/null
+++ b/devel/brpc/files/patch-src_bthread_sys__futex.cpp
@@ -0,0 +1,11 @@
+--- src/bthread/sys_futex.cpp.orig 2026-02-23 02:11:29 UTC
++++ src/bthread/sys_futex.cpp
+@@ -25,7 +25,7 @@
+ #include <pthread.h>
+ #include <unordered_map>
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_FREEBSD)
+
+ namespace bthread {
+
diff --git a/devel/brpc/files/patch-src_bthread_sys__futex.h b/devel/brpc/files/patch-src_bthread_sys__futex.h
new file mode 100644
index 000000000000..8ae182d38e24
--- /dev/null
+++ b/devel/brpc/files/patch-src_bthread_sys__futex.h
@@ -0,0 +1,11 @@
+--- src/bthread/sys_futex.h.orig 2026-02-23 02:11:29 UTC
++++ src/bthread/sys_futex.h
+@@ -53,7 +53,7 @@ inline int futex_requeue_private(void* addr1, int nwak
+
+ } // namespace bthread
+
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_FREEBSD)
+
+ namespace bthread {
+
diff --git a/devel/brpc/files/patch-src_bthread_task__control.cpp b/devel/brpc/files/patch-src_bthread_task__control.cpp
new file mode 100644
index 000000000000..46c78e241a80
--- /dev/null
+++ b/devel/brpc/files/patch-src_bthread_task__control.cpp
@@ -0,0 +1,17 @@
+--- src/bthread/task_control.cpp.orig 2026-02-23 02:11:29 UTC
++++ src/bthread/task_control.cpp
+@@ -374,6 +374,14 @@ void TaskControl::bind_thread_to_cpu(pthread_t pthread
+ LOG(WARNING) << "Failed to bind thread to cpu: " << cpu_id;
+ }
+ (void)r;
++#elif defined(OS_FREEBSD)
++ cpuset_t cs;
++ CPU_ZERO(&cs);
++ CPU_SET(cpu_id, &cs);
++ if (cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_TID, -1,
++ sizeof(cs), &cs) != 0) {
++ LOG(WARNING) << "Failed to bind thread to cpu: " << cpu_id;
++ }
+ #elif defined(OS_MACOSX)
+ thread_port_t mach_thread = pthread_mach_thread_np(pthread);
+ if (mach_thread != MACH_PORT_NULL) {
diff --git a/devel/brpc/files/patch-src_bthread_task__group.cpp b/devel/brpc/files/patch-src_bthread_task__group.cpp
new file mode 100644
index 000000000000..b878faf3fac0
--- /dev/null
+++ b/devel/brpc/files/patch-src_bthread_task__group.cpp
@@ -0,0 +1,20 @@
+--- src/bthread/task_group.cpp.orig 2026-02-23 02:11:29 UTC
++++ src/bthread/task_group.cpp
+@@ -214,7 +214,7 @@ void TaskGroup::run_main_task() {
+ }
+ if (FLAGS_show_per_worker_usage_in_vars && !usage_bvar) {
+ char name[32];
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_FREEBSD)
+ snprintf(name, sizeof(name), "bthread_worker_usage_%" PRIu64,
+ pthread_numeric_id());
+ #else
+@@ -251,7 +251,7 @@ int PthreadAttrGetStack(void*& stack_addr, size_t& sta
+
+ #ifdef BUTIL_USE_ASAN
+ int PthreadAttrGetStack(void*& stack_addr, size_t& stack_size) {
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_FREEBSD)
+ stack_addr = pthread_get_stackaddr_np(pthread_self());
+ stack_size = pthread_get_stacksize_np(pthread_self());
+ return 0;
diff --git a/devel/brpc/files/patch-src_butil_compat.h b/devel/brpc/files/patch-src_butil_compat.h
new file mode 100644
index 000000000000..6947023c7c8c
--- /dev/null
+++ b/devel/brpc/files/patch-src_butil_compat.h
@@ -0,0 +1,22 @@
+--- src/butil/compat.h.orig 2026-02-23 02:11:29 UTC
++++ src/butil/compat.h
+@@ -66,6 +66,10 @@ __END_DECLS
+
+ #include <sys/epoll.h>
+
++#elif defined(OS_FREEBSD)
++
++#include <sys/event.h>
++
+ #else
+
+ #error "The platform does not support epoll-like APIs"
+@@ -81,6 +85,8 @@ inline uint64_t pthread_numeric_id() {
+ return id;
+ }
+ return -1;
++#elif defined(OS_FREEBSD)
++ return (uint64_t)(uintptr_t)pthread_self();
+ #else
+ return pthread_self();
+ #endif
diff --git a/devel/brpc/files/patch-src_butil_details_extended__endpoint.hpp b/devel/brpc/files/patch-src_butil_details_extended__endpoint.hpp
new file mode 100644
index 000000000000..96ba1bfff379
--- /dev/null
+++ b/devel/brpc/files/patch-src_butil_details_extended__endpoint.hpp
@@ -0,0 +1,20 @@
+--- src/butil/details/extended_endpoint.hpp.orig 2026-02-23 02:11:29 UTC
++++ src/butil/details/extended_endpoint.hpp
+@@ -163,7 +163,7 @@ class ExtendedEndPoint { (public)
+ eep->_u.in6.sin6_flowinfo = 0u;
+ eep->_u.in6.sin6_scope_id = 0u;
+ eep->_socklen = sizeof(_u.in6);
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_FREEBSD)
+ eep->_u.in6.sin6_len = eep->_socklen;
+ #endif
+ }
+@@ -177,7 +177,7 @@ class ExtendedEndPoint { (public)
+ int size = sp.copy(eep->_u.un.sun_path, sp.size());
+ eep->_u.un.sun_path[size] = '\0';
+ eep->_socklen = offsetof(sockaddr_un, sun_path) + size + 1;
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_FREEBSD)
+ eep->_u.un.sun_len = eep->_socklen;
+ #endif
+ }
diff --git a/devel/brpc/files/patch-src_butil_endpoint.cpp b/devel/brpc/files/patch-src_butil_endpoint.cpp
new file mode 100644
index 000000000000..b06b5fbfa47c
--- /dev/null
+++ b/devel/brpc/files/patch-src_butil_endpoint.cpp
@@ -0,0 +1,38 @@
+--- src/butil/endpoint.cpp.orig 2026-02-23 02:11:29 UTC
++++ src/butil/endpoint.cpp
+@@ -30,7 +30,7 @@
+ #include <memory>
+ #include <gflags/gflags.h>
+ #include <sys/poll.h>
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_FREEBSD)
+ #include <sys/event.h> // kevent(), kqueue()
+ #endif
+ #include "butil/build_config.h" // OS_MACOSX
+@@ -403,7 +403,7 @@ static short epoll_to_poll_events(uint32_t epoll_event
+ CHECK_EQ((uint32_t)poll_events, epoll_events);
+ return poll_events;
+ }
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_FREEBSD)
+ short kqueue_to_poll_events(int kqueue_events) {
+ //TODO: add more values?
+ short poll_events = 0;
+@@ -421,7 +421,7 @@ int pthread_fd_wait(int fd, unsigned events,
+ const timespec* abstime) {
+ #if defined(OS_LINUX)
+ const short poll_events = epoll_to_poll_events(events);
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_FREEBSD)
+ const short poll_events = kqueue_to_poll_events(events);
+ #endif
+ if (poll_events == 0) {
+@@ -482,7 +482,7 @@ int pthread_timed_connect(int sockfd, const struct soc
+ }
+ #if defined(OS_LINUX)
+ if (pthread_fd_wait(sockfd, EPOLLOUT, abstime) < 0) {
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_FREEBSD)
+ if (pthread_fd_wait(sockfd, EVFILT_WRITE, abstime) < 0) {
+ #endif
+ return -1;
diff --git a/devel/brpc/files/patch-src_butil_errno.cpp b/devel/brpc/files/patch-src_butil_errno.cpp
new file mode 100644
index 000000000000..ce69e0606c2d
--- /dev/null
+++ b/devel/brpc/files/patch-src_butil_errno.cpp
@@ -0,0 +1,20 @@
+--- src/butil/errno.cpp.orig 2026-02-23 02:11:29 UTC
++++ src/butil/errno.cpp
+@@ -52,7 +52,7 @@ int DescribeCustomizedErrno(
+ return -1;
+ }
+ } else {
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_FREEBSD)
+ const int rc = strerror_r(error_code, tls_error_buf, ERROR_BUFSIZE);
+ if (rc != EINVAL)
+ #else
+@@ -79,7 +79,7 @@ const char* berror(int error_code) {
+ if (s) {
+ return s;
+ }
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_FREEBSD)
+ const int rc = strerror_r(error_code, butil::tls_error_buf, butil::ERROR_BUFSIZE);
+ if (rc == 0 || rc == ERANGE/*bufsize is not long enough*/) {
+ return butil::tls_error_buf;
diff --git a/devel/brpc/files/patch-src_butil_fd__utility.cpp b/devel/brpc/files/patch-src_butil_fd__utility.cpp
new file mode 100644
index 000000000000..3f90a1140d16
--- /dev/null
+++ b/devel/brpc/files/patch-src_butil_fd__utility.cpp
@@ -0,0 +1,29 @@
+--- src/butil/fd_utility.cpp.orig 2026-02-23 02:11:29 UTC
++++ src/butil/fd_utility.cpp
+@@ -24,7 +24,7 @@
+ #include <sys/socket.h> // setsockopt
+ #include <netinet/tcp.h> // TCP_NODELAY
+ #include <netinet/tcp.h>
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_FREEBSD)
+ #include <netinet/tcp_fsm.h> // TCPS_ESTABLISHED, TCP6S_ESTABLISHED
+ #endif
+ #include "butil/logging.h"
+@@ -88,6 +88,17 @@ int is_connected(int sockfd) {
+ return -1;
+ }
+ if (ti.tcpi_state != TCP_ESTABLISHED) {
++ errno = ENOTCONN;
++ return -1;
++ }
++#elif defined(OS_FREEBSD)
++ struct tcp_info ti{};
++ socklen_t len = sizeof(ti);
++ if (getsockopt(sockfd, IPPROTO_TCP, TCP_INFO, &ti, &len) < 0) {
++ PLOG(FATAL) << "Fail to getsockopt";
++ return -1;
++ }
++ if (ti.tcpi_state != TCPS_ESTABLISHED) {
+ errno = ENOTCONN;
+ return -1;
+ }
diff --git a/devel/brpc/files/patch-src_butil_logging.cc b/devel/brpc/files/patch-src_butil_logging.cc
new file mode 100644
index 000000000000..b5a612d39966
--- /dev/null
+++ b/devel/brpc/files/patch-src_butil_logging.cc
@@ -0,0 +1,44 @@
+--- src/butil/logging.cc.orig 2026-02-23 02:11:29 UTC
++++ src/butil/logging.cc
+@@ -129,6 +129,16 @@ BUTIL_VALIDATE_GFLAG(print_stack_on_check, butil::Pass
+ "Print the stack trace when a CHECK was failed");
+ BUTIL_VALIDATE_GFLAG(print_stack_on_check, butil::PassValidate);
+
++#if defined(OS_FREEBSD)
++// Rename flags to avoid gflags duplicate registration with system glog.
++// glog defines "v" and "vmodule"; we define "brpc_verbose" and "brpc_vmodule"
++// and create local aliases so brpc code can still use FLAGS_v / FLAGS_vmodule.
++DEFINE_int32(brpc_verbose, 0, "Show all VLOG(m) messages for m <= this."
++ " Overridable by --brpc_vmodule.");
++DEFINE_string(brpc_vmodule, "", "per-module verbose level.");
++#define FLAGS_v FLAGS_brpc_verbose
++#define FLAGS_vmodule FLAGS_brpc_vmodule
++#else
+ DEFINE_int32(v, 0, "Show all VLOG(m) messages for m <= this."
+ " Overridable by --vmodule.");
+ DEFINE_string(vmodule, "", "per-module verbose level."
+@@ -136,15 +146,24 @@ DEFINE_string(vmodule, "", "per-module verbose level."
+ " MODULE_NAME is a glob pattern, matched against the filename base"
+ " (that is, name ignoring .cpp/.h)."
+ " LOG_LEVEL overrides any value given by --v.");
++#endif
+
+ DEFINE_bool(log_pid, false, "Log process id");
+
+ DEFINE_bool(log_bid, true, "Log bthread id");
+
++#if defined(OS_FREEBSD)
++DEFINE_int32(brpc_minloglevel, 0, "Any log at or above this level will be "
++ "displayed. Anything below this level will be silently ignored. "
++ "0=INFO 1=NOTICE 2=WARNING 3=ERROR 4=FATAL");
++BUTIL_VALIDATE_GFLAG(brpc_minloglevel, butil::NonNegativeInteger);
++#define FLAGS_minloglevel FLAGS_brpc_minloglevel
++#else
+ DEFINE_int32(minloglevel, 0, "Any log at or above this level will be "
+ "displayed. Anything below this level will be silently ignored. "
+ "0=INFO 1=NOTICE 2=WARNING 3=ERROR 4=FATAL");
+ BUTIL_VALIDATE_GFLAG(minloglevel, butil::NonNegativeInteger);
++#endif
+
+ DEFINE_bool(log_hostname, false, "Add host after pid in each log so"
+ " that we know where logs came from when using aggregation tools"
diff --git a/devel/brpc/files/patch-src_butil_popen.cpp b/devel/brpc/files/patch-src_butil_popen.cpp
new file mode 100644
index 000000000000..63ef91391a0a
--- /dev/null
+++ b/devel/brpc/files/patch-src_butil_popen.cpp
@@ -0,0 +1,12 @@
+--- src/butil/popen.cpp.orig 2026-02-23 02:11:29 UTC
++++ src/butil/popen.cpp
+@@ -20,6 +20,9 @@
+ #include <gflags/gflags.h>
+ #include "butil/build_config.h"
+ #include "butil/logging.h"
++#if defined(OS_FREEBSD)
++#include <sys/wait.h>
++#endif
+
+ #if defined(OS_LINUX)
+ // clone is a linux specific syscall
diff --git a/devel/brpc/files/patch-src_butil_process__util.cc b/devel/brpc/files/patch-src_butil_process__util.cc
new file mode 100644
index 000000000000..5f6e287ab510
--- /dev/null
+++ b/devel/brpc/files/patch-src_butil_process__util.cc
@@ -0,0 +1,38 @@
+--- src/butil/process_util.cc.orig 2026-02-23 02:11:29 UTC
++++ src/butil/process_util.cc
+@@ -31,7 +31,10 @@
+ #include "butil/process_util.h"
+
+ #if defined(OS_MACOSX)
+-#include <libproc.h> // proc_pidpath
++#include <libproc.h>
++#elif defined(OS_FREEBSD)
++#include <sys/types.h>
++#include <sys/sysctl.h> // proc_pidpath
+ #endif
+ namespace butil {
+
+@@ -47,7 +50,7 @@ ssize_t ReadCommandLine(char* buf, size_t len, bool wi
+ LOG(ERROR) << "Fail to read /proc/self/cmdline";
+ return -1;
+ }
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_FREEBSD)
+ static pid_t pid = getpid();
+ std::ostringstream oss;
+ char cmdbuf[32];
+@@ -97,6 +100,14 @@ ssize_t GetProcessAbsolutePath(char *buf, size_t len)
+ memset(buf, 0, len);
+ int ret = proc_pidpath(getpid(), buf, len);
+ return ret;
++#elif defined(OS_FREEBSD)
++ memset(buf, 0, len);
++ int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1};
++ size_t cb = len;
++ if (sysctl(mib, 4, buf, &cb, NULL, 0) == 0) {
++ return (ssize_t)cb;
++ }
++ return -1;
+ #endif
+ }
+
diff --git a/devel/brpc/files/patch-src_butil_threading_platform__thread__freebsd.cc b/devel/brpc/files/patch-src_butil_threading_platform__thread__freebsd.cc
new file mode 100644
index 000000000000..e2909b694231
--- /dev/null
+++ b/devel/brpc/files/patch-src_butil_threading_platform__thread__freebsd.cc
@@ -0,0 +1,18 @@
+--- src/butil/threading/platform_thread_freebsd.cc.orig 2026-02-23 02:11:29 UTC
++++ src/butil/threading/platform_thread_freebsd.cc
+@@ -13,7 +13,6 @@
+ #include "butil/safe_strerror_posix.h"
+ #include "butil/threading/thread_id_name_manager.h"
+ #include "butil/threading/thread_restrictions.h"
+-#include "butil/tracked_objects.h"
+
+ #if !defined(OS_NACL)
+ #include <sys/resource.h>
+@@ -46,7 +45,6 @@ void PlatformThread::SetName(const char* name) {
+ // static
+ void PlatformThread::SetName(const char* name) {
+ ThreadIdNameManager::GetInstance()->SetName(CurrentId(), name);
+- tracked_objects::ThreadData::InitializeThreadContext(name);
+
+ SetNameSimple(name);
+ }
diff --git a/devel/brpc/files/patch-src_bvar_default__variables.cpp b/devel/brpc/files/patch-src_bvar_default__variables.cpp
new file mode 100644
index 000000000000..afa9b7871d65
--- /dev/null
+++ b/devel/brpc/files/patch-src_bvar_default__variables.cpp
@@ -0,0 +1,12 @@
+--- src/bvar/default_variables.cpp.orig 2026-02-23 02:11:29 UTC
++++ src/bvar/default_variables.cpp
+@@ -449,6 +449,9 @@ static bool read_proc_io(ProcIO* s) {
+ return false;
+ }
+ return true;
++#elif defined(OS_FREEBSD)
++ memset(s, 0, sizeof(ProcIO));
++ return false;
+ #elif defined(OS_MACOSX)
+ // TODO(zhujiashun): get rchar, wchar, syscr, syscw, cancelled_write_bytes
+ // in MacOS.
diff --git a/devel/brpc/pkg-descr b/devel/brpc/pkg-descr
new file mode 100644
index 000000000000..ed88308a0bd0
--- /dev/null
+++ b/devel/brpc/pkg-descr
@@ -0,0 +1,9 @@
+Apache bRPC is an Industrial-grade RPC framework using C++ Language,
+which is often used in high performance systems such as Search, Storage,
+Machine Learning, Advertisement, Recommendation etc.
+
+bRPC includes:
+- brpc: RPC framework with rich protocols (HTTP/2, gRPC, Thrift, etc.)
+- bthread: M:N threading library with work-stealing scheduler
+- bvar: Multi-threaded counters and statistics
+- butil: Utility library (logging, containers, synchronization)
diff --git a/devel/brpc/pkg-plist b/devel/brpc/pkg-plist
new file mode 100644
index 000000000000..8161d2a40f27
--- /dev/null
+++ b/devel/brpc/pkg-plist
@@ -0,0 +1,541 @@
+bin/parallel_http
+bin/rpc_press
+bin/rpc_replay
+bin/rpc_view
+bin/trackme_server
+include/brpc/acceptor.h
+include/brpc/adaptive_connection_type.h
+include/brpc/adaptive_max_concurrency.h
+include/brpc/adaptive_protocol_type.h
+include/brpc/amf.h
+include/brpc/amf_inl.h
+include/brpc/authenticator.h
+include/brpc/backup_request_policy.h
+include/brpc/baidu_master_service.h
+include/brpc/builtin/bad_method_service.h
+include/brpc/builtin/bthreads_service.h
+include/brpc/builtin/common.h
+include/brpc/builtin/connections_service.h
+include/brpc/builtin/dir_service.h
+include/brpc/builtin/flags_service.h
+include/brpc/builtin/flot_min_js.h
+include/brpc/builtin/get_favicon_service.h
+include/brpc/builtin/get_js_service.h
+include/brpc/builtin/grpc_health_check_service.h
+include/brpc/builtin/health_service.h
+include/brpc/builtin/hotspots_service.h
+include/brpc/builtin/ids_service.h
+include/brpc/builtin/index_service.h
+include/brpc/builtin/jquery_min_js.h
+include/brpc/builtin/list_service.h
+include/brpc/builtin/memory_service.h
+include/brpc/builtin/pprof_perl.h
+include/brpc/builtin/pprof_service.h
+include/brpc/builtin/prometheus_metrics_service.h
+include/brpc/builtin/protobufs_service.h
+include/brpc/builtin/rpcz_service.h
+include/brpc/builtin/sockets_service.h
+include/brpc/builtin/sorttable_js.h
+include/brpc/builtin/status_service.h
+include/brpc/builtin/tabbed.h
+include/brpc/builtin/threads_service.h
+include/brpc/builtin/vars_service.h
+include/brpc/builtin/version_service.h
+include/brpc/builtin/viz_min_js.h
+include/brpc/builtin/vlog_service.h
+include/brpc/builtin_service.pb.h
+include/brpc/callback.h
+include/brpc/channel.h
+include/brpc/channel_base.h
+include/brpc/checksum.h
+include/brpc/circuit_breaker.h
+include/brpc/closure_guard.h
+include/brpc/cluster_recover_policy.h
+include/brpc/compress.h
+include/brpc/concurrency_limiter.h
+include/brpc/controller.h
+include/brpc/coroutine.h
+include/brpc/coroutine_inl.h
+include/brpc/couchbase.h
+include/brpc/data_factory.h
+include/brpc/describable.h
+include/brpc/destroyable.h
+include/brpc/details/controller_private_accessor.h
+include/brpc/details/has_epollrdhup.h
+include/brpc/details/health_check.h
+include/brpc/details/hpack-static-table.h
+include/brpc/details/hpack.h
+include/brpc/details/http_message.h
+include/brpc/details/http_parser.h
+include/brpc/details/jemalloc_profiler.h
+include/brpc/details/load_balancer_with_naming.h
+include/brpc/details/method_status.h
+include/brpc/details/naming_service_thread.h
+include/brpc/details/profiler_linker.h
+include/brpc/details/rtmp_utils.h
+include/brpc/details/server_private_accessor.h
+include/brpc/details/sparse_minute_counter.h
+include/brpc/details/ssl_helper.h
+include/brpc/details/tcmalloc_extension.h
+include/brpc/details/usercode_backup_pool.h
+include/brpc/errno.pb.h
+include/brpc/esp_head.h
+include/brpc/esp_message.h
+include/brpc/event_dispatcher.h
+include/brpc/excluded_servers.h
+include/brpc/extension.h
+include/brpc/extension_inl.h
+include/brpc/get_favicon.pb.h
+include/brpc/get_js.pb.h
+include/brpc/global.h
+include/brpc/grpc.h
+include/brpc/grpc_health_check.pb.h
+include/brpc/health_check_option.h
+include/brpc/health_reporter.h
+include/brpc/http2.h
+include/brpc/http_header.h
+include/brpc/http_method.h
+include/brpc/http_status_code.h
+include/brpc/input_message_base.h
+include/brpc/input_messenger.h
+include/brpc/interceptor.h
+include/brpc/kvmap.h
+include/brpc/load_balancer.h
+include/brpc/log.h
+include/brpc/memcache.h
+include/brpc/mongo_head.h
+include/brpc/mongo_service_adaptor.h
+include/brpc/naming_service.h
+include/brpc/naming_service_filter.h
+include/brpc/nonreflectable_message.h
+include/brpc/nshead.h
+include/brpc/nshead_message.h
+include/brpc/nshead_meta.pb.h
+include/brpc/nshead_pb_service_adaptor.h
+include/brpc/nshead_service.h
+include/brpc/options.pb.h
+include/brpc/parallel_channel.h
+include/brpc/parse_result.h
+include/brpc/partition_channel.h
+include/brpc/pb_compat.h
+include/brpc/periodic_naming_service.h
+include/brpc/periodic_task.h
+include/brpc/policy/auto_concurrency_limiter.h
+include/brpc/policy/baidu_naming_service.h
+include/brpc/policy/baidu_rpc_meta.pb.h
+include/brpc/policy/baidu_rpc_protocol.h
+include/brpc/policy/consistent_hashing_load_balancer.h
+include/brpc/policy/constant_concurrency_limiter.h
+include/brpc/policy/consul_naming_service.h
+include/brpc/policy/couchbase_authenticator.h
+include/brpc/policy/couchbase_protocol.h
+include/brpc/policy/crc32c_checksum.h
+include/brpc/policy/dh.h
+include/brpc/policy/discovery_naming_service.h
+include/brpc/policy/domain_naming_service.h
+include/brpc/policy/dynpart_load_balancer.h
+include/brpc/policy/esp_authenticator.h
+include/brpc/policy/esp_protocol.h
+include/brpc/policy/file_naming_service.h
+include/brpc/policy/giano_authenticator.h
+include/brpc/policy/gzip_compress.h
+include/brpc/policy/hasher.h
+include/brpc/policy/http2_rpc_protocol.h
+include/brpc/policy/http_rpc_protocol.h
+include/brpc/policy/hulu_pbrpc_controller.h
+include/brpc/policy/hulu_pbrpc_meta.pb.h
+include/brpc/policy/hulu_pbrpc_protocol.h
+include/brpc/policy/list_naming_service.h
+include/brpc/policy/locality_aware_load_balancer.h
+include/brpc/policy/memcache_binary_header.h
+include/brpc/policy/memcache_binary_protocol.h
+include/brpc/policy/mongo.pb.h
+include/brpc/policy/mongo_protocol.h
+include/brpc/policy/most_common_message.h
+include/brpc/policy/nacos_naming_service.h
+include/brpc/policy/nova_pbrpc_protocol.h
+include/brpc/policy/nshead_mcpack_protocol.h
+include/brpc/policy/nshead_protocol.h
+include/brpc/policy/public_pbrpc_meta.pb.h
+include/brpc/policy/public_pbrpc_protocol.h
+include/brpc/policy/randomized_load_balancer.h
+include/brpc/policy/redis_authenticator.h
+include/brpc/policy/redis_protocol.h
+include/brpc/policy/remote_file_naming_service.h
+include/brpc/policy/round_robin_load_balancer.h
+include/brpc/policy/rtmp_protocol.h
+include/brpc/policy/snappy_compress.h
+include/brpc/policy/sofa_pbrpc_meta.pb.h
+include/brpc/policy/sofa_pbrpc_protocol.h
+include/brpc/policy/streaming_rpc_protocol.h
+include/brpc/policy/thrift_protocol.h
+include/brpc/policy/timeout_concurrency_limiter.h
+include/brpc/policy/ubrpc2pb_protocol.h
+include/brpc/policy/weighted_randomized_load_balancer.h
+include/brpc/policy/weighted_round_robin_load_balancer.h
+include/brpc/progressive_attachment.h
+include/brpc/progressive_reader.h
+include/brpc/proto_base.pb.h
+include/brpc/protocol.h
+include/brpc/rdma/block_pool.h
+include/brpc/rdma/rdma_endpoint.h
+include/brpc/rdma/rdma_helper.h
+include/brpc/redis.h
+include/brpc/redis_command.h
+include/brpc/redis_reply.h
+include/brpc/reloadable_flags.h
+include/brpc/restful.h
+include/brpc/retry_policy.h
+include/brpc/rpc_dump.h
+include/brpc/rpc_dump.pb.h
+include/brpc/rpc_pb_message_factory.h
+include/brpc/rtmp.h
+include/brpc/rtmp.pb.h
+include/brpc/selective_channel.h
+include/brpc/serialized_request.h
+include/brpc/serialized_response.h
+include/brpc/server.h
+include/brpc/server_id.h
+include/brpc/server_node.h
+include/brpc/shared_object.h
+include/brpc/simple_data_pool.h
+include/brpc/socket.h
+include/brpc/socket_id.h
+include/brpc/socket_inl.h
+include/brpc/socket_map.h
+include/brpc/socket_message.h
+include/brpc/span.h
+include/brpc/span.pb.h
+include/brpc/ssl_options.h
+include/brpc/stream.h
+include/brpc/stream_creator.h
+include/brpc/stream_impl.h
+include/brpc/streaming_rpc_meta.pb.h
+include/brpc/thrift_message.h
+include/brpc/thrift_service.h
+include/brpc/traceprintf.h
+include/brpc/trackme.h
+include/brpc/trackme.pb.h
+include/brpc/ts.h
+include/brpc/uri.h
+include/brpc/versioned_ref_with_id.h
+include/bthread/bthread.h
+include/bthread/butex.h
+include/bthread/comlog_initializer.h
+include/bthread/condition_variable.h
+include/bthread/context.h
+include/bthread/countdown_event.h
+include/bthread/errno.h
+include/bthread/execution_queue.h
+include/bthread/execution_queue_inl.h
+include/bthread/id.h
+include/bthread/interrupt_pthread.h
+include/bthread/list_of_abafree_id.h
+include/bthread/log.h
+include/bthread/mutex.h
+include/bthread/parking_lot.h
+include/bthread/prime_offset.h
+include/bthread/processor.h
+include/bthread/remote_task_queue.h
+include/bthread/rwlock.h
+include/bthread/singleton_on_bthread_once.h
+include/bthread/stack.h
+include/bthread/stack_inl.h
+include/bthread/sys_futex.h
+include/bthread/task_control.h
+include/bthread/task_group.h
+include/bthread/task_group_inl.h
+include/bthread/task_meta.h
+include/bthread/task_tracer.h
+include/bthread/timer_thread.h
+include/bthread/types.h
+include/bthread/unstable.h
+include/bthread/work_stealing_queue.h
+include/butil/arena.h
+include/butil/at_exit.h
+include/butil/atomic_ref_count.h
+include/butil/atomic_sequence_num.h
+include/butil/atomicops.h
+include/butil/atomicops_internals_arm64_gcc.h
+include/butil/atomicops_internals_arm_gcc.h
+include/butil/atomicops_internals_atomicword_compat.h
+include/butil/atomicops_internals_gcc.h
+include/butil/atomicops_internals_loongarch64_gcc.h
+include/butil/atomicops_internals_mac.h
+include/butil/atomicops_internals_mips_gcc.h
+include/butil/atomicops_internals_riscv_gcc.h
+include/butil/atomicops_internals_tsan.h
+include/butil/atomicops_internals_x86_gcc.h
+include/butil/atomicops_internals_x86_msvc.h
+include/butil/auto_reset.h
+include/butil/base64.h
+include/butil/base64url.h
+include/butil/base_export.h
+include/butil/basictypes.h
+include/butil/big_endian.h
+include/butil/binary_printer.h
+include/butil/bit_array.h
+include/butil/bits.h
+include/butil/build_config.h
+include/butil/cancelable_callback.h
+include/butil/class_name.h
+include/butil/comlog_sink.h
+include/butil/compat.h
+include/butil/compiler_specific.h
+include/butil/config.h
+include/butil/containers/bounded_queue.h
+include/butil/containers/case_ignored_flat_map.h
+include/butil/containers/doubly_buffered_data.h
+include/butil/containers/flat_map.h
+include/butil/containers/flat_map_inl.h
+include/butil/containers/hash_tables.h
+include/butil/containers/linked_list.h
+include/butil/containers/mpsc_queue.h
+include/butil/containers/mru_cache.h
+include/butil/containers/optional.h
+include/butil/containers/pooled_map.h
+include/butil/containers/scoped_ptr_hash_map.h
+include/butil/containers/small_map.h
+include/butil/containers/stack_container.h
+include/butil/cpu.h
+include/butil/crc32c.h
+include/butil/debug/address_annotations.h
+include/butil/debug/alias.h
+include/butil/debug/asan_invalid_access.h
+include/butil/debug/crash_logging.h
+include/butil/debug/debugger.h
+include/butil/debug/dump_without_crashing.h
+include/butil/debug/leak_annotations.h
+include/butil/debug/leak_tracker.h
+include/butil/debug/proc_maps_linux.h
+include/butil/debug/stack_trace.h
+include/butil/details/extended_endpoint.hpp
+include/butil/endpoint.h
+include/butil/environment.h
+include/butil/errno.h
+include/butil/fast_rand.h
+include/butil/fd_guard.h
+include/butil/fd_utility.h
+include/butil/file_descriptor_posix.h
+include/butil/file_util.h
+include/butil/files/dir_reader_fallback.h
+include/butil/files/dir_reader_linux.h
+include/butil/files/dir_reader_posix.h
+include/butil/files/dir_reader_unix.h
+include/butil/files/fd_guard.h
+include/butil/files/file.h
+include/butil/files/file_enumerator.h
+include/butil/files/file_path.h
+include/butil/files/file_watcher.h
+include/butil/files/memory_mapped_file.h
+include/butil/files/scoped_file.h
+include/butil/files/scoped_temp_dir.h
+include/butil/files/temp_file.h
+include/butil/find_cstr.h
+include/butil/float_util.h
+include/butil/format_macros.h
+include/butil/gperftools_profiler.h
+include/butil/gtest_prod_util.h
+include/butil/guid.h
+include/butil/hash.h
+include/butil/intrusive_ptr.hpp
+include/butil/iobuf.h
+include/butil/iobuf_inl.h
+include/butil/iobuf_profiler.h
+include/butil/lazy_instance.h
+include/butil/location.h
+include/butil/logging.h
+include/butil/mac/bundle_locations.h
+include/butil/mac/foundation_util.h
+include/butil/mac/scoped_cftyperef.h
+include/butil/mac/scoped_mach_port.h
+include/butil/mac/scoped_typeref.h
+include/butil/macros.h
+include/butil/memory/aligned_memory.h
+include/butil/memory/linked_ptr.h
+include/butil/memory/manual_constructor.h
+include/butil/memory/raw_scoped_refptr_mismatch_checker.h
+include/butil/memory/ref_counted.h
+include/butil/memory/ref_counted_memory.h
+include/butil/memory/scope_guard.h
+include/butil/memory/scoped_open_process.h
+include/butil/memory/scoped_policy.h
+include/butil/memory/scoped_ptr.h
+include/butil/memory/scoped_vector.h
+include/butil/memory/singleton.h
+include/butil/memory/singleton_objc.h
+include/butil/memory/singleton_on_pthread_once.h
+include/butil/memory/weak_ptr.h
+include/butil/move.h
+include/butil/numerics/safe_conversions.h
+include/butil/numerics/safe_conversions_impl.h
+include/butil/numerics/safe_math.h
+include/butil/numerics/safe_math_impl.h
+include/butil/object_pool.h
+include/butil/object_pool_inl.h
+include/butil/observer_list.h
+include/butil/popen.h
+include/butil/port.h
+include/butil/posix/eintr_wrapper.h
+include/butil/posix/file_descriptor_shuffle.h
+include/butil/posix/global_descriptors.h
+include/butil/process_util.h
+include/butil/ptr_container.h
+include/butil/rand_util.h
+include/butil/raw_pack.h
+include/butil/reader_writer.h
+include/butil/recordio.h
+include/butil/reloadable_flags.h
+include/butil/resource_pool.h
+include/butil/resource_pool_inl.h
+include/butil/safe_strerror_posix.h
+include/butil/scoped_clear_errno.h
+include/butil/scoped_generic.h
+include/butil/scoped_lock.h
+include/butil/scoped_observer.h
+include/butil/sha1.h
+include/butil/shared_object.h
+include/butil/single_iobuf.h
+include/butil/single_threaded_pool.h
+include/butil/ssl_compat.h
+include/butil/status.h
+include/butil/stl_util.h
+include/butil/string_printf.h
+include/butil/string_splitter.h
+include/butil/string_splitter_inl.h
+include/butil/strings/latin1_string_conversions.h
+include/butil/strings/nullable_string16.h
+include/butil/strings/safe_sprintf.h
+include/butil/strings/string16.h
+include/butil/strings/string_number_conversions.h
+include/butil/strings/string_piece.h
+include/butil/strings/string_split.h
+include/butil/strings/string_tokenizer.h
+include/butil/strings/string_util.h
+include/butil/strings/string_util_posix.h
+include/butil/strings/stringize_macros.h
+include/butil/strings/stringprintf.h
+include/butil/strings/sys_string_conversions.h
+include/butil/strings/utf_offset_string_conversions.h
+include/butil/strings/utf_string_conversion_utils.h
+include/butil/strings/utf_string_conversions.h
+include/butil/synchronization/cancellation_flag.h
+include/butil/synchronization/condition_variable.h
+include/butil/synchronization/lock.h
+include/butil/synchronization/spin_wait.h
+include/butil/synchronization/waitable_event.h
+include/butil/synchronous_event.h
+include/butil/sys_byteorder.h
+include/butil/third_party/dmg_fp/dmg_fp.h
+include/butil/third_party/dynamic_annotations/dynamic_annotations.h
+include/butil/third_party/icu/icu_utf.h
+include/butil/third_party/modp_b64/modp_b64.h
+include/butil/third_party/modp_b64/modp_b64_data.h
+include/butil/third_party/murmurhash3/murmurhash3.h
+include/butil/third_party/rapidjson/allocators.h
+include/butil/third_party/rapidjson/document.h
+include/butil/third_party/rapidjson/encodedstream.h
+include/butil/third_party/rapidjson/encodings.h
+include/butil/third_party/rapidjson/error/en.h
+include/butil/third_party/rapidjson/error/error.h
+include/butil/third_party/rapidjson/filereadstream.h
+include/butil/third_party/rapidjson/filewritestream.h
+include/butil/third_party/rapidjson/internal/biginteger.h
+include/butil/third_party/rapidjson/internal/diyfp.h
+include/butil/third_party/rapidjson/internal/dtoa.h
+include/butil/third_party/rapidjson/internal/ieee754.h
+include/butil/third_party/rapidjson/internal/itoa.h
+include/butil/third_party/rapidjson/internal/meta.h
+include/butil/third_party/rapidjson/internal/pow10.h
+include/butil/third_party/rapidjson/internal/stack.h
+include/butil/third_party/rapidjson/internal/strfunc.h
+include/butil/third_party/rapidjson/internal/strtod.h
+include/butil/third_party/rapidjson/memorybuffer.h
+include/butil/third_party/rapidjson/memorystream.h
+include/butil/third_party/rapidjson/msinttypes/inttypes.h
+include/butil/third_party/rapidjson/msinttypes/stdint.h
+include/butil/third_party/rapidjson/optimized_writer.h
+include/butil/third_party/rapidjson/pointer.h
+include/butil/third_party/rapidjson/prettywriter.h
+include/butil/third_party/rapidjson/rapidjson.h
+include/butil/third_party/rapidjson/reader.h
+include/butil/third_party/rapidjson/stringbuffer.h
+include/butil/third_party/rapidjson/writer.h
+include/butil/third_party/snappy/snappy-internal.h
+include/butil/third_party/snappy/snappy-sinksource.h
+include/butil/third_party/snappy/snappy-stubs-internal.h
+include/butil/third_party/snappy/snappy.h
+include/butil/third_party/symbolize/config.h
+include/butil/third_party/symbolize/demangle.h
+include/butil/third_party/symbolize/glog/logging.h
+include/butil/third_party/symbolize/glog/raw_logging.h
+include/butil/third_party/symbolize/symbolize.h
+include/butil/third_party/symbolize/utilities.h
+include/butil/third_party/valgrind/valgrind.h
+include/butil/thread_key.h
+include/butil/thread_local.h
+include/butil/thread_local_inl.h
+include/butil/threading/non_thread_safe.h
+include/butil/threading/non_thread_safe_impl.h
+include/butil/threading/platform_thread.h
+include/butil/threading/simple_thread.h
+include/butil/threading/thread_checker.h
+include/butil/threading/thread_checker_impl.h
+include/butil/threading/thread_collision_warner.h
+include/butil/threading/thread_id_name_manager.h
+include/butil/threading/thread_local.h
+include/butil/threading/thread_local_storage.h
+include/butil/threading/thread_restrictions.h
+include/butil/threading/watchdog.h
+include/butil/time.h
+include/butil/time/clock.h
+include/butil/time/default_clock.h
+include/butil/time/default_tick_clock.h
+include/butil/time/tick_clock.h
+include/butil/time/time.h
+include/butil/type_traits.h
+include/butil/unique_ptr.h
+include/butil/unix_socket.h
+include/butil/version.h
+include/butil/zero_copy_stream_as_streambuf.h
+include/bvar/bvar.h
+include/bvar/collector.h
+include/bvar/detail/agent_group.h
+include/bvar/detail/call_op_returning_void.h
+include/bvar/detail/combiner.h
+include/bvar/detail/is_atomical.h
+include/bvar/detail/percentile.h
+include/bvar/detail/sampler.h
+include/bvar/detail/series.h
+include/bvar/gflag.h
+include/bvar/latency_recorder.h
+include/bvar/multi_dimension.h
+include/bvar/multi_dimension_inl.h
+include/bvar/mvariable.h
+include/bvar/passive_status.h
+include/bvar/recorder.h
+include/bvar/reducer.h
+include/bvar/scoped_timer.h
+include/bvar/status.h
+include/bvar/utils/lock_timer.h
+include/bvar/variable.h
+include/bvar/vector.h
+include/bvar/window.h
+include/idl_options.pb.h
+include/json2pb/encode_decode.h
+include/json2pb/json_to_pb.h
+include/json2pb/pb_to_json.h
+include/json2pb/protobuf_map.h
+include/json2pb/protobuf_type_resolver.h
+include/json2pb/rapidjson.h
+include/json2pb/zero_copy_stream_reader.h
+include/json2pb/zero_copy_stream_writer.h
+include/mcpack2pb/field_type.h
+include/mcpack2pb/mcpack2pb.h
+include/mcpack2pb/parser-inl.h
+include/mcpack2pb/parser.h
+include/mcpack2pb/serializer-inl.h
+include/mcpack2pb/serializer.h
+lib/libbrpc.a
+libdata/pkgconfig/brpc.pc
+@dir include/butil/third_party/superfasthash