Spaces:
Running
Running
Christian Kastner
commited on
Commit
·
b436dcc
1
Parent(s):
bfc960a
cmake: Factor out CPU architecture detection (llama/13883)
Browse files* cmake: Define function for querying architecture
The tests and results match exactly those of src/CMakeLists.txt
* Switch arch detection over to new function
- ggml/cmake/common.cmake +25 -0
- ggml/src/CMakeLists.txt +2 -0
- ggml/src/ggml-cpu/CMakeLists.txt +7 -17
ggml/cmake/common.cmake
CHANGED
|
@@ -24,3 +24,28 @@ function(ggml_get_flags CCID CCVER)
|
|
| 24 |
set(GF_C_FLAGS ${C_FLAGS} PARENT_SCOPE)
|
| 25 |
set(GF_CXX_FLAGS ${CXX_FLAGS} PARENT_SCOPE)
|
| 26 |
endfunction()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
set(GF_C_FLAGS ${C_FLAGS} PARENT_SCOPE)
|
| 25 |
set(GF_CXX_FLAGS ${CXX_FLAGS} PARENT_SCOPE)
|
| 26 |
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
CHANGED
|
@@ -109,6 +109,8 @@ if (MSVC)
|
|
| 109 |
else ()
|
| 110 |
set(CMAKE_GENERATOR_PLATFORM_LWR "")
|
| 111 |
endif ()
|
|
|
|
|
|
|
| 112 |
|
| 113 |
if (NOT MSVC)
|
| 114 |
if (GGML_STATIC)
|
|
|
|
| 109 |
else ()
|
| 110 |
set(CMAKE_GENERATOR_PLATFORM_LWR "")
|
| 111 |
endif ()
|
| 112 |
+
ggml_get_system_arch()
|
| 113 |
+
message(STATUS "GGML_SYSTEM_ARCH: ${GGML_SYSTEM_ARCH}")
|
| 114 |
|
| 115 |
if (NOT MSVC)
|
| 116 |
if (GGML_STATIC)
|
ggml/src/ggml-cpu/CMakeLists.txt
CHANGED
|
@@ -82,13 +82,8 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
|
|
| 82 |
target_link_libraries(${GGML_CPU_NAME} PUBLIC memkind)
|
| 83 |
endif()
|
| 84 |
|
| 85 |
-
if (
|
| 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 |
-
|
| 90 |
message(STATUS "ARM detected")
|
| 91 |
-
|
| 92 |
if (MSVC AND NOT CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
| 93 |
message(FATAL_ERROR "MSVC is not supported for ARM, use clang")
|
| 94 |
else()
|
|
@@ -170,12 +165,8 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
|
|
| 170 |
endforeach()
|
| 171 |
endif()
|
| 172 |
endif()
|
| 173 |
-
elseif (
|
| 174 |
-
(NOT CMAKE_OSX_ARCHITECTURES AND NOT CMAKE_GENERATOR_PLATFORM_LWR AND
|
| 175 |
-
CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|i686|AMD64|amd64)$"))
|
| 176 |
-
|
| 177 |
message(STATUS "x86 detected")
|
| 178 |
-
|
| 179 |
if (MSVC)
|
| 180 |
# instruction set detection for MSVC only
|
| 181 |
if (GGML_NATIVE)
|
|
@@ -318,7 +309,7 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
|
|
| 318 |
set_target_properties(${GGML_CPU_FEATS_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
| 319 |
target_link_libraries(${GGML_CPU_NAME} PRIVATE ${GGML_CPU_FEATS_NAME})
|
| 320 |
endif()
|
| 321 |
-
elseif (
|
| 322 |
message(STATUS "PowerPC detected")
|
| 323 |
if (GGML_NATIVE)
|
| 324 |
if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc64")
|
|
@@ -344,9 +335,8 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
|
|
| 344 |
list(APPEND ARCH_FLAGS -mcpu=${GGML_CPU_POWERPC_CPUTYPE})
|
| 345 |
endif()
|
| 346 |
endif()
|
| 347 |
-
elseif (
|
| 348 |
message(STATUS "loongarch64 detected")
|
| 349 |
-
|
| 350 |
list(APPEND ARCH_FLAGS -march=loongarch64)
|
| 351 |
if (GGML_LASX)
|
| 352 |
list(APPEND ARCH_FLAGS -mlasx)
|
|
@@ -354,8 +344,8 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
|
|
| 354 |
if (GGML_LSX)
|
| 355 |
list(APPEND ARCH_FLAGS -mlsx)
|
| 356 |
endif()
|
| 357 |
-
elseif (
|
| 358 |
-
message(STATUS "
|
| 359 |
if (GGML_RVV)
|
| 360 |
if (GGML_XTHEADVECTOR)
|
| 361 |
list(APPEND ARCH_FLAGS -march=rv64gc_xtheadvector -mabi=lp64d)
|
|
@@ -365,7 +355,7 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
|
|
| 365 |
list(APPEND ARCH_FLAGS -march=rv64gcv -mabi=lp64d)
|
| 366 |
endif()
|
| 367 |
endif()
|
| 368 |
-
elseif (
|
| 369 |
message(STATUS "s390x detected")
|
| 370 |
file(READ "/proc/cpuinfo" CPUINFO_CONTENTS)
|
| 371 |
string(REGEX REPLACE "machine[ \t\r\n]*=[ \t\r\n]*([0-9]+)" "\\1" S390X_M ${CPUINFO_CONTENTS})
|
|
|
|
| 82 |
target_link_libraries(${GGML_CPU_NAME} PUBLIC memkind)
|
| 83 |
endif()
|
| 84 |
|
| 85 |
+
if (GGML_SYSTEM_ARCH STREQUAL "ARM")
|
|
|
|
|
|
|
|
|
|
|
|
|
| 86 |
message(STATUS "ARM detected")
|
|
|
|
| 87 |
if (MSVC AND NOT CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
| 88 |
message(FATAL_ERROR "MSVC is not supported for ARM, use clang")
|
| 89 |
else()
|
|
|
|
| 165 |
endforeach()
|
| 166 |
endif()
|
| 167 |
endif()
|
| 168 |
+
elseif (GGML_SYSTEM_ARCH STREQUAL "x86")
|
|
|
|
|
|
|
|
|
|
| 169 |
message(STATUS "x86 detected")
|
|
|
|
| 170 |
if (MSVC)
|
| 171 |
# instruction set detection for MSVC only
|
| 172 |
if (GGML_NATIVE)
|
|
|
|
| 309 |
set_target_properties(${GGML_CPU_FEATS_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
| 310 |
target_link_libraries(${GGML_CPU_NAME} PRIVATE ${GGML_CPU_FEATS_NAME})
|
| 311 |
endif()
|
| 312 |
+
elseif (GGML_SYSTEM_ARCH STREQUAL "PowerPC")
|
| 313 |
message(STATUS "PowerPC detected")
|
| 314 |
if (GGML_NATIVE)
|
| 315 |
if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc64")
|
|
|
|
| 335 |
list(APPEND ARCH_FLAGS -mcpu=${GGML_CPU_POWERPC_CPUTYPE})
|
| 336 |
endif()
|
| 337 |
endif()
|
| 338 |
+
elseif (GGML_SYSTEM_ARCH STREQUAL "loongarch64")
|
| 339 |
message(STATUS "loongarch64 detected")
|
|
|
|
| 340 |
list(APPEND ARCH_FLAGS -march=loongarch64)
|
| 341 |
if (GGML_LASX)
|
| 342 |
list(APPEND ARCH_FLAGS -mlasx)
|
|
|
|
| 344 |
if (GGML_LSX)
|
| 345 |
list(APPEND ARCH_FLAGS -mlsx)
|
| 346 |
endif()
|
| 347 |
+
elseif (GGML_SYSTEM_ARCH STREQUAL "riscv64")
|
| 348 |
+
message(STATUS "riscv64 detected")
|
| 349 |
if (GGML_RVV)
|
| 350 |
if (GGML_XTHEADVECTOR)
|
| 351 |
list(APPEND ARCH_FLAGS -march=rv64gc_xtheadvector -mabi=lp64d)
|
|
|
|
| 355 |
list(APPEND ARCH_FLAGS -march=rv64gcv -mabi=lp64d)
|
| 356 |
endif()
|
| 357 |
endif()
|
| 358 |
+
elseif (GGML_SYSTEM_ARCH STREQUAL "s390x")
|
| 359 |
message(STATUS "s390x detected")
|
| 360 |
file(READ "/proc/cpuinfo" CPUINFO_CONTENTS)
|
| 361 |
string(REGEX REPLACE "machine[ \t\r\n]*=[ \t\r\n]*([0-9]+)" "\\1" S390X_M ${CPUINFO_CONTENTS})
|