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 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 (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
-
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 (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
-
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 ("${CMAKE_SYSTEM_PROCESSOR} " STREQUAL "ppc64le " OR "${CMAKE_SYSTEM_PROCESSOR} " STREQUAL "powerpc ")
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 (${CMAKE_SYSTEM_PROCESSOR} MATCHES "loongarch64")
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 (${CMAKE_SYSTEM_PROCESSOR} MATCHES "riscv64")
358
- message(STATUS "RISC-V detected")
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 (${CMAKE_SYSTEM_PROCESSOR} MATCHES "s390x")
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})