diff options
| author | Vanilla I. Shu <vanilla@FreeBSD.org> | 2026-05-01 14:22:23 +0000 |
|---|---|---|
| committer | Vanilla I. Shu <vanilla@FreeBSD.org> | 2026-05-01 14:23:23 +0000 |
| commit | a4a400be07ce2161f12997a32a11c3cf46a9dde5 (patch) | |
| tree | 81258a070e9e29b6a54f0134cd0adab51b4381d9 | |
| parent | 902fcfa4ee5d1f946fb3ada040d4744ba9f4406b (diff) | |
devel/brpc: add new ports.
PR: 293396
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 |
