From nobody Fri May 1 14:23:31 2026 X-Original-To: dev-commits-ports-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4g6YDg4Z0Vz6bX0g for ; Fri, 01 May 2026 14:23:31 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4g6YDg1st6z3VtF for ; Fri, 01 May 2026 14:23:31 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1777645411; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=B6EXeGNRshrEYsE3GoESxRmSqDeNNXE5v0XgUY9Hcu0=; b=NQNz+zPKxVVZjajBbGqQGZwyJL4SvgquWXLqBnIkP+CcYKWXGmXWoLqW6qsiw1StKZp+RV 7sDnYSciL5WFd0fRYBDW3jmntngCrm9ZSIqyiHh7eR+XLZMVjT4X78fCscjRJes3a5QmUT p4lwTg5a+rQ6rvoqmY81IN0IYtfVwOryMWkSbtn3v+aH1ZxzRxD4C+wHC19wi3ng37AZtg uLJNc99DIKoYSgfp+F5AqPeD+JsbSEMvgobfev2xOx9VoCZ2F0ROOK/6BvmTWpi3V5Sr9t 58xIJEZ/d7DBOPwocOQsWGHss8dWNcCyz2dm16gxpJOfFYNDfDgX5gTru+Enqw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1777645411; a=rsa-sha256; cv=none; b=uKa7Cs0g5G5wc9vFnzE4YlDEZVL8b0himKEheYP95VvSxXnbveDlz1eVIta82Vh9SVCVHK q4mlmr/EH0f/HO/JtNpvlV/a/89GF4J4Sx7piQyZFv1P7A1y3oq7VmTYp+GpV6aSoJcTka zBp6+yd4lakFs7fvL0ayzJ088fFxbp6V8CmsnBoGyCflkhR0G2G5wEEsbXf2ouC7sbxRd4 Vt5Ze+Ttg99KnwMfHOKdWgh07h8gcyOgFV6ob4EUqufJbP1RAr7rYQhW9Qfw/Yq3M8PB74 H8OMIFRSspXS0ilhoDKHHiYdCoVcbFnR1pwJt7UUGf1E0FGb3CLb48dzdtchwg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1777645411; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=B6EXeGNRshrEYsE3GoESxRmSqDeNNXE5v0XgUY9Hcu0=; b=FRXQcp2g4uNXHLS1kXaWjPjxoZjw5Mntj/D/fcGbWLUS5rhBTCqgla62QHtOCTmiQZ+S7B r+CcLzL1gPxGaXHBg8p11MWmcKNpCcpYA6cD72n+piQmaXKKy/cvhzUcQRUBryAA5iXpzI E61tsY/dPQrTKUGciLp0oLgVigTA0zgdY3kB2Jk0XOuSj+EEkYaGtZbDxjCR74MMVDMlLd pVKTalNxzrkgJjKw4159Y7B7wgkf686wt9vf7owjdzpnyXbLv17dZaRpm3EdTS4O2v8OhP cXJLyKW8kPddjYy39CX70omMKNbEP9Y0VYkvoc/YHJuNSHin904H2ncNZPgSNg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4g6YDg0kFQz11sb for ; Fri, 01 May 2026 14:23:31 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 44b9b by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 01 May 2026 14:23:31 +0000 To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Vanilla I. Shu Subject: git: a4a400be07ce - main - devel/brpc: add new ports. List-Id: Commits to the main branch of the FreeBSD ports repository List-Archive: https://lists.freebsd.org/archives/dev-commits-ports-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-ports-main@freebsd.org Sender: owner-dev-commits-ports-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: vanilla X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: a4a400be07ce2161f12997a32a11c3cf46a9dde5 Auto-Submitted: auto-generated Date: Fri, 01 May 2026 14:23:31 +0000 Message-Id: <69f4b763.44b9b.32803be5@gitrepo.freebsd.org> The branch main has been updated by vanilla: URL: https://cgit.FreeBSD.org/ports/commit/?id=a4a400be07ce2161f12997a32a11c3cf46a9dde5 commit a4a400be07ce2161f12997a32a11c3cf46a9dde5 Author: Vanilla I. Shu AuthorDate: 2026-05-01 14:22:23 +0000 Commit: Vanilla I. Shu 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 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 + #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 // std::nothrow + #include // poll() +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + #include // struct kevent + #include // 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(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 + #include + +-#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 + ++#elif defined(OS_FREEBSD) ++ ++#include ++ + #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 + #include + #include +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + #include // 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 // setsockopt + #include // TCP_NODELAY + #include +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + #include // 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 + #include "butil/build_config.h" + #include "butil/logging.h" ++#if defined(OS_FREEBSD) ++#include ++#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 // proc_pidpath ++#include ++#elif defined(OS_FREEBSD) ++#include ++#include // 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 +@@ -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 ***