blob: 304b3c90b5b4074a7f1a62bc0f726c35feadac0e [file] [log] [blame]
Abdelrauf95a17252020-12-10 13:35:02 -08001
2IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
3 message("-- <FindVSX>")
Sam Estep8c798e02021-03-05 17:19:22 -08004 EXEC_PROGRAM(LD_SHOW_AUXV=1 ARGS "/bin/true" OUTPUT_VARIABLE bintrue)
Abdelrauf95a17252020-12-10 13:35:02 -08005 if(bintrue MATCHES "AT_PLATFORM:[ \\t\\n\\r]*([a-zA-Z0-9_]+)[ \\t\\n\\r]*")
6 if(CMAKE_MATCH_COUNT GREATER 0)
7 string(TOLOWER ${CMAKE_MATCH_1} platform)
8 if(${platform} MATCHES "^power")
9 message("-- POWER Platform: ${platform}")
10 SET(POWER_COMP TRUE CACHE BOOL "power ")
11 SET(CXX_VSX_FLAGS "${CXX_VSX_FLAGS} -mcpu=${platform} -mtune=${platform}" )
12 endif()
13 endif()
14 endif()
Sam Estep8c798e02021-03-05 17:19:22 -080015 SET(VSX_CODE " #include <altivec.h>
Abdelrauf95a17252020-12-10 13:35:02 -080016 int main() {
17 float __attribute__((aligned(16))) vptr_y[8] = { 1.0f,2.f,3.f,4.f,4.f,3.f,2.f,1.f };
18 __vector float v_result = vec_add(vec_vsx_ld(0, vptr_y), vec_vsx_ld(16, vptr_y));
19 return 0;
20 }")
21 #check_cxx_compiler_flag(-mvsx vsx_flag)
22 SET(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
23 SET(CMAKE_REQUIRED_FLAGS "-mvsx")
24 CHECK_C_SOURCE_COMPILES("${VSX_CODE}" C_VSX_FOUND)
Sam Estep8c798e02021-03-05 17:19:22 -080025 CHECK_CXX_SOURCE_COMPILES("${VSX_CODE}" CXX_VSX_FOUND)
Abdelrauf95a17252020-12-10 13:35:02 -080026 SET(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE})
27 if(CXX_VSX_FOUND)
Sam Estep8c798e02021-03-05 17:19:22 -080028 message("-- VSX flag was set.")
Abdelrauf95a17252020-12-10 13:35:02 -080029 SET(CXX_VSX_FLAGS "${CXX_VSX_FLAGS} -mvsx" )
30 elseif(POWER_COMP)
Sam Estep8c798e02021-03-05 17:19:22 -080031 message(WARNING "-- VSX flag was not set.")
Abdelrauf95a17252020-12-10 13:35:02 -080032 endif()
Sam Estep8c798e02021-03-05 17:19:22 -080033 message("-- </FindVSX>")
Abdelrauf95a17252020-12-10 13:35:02 -080034endif()