From 0d53a3cdb1e6be1ee8a3da93702b767dc2b04fb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=A8=E5=A4=B4=E4=BA=91?= Date: Sat, 29 Nov 2025 10:55:54 +0000 Subject: [PATCH] Add FreeBSD platform support (fixes #156) - Add IPC_OS_FREEBSD_ platform detection macro - Enable FreeBSD to use POSIX pthread implementation (shared with QNX) - Update all conditional compilation directives to include FreeBSD - Update README to reflect FreeBSD platform support FreeBSD uses the existing POSIX implementation which supports: - Process-shared mutexes (PTHREAD_PROCESS_SHARED) - Robust mutexes (PTHREAD_MUTEX_ROBUST) - Timed lock operations - POSIX shared memory This is a minimal change that reuses the mature POSIX implementation already proven by QNX platform support. --- README.md | 4 ++-- src/libipc/platform/detail.h | 2 ++ src/libipc/platform/platform.c | 2 +- src/libipc/platform/platform.cpp | 2 +- src/libipc/sync/condition.cpp | 2 +- src/libipc/sync/mutex.cpp | 2 +- src/libipc/sync/semaphore.cpp | 2 +- src/libipc/sync/waiter.cpp | 2 +- 8 files changed, 10 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 89563169..8cb04e6d 100755 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ [![Build status](https://ci.appveyor.com/api/projects/status/github/mutouyun/cpp-ipc?branch=master&svg=true)](https://ci.appveyor.com/project/mutouyun/cpp-ipc) [![Vcpkg package](https://img.shields.io/badge/Vcpkg-package-blueviolet)](https://github.com/microsoft/vcpkg/tree/master/ports/cpp-ipc) -## A high-performance inter-process communication library using shared memory on Linux/Windows. +## A high-performance inter-process communication library using shared memory on Linux/Windows/FreeBSD. * Compilers with C++17 support are recommended (msvc-2017/gcc-7/clang-4) * No other dependencies except STL. @@ -44,7 +44,7 @@ Performance data: [performance.xlsx](performance.xlsx) ------ -## 使用共享内存的跨平台(Linux/Windows,x86/x64/ARM)高性能IPC通讯库 +## 使用共享内存的跨平台(Linux/Windows/FreeBSD,x86/x64/ARM)高性能IPC通讯库 * 推荐支持C++17的编译器(msvc-2017/gcc-7/clang-4) * 除STL外,无其他依赖 diff --git a/src/libipc/platform/detail.h b/src/libipc/platform/detail.h index 4d6a27cf..69e6b89e 100755 --- a/src/libipc/platform/detail.h +++ b/src/libipc/platform/detail.h @@ -9,6 +9,8 @@ # define IPC_OS_WINDOWS_ #elif defined(__linux__) || defined(__linux) # define IPC_OS_LINUX_ +#elif defined(__FreeBSD__) +# define IPC_OS_FREEBSD_ #elif defined(__QNX__) # define IPC_OS_QNX_ #elif defined(__APPLE__) diff --git a/src/libipc/platform/platform.c b/src/libipc/platform/platform.c index 49cc977b..d670e70c 100644 --- a/src/libipc/platform/platform.c +++ b/src/libipc/platform/platform.c @@ -7,7 +7,7 @@ #include "libipc/platform/linux/a0/strconv.c" #include "libipc/platform/linux/a0/tid.c" #include "libipc/platform/linux/a0/time.c" -#elif defined(IPC_OS_QNX_) +#elif defined(IPC_OS_QNX_) || defined(IPC_OS_FREEBSD_) #else/*IPC_OS*/ # error "Unsupported platform." #endif diff --git a/src/libipc/platform/platform.cpp b/src/libipc/platform/platform.cpp index b77cbc97..f00113bd 100644 --- a/src/libipc/platform/platform.cpp +++ b/src/libipc/platform/platform.cpp @@ -2,7 +2,7 @@ #include "libipc/platform/detail.h" #if defined(IPC_OS_WINDOWS_) #include "libipc/platform/win/shm_win.cpp" -#elif defined(IPC_OS_LINUX_) || defined(IPC_OS_QNX_) +#elif defined(IPC_OS_LINUX_) || defined(IPC_OS_QNX_) || defined(IPC_OS_FREEBSD_) #include "libipc/platform/posix/shm_posix.cpp" #else/*IPC_OS*/ # error "Unsupported platform." diff --git a/src/libipc/sync/condition.cpp b/src/libipc/sync/condition.cpp index e64e688c..695f9a49 100644 --- a/src/libipc/sync/condition.cpp +++ b/src/libipc/sync/condition.cpp @@ -9,7 +9,7 @@ #include "libipc/platform/win/condition.h" #elif defined(IPC_OS_LINUX_) #include "libipc/platform/linux/condition.h" -#elif defined(IPC_OS_QNX_) +#elif defined(IPC_OS_QNX_) || defined(IPC_OS_FREEBSD_) #include "libipc/platform/posix/condition.h" #else/*IPC_OS*/ # error "Unsupported platform." diff --git a/src/libipc/sync/mutex.cpp b/src/libipc/sync/mutex.cpp index c9c59f74..104c4fce 100644 --- a/src/libipc/sync/mutex.cpp +++ b/src/libipc/sync/mutex.cpp @@ -9,7 +9,7 @@ #include "libipc/platform/win/mutex.h" #elif defined(IPC_OS_LINUX_) #include "libipc/platform/linux/mutex.h" -#elif defined(IPC_OS_QNX_) +#elif defined(IPC_OS_QNX_) || defined(IPC_OS_FREEBSD_) #include "libipc/platform/posix/mutex.h" #else/*IPC_OS*/ # error "Unsupported platform." diff --git a/src/libipc/sync/semaphore.cpp b/src/libipc/sync/semaphore.cpp index ccb13c47..720ef07c 100644 --- a/src/libipc/sync/semaphore.cpp +++ b/src/libipc/sync/semaphore.cpp @@ -7,7 +7,7 @@ #include "libipc/platform/detail.h" #if defined(IPC_OS_WINDOWS_) #include "libipc/platform/win/semaphore.h" -#elif defined(IPC_OS_LINUX_) || defined(IPC_OS_QNX_) +#elif defined(IPC_OS_LINUX_) || defined(IPC_OS_QNX_) || defined(IPC_OS_FREEBSD_) #include "libipc/platform/posix/semaphore_impl.h" #else/*IPC_OS*/ # error "Unsupported platform." diff --git a/src/libipc/sync/waiter.cpp b/src/libipc/sync/waiter.cpp index 3a04abfe..78cdee19 100644 --- a/src/libipc/sync/waiter.cpp +++ b/src/libipc/sync/waiter.cpp @@ -5,7 +5,7 @@ #include "libipc/platform/win/mutex.h" #elif defined(IPC_OS_LINUX_) #include "libipc/platform/linux/mutex.h" -#elif defined(IPC_OS_QNX_) +#elif defined(IPC_OS_QNX_) || defined(IPC_OS_FREEBSD_) #include "libipc/platform/posix/mutex.h" #else/*IPC_OS*/ # error "Unsupported platform."