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
24bool 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
60void CPUINFO_ABI cpuinfo_deinitialize(void) {
61}
62