Skip to content

Commit 21fcc21

Browse files
authored
cmake: Factor out CPU architecture detection (ggml-org#13883)
* cmake: Define function for querying architecture The tests and results match exactly those of ggml/src/CMakeLists.txt * Switch arch detection over to new function
1 parent dd8ba93 commit 21fcc21

File tree

3 files changed

+34
-17
lines changed

3 files changed

+34
-17
lines changed

ggml/cmake/common.cmake

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,28 @@ function(ggml_get_flags CCID CCVER)
2424
set(GF_C_FLAGS ${C_FLAGS} PARENT_SCOPE)
2525
set(GF_CXX_FLAGS ${CXX_FLAGS} PARENT_SCOPE)
2626
endfunction()
27+
28+
function(ggml_get_system_arch)
29+
if (CMAKE_OSX_ARCHITECTURES STREQUAL "arm64" OR
30+
CMAKE_GENERATOR_PLATFORM_LWR STREQUAL "arm64" OR
31+
(NOT CMAKE_OSX_ARCHITECTURES AND NOT CMAKE_GENERATOR_PLATFORM_LWR AND
32+
CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm.*|ARM64)$"))
33+
set(GGML_SYSTEM_ARCH "ARM" PARENT_SCOPE)
34+
elseif (CMAKE_OSX_ARCHITECTURES STREQUAL "x86_64" OR
35+
CMAKE_GENERATOR_PLATFORM_LWR MATCHES "^(x86_64|i686|amd64|x64|win32)$" OR
36+
(NOT CMAKE_OSX_ARCHITECTURES AND NOT CMAKE_GENERATOR_PLATFORM_LWR AND
37+
CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|i686|AMD64|amd64)$"))
38+
set(GGML_SYSTEM_ARCH "x86" PARENT_SCOPE)
39+
elseif ("${CMAKE_SYSTEM_PROCESSOR} " STREQUAL "ppc64le " OR
40+
"${CMAKE_SYSTEM_PROCESSOR} " STREQUAL "powerpc ")
41+
set(GGML_SYSTEM_ARCH "PowerPC" PARENT_SCOPE)
42+
elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "loongarch64")
43+
set(GGML_SYSTEM_ARCH "loongarch64" PARENT_SCOPE)
44+
elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "riscv64")
45+
set(GGML_SYSTEM_ARCH "riscv64" PARENT_SCOPE)
46+
elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "s390x")
47+
set(GGML_SYSTEM_ARCH "s390x" PARENT_SCOPE)
48+
else()
49+
set(GGML_SYSTEM_ARCH "UNKNOWN" PARENT_SCOPE)
50+
endif()
51+
endfunction()

ggml/src/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ if (MSVC)
109109
else ()
110110
set(CMAKE_GENERATOR_PLATFORM_LWR "")
111111
endif ()
112+
ggml_get_system_arch()
113+
message(STATUS "GGML_SYSTEM_ARCH: ${GGML_SYSTEM_ARCH}")
112114

113115
if (NOT MSVC)
114116
if (GGML_STATIC)

ggml/src/ggml-cpu/CMakeLists.txt

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,8 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
8282
target_link_libraries(${GGML_CPU_NAME} PUBLIC memkind)
8383
endif()
8484

85-
if (CMAKE_OSX_ARCHITECTURES STREQUAL "arm64" OR
86-
CMAKE_GENERATOR_PLATFORM_LWR STREQUAL "arm64" OR
87-
(NOT CMAKE_OSX_ARCHITECTURES AND NOT CMAKE_GENERATOR_PLATFORM_LWR AND
88-
CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm.*|ARM64)$"))
89-
85+
if (GGML_SYSTEM_ARCH STREQUAL "ARM")
9086
message(STATUS "ARM detected")
91-
9287
if (MSVC AND NOT CMAKE_C_COMPILER_ID STREQUAL "Clang")
9388
message(FATAL_ERROR "MSVC is not supported for ARM, use clang")
9489
else()
@@ -170,12 +165,8 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
170165
endforeach()
171166
endif()
172167
endif()
173-
elseif (CMAKE_OSX_ARCHITECTURES STREQUAL "x86_64" OR CMAKE_GENERATOR_PLATFORM_LWR MATCHES "^(x86_64|i686|amd64|x64|win32)$" OR
174-
(NOT CMAKE_OSX_ARCHITECTURES AND NOT CMAKE_GENERATOR_PLATFORM_LWR AND
175-
CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|i686|AMD64|amd64)$"))
176-
168+
elseif (GGML_SYSTEM_ARCH STREQUAL "x86")
177169
message(STATUS "x86 detected")
178-
179170
if (MSVC)
180171
# instruction set detection for MSVC only
181172
if (GGML_NATIVE)
@@ -318,7 +309,7 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
318309
set_target_properties(${GGML_CPU_FEATS_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON)
319310
target_link_libraries(${GGML_CPU_NAME} PRIVATE ${GGML_CPU_FEATS_NAME})
320311
endif()
321-
elseif ("${CMAKE_SYSTEM_PROCESSOR} " STREQUAL "ppc64le " OR "${CMAKE_SYSTEM_PROCESSOR} " STREQUAL "powerpc ")
312+
elseif (GGML_SYSTEM_ARCH STREQUAL "PowerPC")
322313
message(STATUS "PowerPC detected")
323314
if (GGML_NATIVE)
324315
if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc64")
@@ -344,18 +335,17 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
344335
list(APPEND ARCH_FLAGS -mcpu=${GGML_CPU_POWERPC_CPUTYPE})
345336
endif()
346337
endif()
347-
elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "loongarch64")
338+
elseif (GGML_SYSTEM_ARCH STREQUAL "loongarch64")
348339
message(STATUS "loongarch64 detected")
349-
350340
list(APPEND ARCH_FLAGS -march=loongarch64)
351341
if (GGML_LASX)
352342
list(APPEND ARCH_FLAGS -mlasx)
353343
endif()
354344
if (GGML_LSX)
355345
list(APPEND ARCH_FLAGS -mlsx)
356346
endif()
357-
elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "riscv64")
358-
message(STATUS "RISC-V detected")
347+
elseif (GGML_SYSTEM_ARCH STREQUAL "riscv64")
348+
message(STATUS "riscv64 detected")
359349
if (GGML_RVV)
360350
if (GGML_XTHEADVECTOR)
361351
list(APPEND ARCH_FLAGS -march=rv64gc_xtheadvector -mabi=lp64d)
@@ -365,7 +355,7 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
365355
list(APPEND ARCH_FLAGS -march=rv64gcv -mabi=lp64d)
366356
endif()
367357
endif()
368-
elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "s390x")
358+
elseif (GGML_SYSTEM_ARCH STREQUAL "s390x")
369359
message(STATUS "s390x detected")
370360
file(READ "/proc/cpuinfo" CPUINFO_CONTENTS)
371361
string(REGEX REPLACE "machine[ \t\r\n]*=[ \t\r\n]*([0-9]+)" "\\1" S390X_M ${CPUINFO_CONTENTS})

0 commit comments

Comments
 (0)