xref: /aosp_15_r20/external/cpuinfo/src/init.c (revision 2b54f0db79fd8303838913b20ff3780cddaa909f)
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 
cpuinfo_initialize(void)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 
cpuinfo_deinitialize(void)60 void CPUINFO_ABI cpuinfo_deinitialize(void) {
61 }
62