Add CMake support for Powertags/v0.3.19
| @@ -161,6 +161,34 @@ if (${CORE} STREQUAL ARMV8SVE) | |||
| endif () | |||
| endif () | |||
| if (${CORE} STREQUAL POWER10) | |||
| if (NOT DYNAMIC_ARCH) | |||
| execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) | |||
| if (${GCC_VERSION} VERSION_GREATER 10.2 OR ${GCC_VERSION} VERSION_EQUAL 10.2) | |||
| set (CCOMMON_OPT "${CCOMMON_OPT} -mcpu=power10 -mtune=power10 -mvsx -fno-fast-math") | |||
| else () | |||
| message(FATAL_ERROR "Compiler GCC.${GCC_VERSION} does not support Power10." ) | |||
| endif() | |||
| endif () | |||
| endif () | |||
| if (${CORE} STREQUAL POWER9) | |||
| if (NOT DYNAMIC_ARCH) | |||
| execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) | |||
| if (${GCC_VERSION} VERSION_GREATER 5.0 OR ${GCC_VERSION} VERSION_EQUAL 5.0) | |||
| set (CCOMMON_OPT "${CCOMMON_OPT} -mcpu=power9 -mtune=power9 -mvsx -fno-fast-math") | |||
| else () | |||
| set (CCOMMON_OPT "${CCOMMON_OPT} -mcpu=power8 -mtune=power8 -mvsx -fno-fast-math") | |||
| message(WARNING "Compiler GCC.${GCC_VERSION} does not fully support Power9.") | |||
| endif () | |||
| endif () | |||
| endif () | |||
| if (${CORE} STREQUAL POWER8) | |||
| if (NOT DYNAMIC_ARCH) | |||
| set (CCOMMON_OPT "${CCOMMON_OPT} -mcpu=power8 -mtune=power8 -mvsx -fno-fast-math") | |||
| endif () | |||
| endif () | |||
| if (NOT DYNAMIC_ARCH) | |||
| if (HAVE_AVX2) | |||
| @@ -42,6 +42,9 @@ if (DEFINED BINARY AND DEFINED TARGET AND BINARY EQUAL 32) | |||
| if (${TARGET} STREQUAL "ARMV8" OR ${TARGET} STREQUAL "CORTEXA57" OR ${TARGET} STREQUAL "CORTEXA53" OR ${TARGET} STREQUAL "CORTEXA55") | |||
| set(TARGET "ARMV7") | |||
| endif () | |||
| if (${TARGET} STREQUAL "POWER8" OR ${TARGET} STREQUAL "POWER9" OR ${TARGET} STREQUAL "POWER10") | |||
| set(TARGET "POWER6") | |||
| endif () | |||
| endif () | |||
| @@ -102,6 +105,18 @@ if (CMAKE_C_COMPILER STREQUAL loongcc) | |||
| set(GETARCH_FLAGS "${GETARCH_FLAGS} -static") | |||
| endif () | |||
| if (POWER) | |||
| set(NO_WARMUP 1) | |||
| set(HAVE_GAS 1) | |||
| if (CMAKE_ASM_COMPILER_ID STREQUAL "GNU") | |||
| set(HAVE_GAS 0) | |||
| elseif (CMAKE_ASM_COMPILER_ID STREQUAL "Clang") | |||
| set(CCOMMON_OPT "${CCOMMON_OPT} -fno-integrated-as") | |||
| set(HAVE_GAS 0) | |||
| endif () | |||
| set(GETARCH_FLAGS "${GETARCH_FLAGS} -DHAVE_GAS=${HAVE_GAS}") | |||
| endif () | |||
| #if don't use Fortran, it will only compile CBLAS. | |||
| if (ONLY_CBLAS) | |||
| set(NO_LAPACK 1) | |||
| @@ -222,6 +237,27 @@ if (DEFINED TARGET) | |||
| if (DEFINED HAVE_SSE4_1) | |||
| set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -msse4.1") | |||
| endif() | |||
| if (${TARGET} STREQUAL POWER10) | |||
| execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) | |||
| if (${GCC_VERSION} VERSION_GREATER 10.2 OR ${GCC_VERSION} VERSION_EQUAL 10.2) | |||
| set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -mcpu=power10 -mtune=power10 -mvsx -fno-fast-math") | |||
| else () | |||
| message(FATAL_ERROR "Compiler GCC.${GCC_VERSION} does not support Power10.") | |||
| endif() | |||
| endif() | |||
| if (${TARGET} STREQUAL POWER9) | |||
| execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) | |||
| if (${GCC_VERSION} VERSION_GREATER 5.0 OR ${GCC_VERSION} VERSION_EQUAL 5.0) | |||
| set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -mcpu=power9 -mtune=power9 -mvsx -fno-fast-math") | |||
| else () | |||
| set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -mcpu=power8 -mtune=power8 -mvsx -fno-fast-math") | |||
| message(WARNING "Compiler GCC.${GCC_VERSION} does not support fully Power9.") | |||
| endif() | |||
| endif() | |||
| if (${TARGET} STREQUAL POWER8) | |||
| set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -mcpu=power8 -mtune=power8 -mvsx -fno-fast-math") | |||
| endif() | |||
| endif() | |||
| if (DEFINED BINARY) | |||
| message(STATUS "Compiling a ${BINARY}-bit binary.") | |||
| @@ -279,7 +315,7 @@ if (NEED_PIC) | |||
| endif() | |||
| endif () | |||
| if (X86_64) | |||
| if (X86_64 OR ${CORE} STREQUAL POWER10) | |||
| set(SMALL_MATRIX_OPT TRUE) | |||
| endif () | |||
| if (SMALL_MATRIX_OPT) | |||
| @@ -287,7 +323,7 @@ if (SMALL_MATRIX_OPT) | |||
| endif () | |||
| if (DYNAMIC_ARCH) | |||
| if (X86 OR X86_64 OR ARM64 OR PPC) | |||
| if (X86 OR X86_64 OR ARM64 OR POWER) | |||
| set(CCOMMON_OPT "${CCOMMON_OPT} -DDYNAMIC_ARCH") | |||
| if (DYNAMIC_OLDER) | |||
| set(CCOMMON_OPT "${CCOMMON_OPT} -DDYNAMIC_OLDER") | |||
| @@ -35,7 +35,7 @@ if(CMAKE_CL_64 OR MINGW64) | |||
| elseif(MINGW OR (MSVC AND NOT CMAKE_CROSSCOMPILING)) | |||
| set(X86 1) | |||
| elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc.*|power.*|Power.*") | |||
| set(PPC 1) | |||
| set(POWER 1) | |||
| elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "mips64.*") | |||
| set(MIPS64 1) | |||
| elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "loongarch64.*") | |||
| @@ -88,7 +88,7 @@ if (X86_64) | |||
| set(ARCH "x86_64") | |||
| elseif(X86) | |||
| set(ARCH "x86") | |||
| elseif(PPC) | |||
| elseif(POWER) | |||
| set(ARCH "power") | |||
| elseif(MIPS32) | |||
| set(ARCH "mips") | |||
| @@ -103,7 +103,7 @@ else() | |||
| endif () | |||
| if (NOT BINARY) | |||
| if (X86_64 OR ARM64 OR PPC OR MIPS64 OR LOONGARCH64) | |||
| if (X86_64 OR ARM64 OR POWER OR MIPS64 OR LOONGARCH64) | |||
| set(BINARY 64) | |||
| else () | |||
| set(BINARY 32) | |||
| @@ -49,6 +49,8 @@ GenerateNamedObjects("openblas_get_config.c;openblas_get_parallel.c" "" "" 0 "" | |||
| if (DYNAMIC_ARCH) | |||
| if (ARM64) | |||
| list(APPEND COMMON_SOURCES dynamic_arm64.c) | |||
| elseif (POWER) | |||
| list(APPEND COMMON_SOURCES dynamic_power.c) | |||
| else () | |||
| list(APPEND COMMON_SOURCES dynamic.c) | |||
| endif () | |||
| @@ -596,11 +596,11 @@ endif () | |||
| GenerateNamedObjects("${KERNELDIR}/${${float_char}GEMM_SMALL_K_NN}" "" "gemm_small_kernel_nn" false "" "" false ${float_type}) | |||
| GenerateNamedObjects("${KERNELDIR}/${${float_char}GEMM_SMALL_K_NT}" "" "gemm_small_kernel_nt" false "" "" false ${float_type}) | |||
| GenerateNamedObjects("${KERNELDIR}/${${float_char}GEMM_SMALL_K_TN}" "" "gemm_small_kernel_tn" false "" "" false ${float_type}) | |||
| GenerateNamedObjects("${KERNELDIR}/${${float_char}GEMM_SMALL_K_NT}" "" "gemm_small_kernel_tt" false "" "" false ${float_type}) | |||
| GenerateNamedObjects("${KERNELDIR}/${${float_char}GEMM_SMALL_K_TT}" "" "gemm_small_kernel_tt" false "" "" false ${float_type}) | |||
| GenerateNamedObjects("${KERNELDIR}/${${float_char}GEMM_SMALL_K_B0_NN}" "B0" "gemm_small_kernel_b0_nn" false "" "" false ${float_type}) | |||
| GenerateNamedObjects("${KERNELDIR}/${${float_char}GEMM_SMALL_K_B0_NT}" "B0" "gemm_small_kernel_b0_nt" false "" "" false ${float_type}) | |||
| GenerateNamedObjects("${KERNELDIR}/${${float_char}GEMM_SMALL_K_B0_TN}" "B0" "gemm_small_kernel_b0_tn" false "" "" false ${float_type}) | |||
| GenerateNamedObjects("${KERNELDIR}/${${float_char}GEMM_SMALL_K_B0_NT}" "B0" "gemm_small_kernel_b0_tt" false "" "" false ${float_type}) | |||
| GenerateNamedObjects("${KERNELDIR}/${${float_char}GEMM_SMALL_K_B0_TT}" "B0" "gemm_small_kernel_b0_tt" false "" "" false ${float_type}) | |||
| endif () | |||
| if (BUILD_BFLOAT16) | |||
| if (NOT DEFINED SBGEMM_SMALL_M_PERMIT) | |||
| @@ -634,11 +634,11 @@ endif () | |||
| GenerateNamedObjects("${KERNELDIR}/${SBGEMM_SMALL_K_NN}" "" "gemm_small_kernel_nn" false "" "" false "BFLOAT16") | |||
| GenerateNamedObjects("${KERNELDIR}/${SBGEMM_SMALL_K_NT}" "" "gemm_small_kernel_nt" false "" "" false "BFLOAT16") | |||
| GenerateNamedObjects("${KERNELDIR}/${SBGEMM_SMALL_K_TN}" "" "gemm_small_kernel_tn" false "" "" false "BFLOAT16") | |||
| GenerateNamedObjects("${KERNELDIR}/${SBGEMM_SMALL_K_NT}" "" "gemm_small_kernel_tt" false "" "" false "BFLOAT16") | |||
| GenerateNamedObjects("${KERNELDIR}/${SBGEMM_SMALL_K_TT}" "" "gemm_small_kernel_tt" false "" "" false "BFLOAT16") | |||
| GenerateNamedObjects("${KERNELDIR}/${SBGEMM_SMALL_K_B0_NN}" "B0" "gemm_small_kernel_b0_nn" false "" "" false "BFLOAT16") | |||
| GenerateNamedObjects("${KERNELDIR}/${SBGEMM_SMALL_K_B0_NT}" "B0" "gemm_small_kernel_b0_nt" false "" "" false "BFLOAT16") | |||
| GenerateNamedObjects("${KERNELDIR}/${SBGEMM_SMALL_K_B0_TN}" "B0" "gemm_small_kernel_b0_tn" false "" "" false "BFLOAT16") | |||
| GenerateNamedObjects("${KERNELDIR}/${SBGEMM_SMALL_K_B0_NT}" "B0" "gemm_small_kernel_b0_tt" false "" "" false "BFLOAT16") | |||
| GenerateNamedObjects("${KERNELDIR}/${SBGEMM_SMALL_K_B0_TT}" "B0" "gemm_small_kernel_b0_tt" false "" "" false "BFLOAT16") | |||
| endif () | |||
| endif () | |||