Skip to content

Commit 214fbce

Browse files
committed
Fix cmake for power
1 parent f7f7fea commit 214fbce

File tree

4 files changed

+65
-5
lines changed

4 files changed

+65
-5
lines changed

cmake/cc.cmake

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,34 @@ if (${CORE} STREQUAL ARMV8SVE)
161161
endif ()
162162
endif ()
163163

164+
if (${CORE} STREQUAL POWER10)
165+
if (NOT DYNAMIC_ARCH)
166+
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
167+
if (${GCC_VERSION} VERSION_GREATER 10.2 OR ${GCC_VERSION} VERSION_EQUAL 10.2)
168+
set (CCOMMON_OPT "${CCOMMON_OPT} -mcpu=power10 -mtune=power10 -mvsx -fno-fast-math")
169+
else ()
170+
message(FATAL_ERROR "Compiler GCC.${GCC_VERSION} does not support Power10." )
171+
endif()
172+
endif ()
173+
endif ()
174+
175+
if (${CORE} STREQUAL POWER9)
176+
if (NOT DYNAMIC_ARCH)
177+
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
178+
if (${GCC_VERSION} VERSION_GREATER 5.0 OR ${GCC_VERSION} VERSION_EQUAL 5.0)
179+
set (CCOMMON_OPT "${CCOMMON_OPT} -mcpu=power9 -mtune=power9 -mvsx -fno-fast-math")
180+
else ()
181+
set (CCOMMON_OPT "${CCOMMON_OPT} -mcpu=power8 -mtune=power8 -mvsx -fno-fast-math")
182+
message(WARNING "Compiler GCC.${GCC_VERSION} does not fully support Power9.")
183+
endif ()
184+
endif ()
185+
endif ()
186+
187+
if (${CORE} STREQUAL POWER8)
188+
if (NOT DYNAMIC_ARCH)
189+
set (CCOMMON_OPT "${CCOMMON_OPT} -mcpu=power8 -mtune=power8 -mvsx -fno-fast-math")
190+
endif ()
191+
endif ()
164192

165193
if (NOT DYNAMIC_ARCH)
166194
if (HAVE_AVX2)

cmake/system.cmake

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ if (DEFINED BINARY AND DEFINED TARGET AND BINARY EQUAL 32)
4242
if (${TARGET} STREQUAL "ARMV8" OR ${TARGET} STREQUAL "CORTEXA57" OR ${TARGET} STREQUAL "CORTEXA53" OR ${TARGET} STREQUAL "CORTEXA55")
4343
set(TARGET "ARMV7")
4444
endif ()
45+
if (${TARGET} STREQUAL "POWER8" OR ${TARGET} STREQUAL "POWER9" OR ${TARGET} STREQUAL "POWER10")
46+
set(TARGET "POWER6")
47+
endif ()
4548
endif ()
4649

4750

@@ -102,6 +105,12 @@ if (CMAKE_C_COMPILER STREQUAL loongcc)
102105
set(GETARCH_FLAGS "${GETARCH_FLAGS} -static")
103106
endif ()
104107

