Skip to content

Commit a338ff3

Browse files
cmeerwDeusData
authored andcommitted
Add support for NetBSD, FreeBSD, and OpenBSD.
1 parent d83553a commit a338ff3

1 file changed

Lines changed: 34 additions & 3 deletions

File tree

src/foundation/system_info.c

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* system_info.c — CPU core count and RAM detection.
33
*
44
* macOS: sysctlbyname for core counts, hw.memsize for RAM.
5+
* BSD: sysconf + sysctl(HW_PHYSMEM64 / HW_PHYSMEM).
56
* Linux: sysconf + sysinfo().
67
* Windows: GetSystemInfo + GlobalMemoryStatusEx.
78
*
@@ -21,7 +22,11 @@ enum { DEFAULT_CORES = 1, MIN_WORKERS = 1 };
2122
#include <windows.h>
2223
#elif defined(__APPLE__)
2324
#include <sys/sysctl.h>
24-
#elif !defined(_WIN32) /* Linux */
25+
#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__)
26+
#include <unistd.h>
27+
#include <sys/types.h>
28+
#include <sys/sysctl.h>
29+
#else /* Linux */
2530
#include <unistd.h>
2631
#include <sys/sysinfo.h>
2732

@@ -72,7 +77,31 @@ static cbm_system_info_t detect_system_macos(void) {
7277
return info;
7378
}
7479

75-
#elif !defined(_WIN32) /* Linux */
80+
#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__)
81+
82+
static cbm_system_info_t detect_system_bsd(void) {
83+
cbm_system_info_t info;
84+
memset(&info, 0, sizeof(info));
85+
86+
long nprocs = sysconf(_SC_NPROCESSORS_ONLN);
87+
info.total_cores = nprocs > 0 ? (int)nprocs : 1;
88+
info.perf_cores = info.total_cores;
89+
90+
#if defined(__OpenBSD__)
91+
int mib[2] = { CTL_HW, HW_PHYSMEM };
92+
#else
93+
int mib[2] = { CTL_HW, HW_PHYSMEM64 };
94+
#endif
95+
uint64_t physmem = 0;
96+
size_t len = sizeof(physmem);
97+
if (sysctl(mib, 2, &physmem, &len, NULL, 0) == 0 && physmem > 0) {
98+
info.total_ram = (size_t)physmem;
99+
}
100+
101+
return info;
102+
}
103+
104+
#else /* Linux */
76105

77106
static cbm_system_info_t detect_system_linux(void) {
78107
cbm_system_info_t info;
@@ -90,7 +119,7 @@ static cbm_system_info_t detect_system_linux(void) {
90119
return info;
91120
}
92121

93-
#endif /* __APPLE__ / Linux */
122+
#endif /* __APPLE__ / BSD / Linux */
94123

95124
/* ── Windows detection ───────────────────────────────────────────── */
96125

@@ -128,6 +157,8 @@ cbm_system_info_t cbm_system_info(void) {
128157
cached_info = detect_system_windows();
129158
#elif defined(__APPLE__)
130159
cached_info = detect_system_macos();
160+
#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__)
161+
cached_info = detect_system_bsd();
131162
#else
132163
cached_info = detect_system_linux();
133164
#endif

0 commit comments

Comments
 (0)