Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 01 May 2026 14:23:31 +0000
From:      Vanilla I. Shu <vanilla@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: a4a400be07ce - main - devel/brpc: add new ports.
Message-ID:  <69f4b763.44b9b.32803be5@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by vanilla:

URL: https://cgit.FreeBSD.org/ports/commit/?id=a4a400be07ce2161f12997a32a11c3cf46a9dde5

commit a4a400be07ce2161f12997a32a11c3cf46a9dde5
Author:     Vanilla I. Shu <vanilla@FreeBSD.org>
AuthorDate: 2026-05-01 14:22:23 +0000
Commit:     Vanilla I. Shu <vanilla@FreeBSD.org>
CommitDate: 2026-05-01 14:23:23 +0000

    devel/brpc: add new ports.
    
    PR:             293396
---
 devel/Makefile                                     |   1 +
 devel/brpc/Makefile                                |  41 ++
 devel/brpc/distinfo                                |   3 +
 devel/brpc/files/patch-CMakeLists.txt              |  49 ++
 devel/brpc/files/patch-src_brpc_controller.cpp     |  11 +
 .../files/patch-src_brpc_event__dispatcher.cpp     |  11 +
 ...tch-src_brpc_policy_domain__naming__service.cpp |  11 +
 devel/brpc/files/patch-src_brpc_socket.cpp         | 124 +++++
 devel/brpc/files/patch-src_bthread_context.h       |  18 +
 devel/brpc/files/patch-src_bthread_errno.cpp       |  11 +
 devel/brpc/files/patch-src_bthread_fd.cpp          |  92 ++++
 devel/brpc/files/patch-src_bthread_mutex.cpp       |  15 +
 devel/brpc/files/patch-src_bthread_sys__futex.cpp  |  11 +
 devel/brpc/files/patch-src_bthread_sys__futex.h    |  11 +
 .../brpc/files/patch-src_bthread_task__control.cpp |  17 +
 devel/brpc/files/patch-src_bthread_task__group.cpp |  20 +
 devel/brpc/files/patch-src_butil_compat.h          |  22 +
 .../patch-src_butil_details_extended__endpoint.hpp |  20 +
 devel/brpc/files/patch-src_butil_endpoint.cpp      |  38 ++
 devel/brpc/files/patch-src_butil_errno.cpp         |  20 +
 devel/brpc/files/patch-src_butil_fd__utility.cpp   |  29 ++
 devel/brpc/files/patch-src_butil_logging.cc        |  44 ++
 devel/brpc/files/patch-src_butil_popen.cpp         |  12 +
 devel/brpc/files/patch-src_butil_process__util.cc  |  38 ++
 ...rc_butil_threading_platform__thread__freebsd.cc |  18 +
 .../files/patch-src_bvar_default__variables.cpp    |  12 +
 devel/brpc/pkg-descr                               |   9 +
 devel/brpc/pkg-plist                               | 541 +++++++++++++++++++++
 28 files changed, 1249 insertions(+)

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
*** 479 LINES SKIPPED ***


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69f4b763.44b9b.32803be5>