108+
if (POWER)
109+
set (NO_WARMUP 1)
110+
execute_process(COMMAND bash -c "as -v < /dev/null 2>&1 | grep GNU 2>&1 >/dev/null" RESULT_VARIABLE HAVE_GAS)
111+
set(GETARCH_FLAGS "${GETARCH_FLAGS} -DHAVE_GAS=${HAVE_GAS}")
112+
endif()
113+
105114
#if don't use Fortran, it will only compile CBLAS.
106115
if (ONLY_CBLAS)
107116
set(NO_LAPACK 1)
@@ -222,6 +231,27 @@ if (DEFINED TARGET)
222231
if (DEFINED HAVE_SSE4_1)
223232
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -msse4.1")
224233
endif()
234+
235+
if (${TARGET} STREQUAL POWER10)
236+
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
237+
if (${GCC_VERSION} VERSION_GREATER 10.2 OR ${GCC_VERSION} VERSION_EQUAL 10.2)
238+
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -mcpu=power10 -mtune=power10 -mvsx -fno-fast-math")
239+
else ()
240+
message(FATAL_ERROR "Compiler GCC.${GCC_VERSION} does not support Power10.")
241+
endif()
242+
endif()
243+
if (${TARGET} STREQUAL POWER9)
244+
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
245+
if (${GCC_VERSION} VERSION_GREATER 5.0 OR ${GCC_VERSION} VERSION_EQUAL 5.0)
246+
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -mcpu=power9 -mtune=power9 -mvsx -fno-fast-math")
247+
else ()
248+
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -mcpu=power8 -mtune=power8 -mvsx -fno-fast-math")
249+
message(WARNING "Compiler GCC.${GCC_VERSION} does not support fully Power9.")
250+
endif()
251+
endif()
252+
if (${TARGET} STREQUAL POWER8)
253+
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -mcpu=power8 -mtune=power8 -mvsx -fno-fast-math")
254+
endif()
225255
endif()
226256
if (DEFINED BINARY)
227257
message(STATUS "Compiling a ${BINARY}-bit binary.")
@@ -279,15 +309,15 @@ if (NEED_PIC)
279309
endif()
280310
endif ()
281311

282-
if (X86_64)
312+
if (X86_64 OR ${CORE} STREQUAL POWER10)
283313
set(SMALL_MATRIX_OPT TRUE)
284314
endif ()
285315
if (SMALL_MATRIX_OPT)
286316
set(CCOMMON_OPT "${CCOMMON_OPT} -DSMALL_MATRIX_OPT")
287317
endif ()
288318

289319
if (DYNAMIC_ARCH)
290-
if (X86 OR X86_64 OR ARM64 OR PPC)
320+
if (X86 OR X86_64 OR ARM64 OR POWER)
291321
set(CCOMMON_OPT "${CCOMMON_OPT} -DDYNAMIC_ARCH")
292322
if (DYNAMIC_OLDER)
293323
set(CCOMMON_OPT "${CCOMMON_OPT} -DDYNAMIC_OLDER")

cmake/system_check.cmake

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ if(CMAKE_CL_64 OR MINGW64)
3535
elseif(MINGW OR (MSVC AND NOT CMAKE_CROSSCOMPILING))
3636
set(X86 1)
3737
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc.*|power.*|Power.*")
38-
set(PPC 1)
38+
set(POWER 1)
3939
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "mips64.*")
4040
set(MIPS64 1)
4141
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "loongarch64.*")
@@ -88,7 +88,7 @@ if (X86_64)
8888
set(ARCH "x86_64")
8989
elseif(X86)
9090
set(ARCH "x86")
91-
elseif(PPC)
91+
elseif(POWER)
9292
set(ARCH "power")
9393
elseif(MIPS32)
9494
set(ARCH "mips")
@@ -103,7 +103,7 @@ else()
103103
endif ()
104104

105105
if (NOT BINARY)
106-
if (X86_64 OR ARM64 OR PPC OR MIPS64 OR LOONGARCH64)
106+
if (X86_64 OR ARM64 OR POWER OR MIPS64 OR LOONGARCH64)
107107
set(BINARY 64)
108108
else ()
109109
set(BINARY 32)

driver/others/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ GenerateNamedObjects("openblas_get_config.c;openblas_get_parallel.c" "" "" 0 ""
4949
if (DYNAMIC_ARCH)
5050
if (ARM64)
5151
list(APPEND COMMON_SOURCES dynamic_arm64.c)
52+
elseif (POWER)
53+
list(APPEND COMMON_SOURCES dynamic_power.c)
5254
else ()
5355
list(APPEND COMMON_SOURCES dynamic.c)
5456
endif ()

0 commit comments

Comments
 (0)