• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #if defined(_WIN32) || defined(__CYGWIN__)
16 static INIT_ONCE init_guard = INIT_ONCE_STATIC_INIT;
17 #elif !defined(__EMSCRIPTEN__) || defined(__EMSCRIPTEN_PTHREADS__)
18 static pthread_once_t init_guard = PTHREAD_ONCE_INIT;
19 #else
20 static bool init_guard = false;
21 #endif
22 
cpuinfo_initialize(void)23 bool CPUINFO_ABI cpuinfo_initialize(void) {
24 #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64
25 #if defined(__MACH__) && defined(__APPLE__)
26 	pthread_once(&init_guard, &cpuinfo_x86_mach_init);
27 #elif defined(__FreeBSD__)
28 	pthread_once(&init_guard, &cpuinfo_x86_freebsd_init);
29 #elif defined(__linux__)
30 	pthread_once(&init_guard, &cpuinfo_x86_linux_init);
31 #elif defined(_WIN32) || defined(__CYGWIN__)
32 	InitOnceExecuteOnce(&init_guard, &cpuinfo_x86_windows_init, NULL, NULL);
33 #else
34 	cpuinfo_log_error("operating system is not supported in cpuinfo");
35 #endif
36 #elif CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64
37 #if defined(__linux__)
38 	pthread_once(&init_guard, &cpuinfo_arm_linux_init);
39 #elif defined(__MACH__) && defined(__APPLE__)
40 	pthread_once(&init_guard, &cpuinfo_arm_mach_init);
41 #elif defined(_WIN32)
42 	InitOnceExecuteOnce(&init_guard, &cpuinfo_arm_windows_init, NULL, NULL);
43 #else
44 	cpuinfo_log_error("operating system is not supported in cpuinfo");
45 #endif
46 #elif CPUINFO_ARCH_RISCV32 || CPUINFO_ARCH_RISCV64
47 #if defined(__linux__)
48 	pthread_once(&init_guard, &cpuinfo_riscv_linux_init);
49 #else
50 	cpuinfo_log_error("operating system is not supported in cpuinfo");
51 #endif
52 #elif CPUINFO_ARCH_ASMJS || CPUINFO_ARCH_WASM || CPUINFO_ARCH_WASMSIMD
53 #if defined(__EMSCRIPTEN_PTHREADS__)
54 	pthread_once(&init_guard, &cpuinfo_emscripten_init);
55 #else
56 	if (!init_guard) {
57 		cpuinfo_emscripten_init();
58 	}
59 	init_guard = true;
60 #endif
61 #else
62 	cpuinfo_log_error("processor architecture is not supported in cpuinfo");
63 #endif
64 	return cpuinfo_is_initialized;
65 }
66 
cpuinfo_deinitialize(void)67 void CPUINFO_ABI cpuinfo_deinitialize(void) {}
68