|
162 | 162 | # include <sys/types.h> |
163 | 163 | # include <sys/wait.h> |
164 | 164 | # include <sys/stat.h> |
| 165 | +# include <sys/sysinfo.h> |
165 | 166 | # include <unistd.h> |
166 | 167 | # include <fcntl.h> |
167 | 168 | #endif |
@@ -391,6 +392,9 @@ typedef struct { |
391 | 392 |
|
392 | 393 | NOBDEF bool nob_cmd_run_opt(Nob_Cmd *cmd, Nob_Cmd_Opt opt); |
393 | 394 |
|
| 395 | +// Get amount of processors on the machine. |
| 396 | +NOBDEF int nob_nprocs(void); |
| 397 | + |
394 | 398 | // See https://x.com/vkrajacic/status/1749816169736073295 for more info on how to use such macros |
395 | 399 | #define nob_cmd_run(cmd, ...) nob_cmd_run_opt((cmd), (Nob_Cmd_Opt){__VA_ARGS__}) |
396 | 400 |
|
@@ -985,6 +989,17 @@ static void nob__win32_cmd_quote(Nob_Cmd cmd, Nob_String_Builder *quoted) |
985 | 989 | } |
986 | 990 | #endif |
987 | 991 |
|
| 992 | +NOBDEF int nob_nprocs(void) |
| 993 | +{ |
| 994 | +#ifdef _WIN32 |
| 995 | + SYSTEM_INFO siSysInfo; |
| 996 | + GetSystemInfo(&siSysInfo); |
| 997 | + return siSysInfo.dwNumberOfProcessors; |
| 998 | +#else |
| 999 | + return sysconf(_SC_NPROCESSORS_ONLN); |
| 1000 | +#endif |
| 1001 | +} |
| 1002 | + |
988 | 1003 | NOBDEF bool nob_cmd_run_opt(Nob_Cmd *cmd, Nob_Cmd_Opt opt) |
989 | 1004 | { |
990 | 1005 | Nob_Proc proc = nob_cmd_start_process(*cmd, opt.fdin, opt.fdout, opt.fderr); |
@@ -1014,6 +1029,7 @@ NOBDEF bool nob_cmd_run_opt(Nob_Cmd *cmd, Nob_Cmd_Opt opt) |
1014 | 1029 |
|
1015 | 1030 | return true; |
1016 | 1031 | } |
| 1032 | + |
1017 | 1033 | NOBDEF Nob_Proc nob_cmd_run_async_redirect(Nob_Cmd cmd, Nob_Cmd_Redirect redirect) |
1018 | 1034 | { |
1019 | 1035 | return nob_cmd_start_process(cmd, redirect.fdin, redirect.fdout, redirect.fderr); |
@@ -2136,14 +2152,20 @@ NOBDEF int closedir(DIR *dirp) |
2136 | 2152 | #define sv_from_parts nob_sv_from_parts |
2137 | 2153 | #define sb_to_sv nob_sb_to_sv |
2138 | 2154 | #define win32_error_message nob_win32_error_message |
| 2155 | + #define get_procs_number nob_nprocs |
2139 | 2156 | #endif // NOB_STRIP_PREFIX |
2140 | 2157 | #endif // NOB_STRIP_PREFIX_GUARD_ |
2141 | 2158 |
|
2142 | 2159 | /* |
2143 | 2160 | Revision history: |
2144 | 2161 |
|
2145 | | - 1.23.0 (2025-08-15) Add nob_cmd_run(), nob_cmd_run_opt(), nob_cmd_start_process(), Nob_Cmd_Opt and deprecate all other nob_cmd_run_* functions (by @rexim) |
| 2162 | + 1.23.0 (2025-08-15) Add nob_cmd_run(), |
| 2163 | + nob_cmd_run_opt(), |
| 2164 | + nob_cmd_start_process(), |
| 2165 | + Nob_Cmd_Opt (by @rexim) |
| 2166 | + Deprecate all other nob_cmd_run_* functions (by @rexim) |
2146 | 2167 | Add NOB_DECLTYPE_CAST() for C++-compatible casting of allocation results (by @rexim) |
| 2168 | + Add nob_nprocs() (by @rexim) |
2147 | 2169 | Add NOB_DEPRECATED() (by @yuI4140) |
2148 | 2170 | 1.22.0 (2025-08-12) Add NOBDEF macro to the beginning of function declarations (by @minefreak19) |
2149 | 2171 | Add more flags to MSVC nob_cc_flags() (by @PieVieRo) |
|
0 commit comments