Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/pytorch/cpuinfo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Shulga <nshulga@fb.com>2020-11-19 04:25:18 +0300
committerGitHub <noreply@github.com>2020-11-19 04:25:18 +0300
commited8b86a253800bafdb7b25c5c399f91bff9cb1f3 (patch)
tree7ce8843cfa40d1f5d0a94bfcc551f20850a76539
parent63b254577ed77a8004a9be6ac707f3dccc4e1fd9 (diff)
Fix build for Apple Silicon (#48)
* Fix build for Apple Silicon MacOS machines based on Apple M1 silicon are identified by cmake as "arm64" Modify build rules accordingly to recognize "arm64" is valid CPU configuration for cpuinfo * Add CPUFAMILY_ARM_FIRESTORM_ICESTORM switch case * Update comment in src/arm/mach/init.c
-rw-r--r--CMakeLists.txt8
-rw-r--r--include/cpuinfo.h4
-rw-r--r--src/arm/mach/init.c7
-rw-r--r--src/init.c2
-rw-r--r--tools/cpu-info.c4
5 files changed, 21 insertions, 4 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b85620f..06aee4d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -67,7 +67,7 @@ IF(NOT CMAKE_SYSTEM_PROCESSOR)
"cpuinfo will compile, but cpuinfo_initialize() will always fail.")
SET(CPUINFO_SUPPORTED_PLATFORM FALSE)
ENDIF()
-ELSEIF(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^(i[3-6]86|AMD64|x86(_64)?|armv[5-8].*|aarch64)$")
+ELSEIF(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^(i[3-6]86|AMD64|x86(_64)?|armv[5-8].*|aarch64|arm64)$")
MESSAGE(WARNING
"Target processor architecture \"${CMAKE_SYSTEM_PROCESSOR}\" is not supported in cpuinfo. "
"cpuinfo will compile, but cpuinfo_initialize() will always fail.")
@@ -146,7 +146,7 @@ IF(CPUINFO_SUPPORTED_PLATFORM)
ELSEIF(CMAKE_SYSTEM_NAME MATCHES "^(Windows|CYGWIN|MSYS)$")
LIST(APPEND CPUINFO_SRCS src/x86/windows/init.c)
ENDIF()
- ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv[5-8].*|aarch64)$" OR IOS_ARCH MATCHES "^(armv7.*|arm64.*)$")
+ ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv[5-8].*|aarch64|arm64)$" OR IOS_ARCH MATCHES "^(armv7.*|arm64.*)$")
LIST(APPEND CPUINFO_SRCS
src/arm/uarch.c
src/arm/cache.c)
@@ -163,10 +163,10 @@ IF(CPUINFO_SUPPORTED_PLATFORM)
IF(CMAKE_SYSTEM_NAME STREQUAL "Android" AND ANDROID_ABI STREQUAL "armeabi")
SET_SOURCE_FILES_PROPERTIES(src/arm/linux/aarch32-isa.c PROPERTIES COMPILE_FLAGS -marm)
ENDIF()
- ELSEIF(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
+ ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64)$")
LIST(APPEND CPUINFO_SRCS src/arm/linux/aarch64-isa.c)
ENDIF()
- ELSEIF(IOS)
+ ELSEIF(IOS OR (CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64"))
LIST(APPEND CPUINFO_SRCS src/arm/mach/init.c)
ENDIF()
IF(CMAKE_SYSTEM_NAME STREQUAL "Android")
diff --git a/include/cpuinfo.h b/include/cpuinfo.h
index 85ce174..e2e6564 100644
--- a/include/cpuinfo.h
+++ b/include/cpuinfo.h
@@ -484,6 +484,10 @@ enum cpuinfo_uarch {
cpuinfo_uarch_lightning = 0x00700109,
/** Apple A13 processor (little cores). */
cpuinfo_uarch_thunder = 0x0070010A,
+ /** Apple M1 processor (big cores). */
+ cpuinfo_uarch_firestorm = 0x0070010B,
+ /** Apple M1 processor (little cores). */
+ cpuinfo_uarch_icestorm = 0x0070010C,
/** Cavium ThunderX. */
cpuinfo_uarch_thunderx = 0x00800100,
diff --git a/src/arm/mach/init.c b/src/arm/mach/init.c
index e912de6..d820744 100644
--- a/src/arm/mach/init.c
+++ b/src/arm/mach/init.c
@@ -25,6 +25,10 @@
#define CPUFAMILY_ARM_LIGHTNING_THUNDER 0x462504D2
#endif
+#ifndef CPUFAMILY_ARM_FIRESTORM_ICESTORM
+ #define CPUFAMILY_ARM_FIRESTORM_ICESTORM 0x1B588BB3
+#endif
+
struct cpuinfo_arm_isa cpuinfo_isa = {
#if CPUINFO_ARCH_ARM
.thumb = true,
@@ -101,6 +105,9 @@ static enum cpuinfo_uarch decode_uarch(uint32_t cpu_family, uint32_t cpu_subtype
case CPUFAMILY_ARM_LIGHTNING_THUNDER:
/* Hexa-core: 2x Lightning + 4x Thunder; Octa-core (presumed): 4x Lightning + 4x Thunder */
return core_index + 4 < core_count ? cpuinfo_uarch_lightning : cpuinfo_uarch_thunder;
+ case CPUFAMILY_ARM_FIRESTORM_ICESTORM:
+ /* Hexa-core: 2x Firestorm + 4x Icestorm; Octa-core: 4x Firestorm + 4x Icestorm */
+ return core_index + 4 < core_count ? cpuinfo_uarch_firestorm : cpuinfo_uarch_icestorm;
default:
/* Use hw.cpusubtype for detection */
break;
diff --git a/src/init.c b/src/init.c
index 0d8cc3b..f703e8e 100644
--- a/src/init.c
+++ b/src/init.c
@@ -37,6 +37,8 @@ bool CPUINFO_ABI cpuinfo_initialize(void) {
pthread_once(&init_guard, &cpuinfo_arm_linux_init);
#elif defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
pthread_once(&init_guard, &cpuinfo_arm_mach_init);
+ #elif defined(__MACH__) && defined(__APPLE__)
+ pthread_once(&init_guard, &cpuinfo_arm_mach_init);
#else
cpuinfo_log_error("operating system is not supported in cpuinfo");
#endif
diff --git a/tools/cpu-info.c b/tools/cpu-info.c
index 429bbfa..55d654f 100644
--- a/tools/cpu-info.c
+++ b/tools/cpu-info.c
@@ -233,6 +233,10 @@ static const char* uarch_to_string(enum cpuinfo_uarch uarch) {
return "Lightning";
case cpuinfo_uarch_thunder:
return "Thunder";
+ case cpuinfo_uarch_firestorm:
+ return "Firestorm";
+ case cpuinfo_uarch_icestorm:
+ return "Icestorm";
case cpuinfo_uarch_thunderx:
return "ThunderX";
case cpuinfo_uarch_thunderx2: