summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorMartijn van Beurden <mvanb1@gmail.com>2021-07-01 11:20:33 +0200
committerMartijn van Beurden <mvanb1@gmail.com>2022-04-25 20:13:36 +0200
commit8c46644a8d3cf94d31cdc0b24837d7f2231e0a47 (patch)
tree890822f3f63d50190fb7af9634cd31fb37475003 /cmake
parentd15bcf80a06bd5300e33d5f5c94d69fbf879f45a (diff)
downloadflac-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.in6
-rw-r--r--cmake/CheckAttribute.cmake23
-rw-r--r--cmake/CheckCPUArch.cmake4
-rw-r--r--cmake/CheckVSX.c.in6
-rw-r--r--cmake/CheckVSX.cmake14
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)