1 | #if defined(_WIN32) || defined(__CYGWIN__) |
2 | #include <windows.h> |
3 | #elif !defined(__EMSCRIPTEN__) || defined(__EMSCRIPTEN_PTHREADS__) |
4 | #include <pthread.h> |
5 | #endif |
6 | |
7 | #include <cpuinfo.h> |
8 | #include <cpuinfo/internal-api.h> |
9 | #include <cpuinfo/log.h> |
10 | |
11 | #ifdef __APPLE__ |
12 | #include "TargetConditionals.h" |
13 | #endif |
14 | |
15 | |
16 | #if defined(_WIN32) || defined(__CYGWIN__) |
17 | static INIT_ONCE init_guard = INIT_ONCE_STATIC_INIT; |
18 | #elif !defined(__EMSCRIPTEN__) || defined(__EMSCRIPTEN_PTHREADS__) |
19 | static pthread_once_t init_guard = PTHREAD_ONCE_INIT; |
20 | #else |
21 | static bool init_guard = false; |
22 | #endif |
23 | |
24 | bool CPUINFO_ABI cpuinfo_initialize(void) { |
25 | #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 |
26 | #if defined(__MACH__) && defined(__APPLE__) |
27 | pthread_once(&init_guard, &cpuinfo_x86_mach_init); |
28 | #elif defined(__linux__) |
29 | pthread_once(&init_guard, &cpuinfo_x86_linux_init); |
30 | #elif defined(_WIN32) || defined(__CYGWIN__) |
31 | InitOnceExecuteOnce(&init_guard, &cpuinfo_x86_windows_init, NULL, NULL); |
32 | #else |
33 | cpuinfo_log_error("operating system is not supported in cpuinfo" ); |
34 | #endif |
35 | #elif CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 |
36 | #if defined(__linux__) |
37 | pthread_once(&init_guard, &cpuinfo_arm_linux_init); |
38 | #elif defined(__MACH__) && defined(__APPLE__) |
39 | pthread_once(&init_guard, &cpuinfo_arm_mach_init); |
40 | #elif defined(_WIN32) |
41 | InitOnceExecuteOnce(&init_guard, &cpuinfo_arm_windows_init, NULL, NULL); |
42 | #else |
43 | cpuinfo_log_error("operating system is not supported in cpuinfo" ); |
44 | #endif |
45 | #elif CPUINFO_ARCH_ASMJS || CPUINFO_ARCH_WASM || CPUINFO_ARCH_WASMSIMD |
46 | #if defined(__EMSCRIPTEN_PTHREADS__) |
47 | pthread_once(&init_guard, &cpuinfo_emscripten_init); |
48 | #else |
49 | if (!init_guard) { |
50 | cpuinfo_emscripten_init(); |
51 | } |
52 | init_guard = true; |
53 | #endif |
54 | #else |
55 | cpuinfo_log_error("processor architecture is not supported in cpuinfo" ); |
56 | #endif |
57 | return cpuinfo_is_initialized; |
58 | } |
59 | |
60 | void CPUINFO_ABI cpuinfo_deinitialize(void) { |
61 | } |
62 | |