diff options
author | Martijn van Beurden <mvanb1@gmail.com> | 2021-07-01 11:20:33 +0200 |
---|---|---|
committer | Martijn van Beurden <mvanb1@gmail.com> | 2022-04-25 20:13:36 +0200 |
commit | 8c46644a8d3cf94d31cdc0b24837d7f2231e0a47 (patch) | |
tree | 890822f3f63d50190fb7af9634cd31fb37475003 /cmake | |
parent | d15bcf80a06bd5300e33d5f5c94d69fbf879f45a (diff) | |
download | flac-8c46644a8d3cf94d31cdc0b24837d7f2231e0a47.tar.gz |
[CMake] Add check for PPC64, POWER8/9 and vec_doubleh
Add checks for POWER8/9 intrinsics similar to those in autotools
to cmake
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/CheckAttribute.c.in | 6 | ||||
-rw-r--r-- | cmake/CheckAttribute.cmake | 23 | ||||
-rw-r--r-- | cmake/CheckCPUArch.cmake | 4 | ||||
-rw-r--r-- | cmake/CheckVSX.c.in | 6 | ||||
-rw-r--r-- | cmake/CheckVSX.cmake | 14 |
5 files changed, 53 insertions, 0 deletions
diff --git a/cmake/CheckAttribute.c.in b/cmake/CheckAttribute.c.in new file mode 100644 index 00000000..a3441462 --- /dev/null +++ b/cmake/CheckAttribute.c.in @@ -0,0 +1,6 @@ +int main (void) +{ + void foo(void) __attribute__ ((@CHECK_ATTRIBUTE@)); + ; + return 0; +}
\ No newline at end of file diff --git a/cmake/CheckAttribute.cmake b/cmake/CheckAttribute.cmake new file mode 100644 index 00000000..d2e1b500 --- /dev/null +++ b/cmake/CheckAttribute.cmake @@ -0,0 +1,23 @@ +macro(_CHECK_ATTRIBUTE ATTRIBUTE VARIABLE) + if(NOT DEFINED HAVE_${VARIABLE}) + message(STATUS "Check for __attribute__ ((${ATTRIBUTE})) ") + set(CHECK_ATTRIBUTE ${ATTRIBUTE}) + configure_file(${PROJECT_SOURCE_DIR}/cmake/CheckAttribute.c.in ${PROJECT_BINARY_DIR}/CMakeFiles/CMakeTmp/CheckAttribute.c @ONLY) + try_compile(HAVE_${VARIABLE} "${PROJECT_BINARY_DIR}" + "${PROJECT_BINARY_DIR}/CMakeFiles/CMakeTmp/CheckAttribute.c") + if(HAVE_${VARIABLE}) + message(STATUS "Check for __attribute__ ((${ATTRIBUTE})) - yes") + set(${VARIABLE} 1 CACHE INTERNAL "Result of CHECK_ATTRIBUTE ${ATTRIBUTE}" FORCE) + else () + message(STATUS "Check for __attribute__ ((${ATTRIBUTE})) - no") + endif() + endif () +endmacro(_CHECK_ATTRIBUTE) + +macro(CHECK_ATTRIBUTE_POWER8 VARIABLE) + _CHECK_ATTRIBUTE("target(\"cpu=power8\")" ${VARIABLE}) +endmacro(CHECK_ATTRIBUTE_POWER8) + +macro(CHECK_ATTRIBUTE_POWER9 VARIABLE) + _CHECK_ATTRIBUTE("target(\"cpu=power9\")" ${VARIABLE}) +endmacro(CHECK_ATTRIBUTE_POWER9) diff --git a/cmake/CheckCPUArch.cmake b/cmake/CheckCPUArch.cmake index 95330b4b..c9b7a5c3 100644 --- a/cmake/CheckCPUArch.cmake +++ b/cmake/CheckCPUArch.cmake @@ -21,3 +21,7 @@ endmacro(CHECK_CPU_ARCH_X64) macro(CHECK_CPU_ARCH_X86 VARIABLE) _CHECK_CPU_ARCH(x86 "defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) ||defined( __i386) || defined(_M_IX86)" ${VARIABLE}) endmacro(CHECK_CPU_ARCH_X86) + +macro(CHECK_CPU_ARCH_PPC64 VARIABLE) + _CHECK_CPU_ARCH(ppc64 "defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__) ||defined(_ARCH_PPC64)" ${VARIABLE}) +endmacro(CHECK_CPU_ARCH_PPC64)
\ No newline at end of file diff --git a/cmake/CheckVSX.c.in b/cmake/CheckVSX.c.in new file mode 100644 index 00000000..b172a491 --- /dev/null +++ b/cmake/CheckVSX.c.in @@ -0,0 +1,6 @@ +#include <altivec.h> +int main (void) +{ + vector float d = {0.0f,0.0f,0.0f,0.0f}; + vec_doubleh(d); +}
\ No newline at end of file diff --git a/cmake/CheckVSX.cmake b/cmake/CheckVSX.cmake new file mode 100644 index 00000000..1feddb18 --- /dev/null +++ b/cmake/CheckVSX.cmake @@ -0,0 +1,14 @@ +macro(CHECK_VSX VARIABLE) + if(NOT DEFINED HAVE_${VARIABLE}) + message(STATUS "Check whether VSX can be used") + configure_file(${PROJECT_SOURCE_DIR}/cmake/CheckVSX.c.in ${PROJECT_BINARY_DIR}/CMakeFiles/CMakeTmp/CheckVSX.c @ONLY) + try_compile(HAVE_${VARIABLE} "${PROJECT_BINARY_DIR}" + "${PROJECT_BINARY_DIR}/CMakeFiles/CMakeTmp/CheckVSX.c") + if(HAVE_${VARIABLE}) + message(STATUS "Check whether VSX can be used - yes") + set(${VARIABLE} 1 CACHE INTERNAL "Result of CHECK_VSX" FORCE) + else () + message(STATUS "Check whether VSX can be used - no") + endif() + endif () +endmacro(CHECK_VSX) |