1 2IF(CMAKE_SYSTEM_NAME MATCHES "Linux") 3 message("-- <FindVSX>") 4 EXEC_PROGRAM(LD_SHOW_AUXV=1 ARGS "/bin/true" OUTPUT_VARIABLE bintrue) 5 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() 15 SET(VSX_CODE " #include <altivec.h> 16 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) 25 CHECK_CXX_SOURCE_COMPILES("${VSX_CODE}" CXX_VSX_FOUND) 26 SET(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE}) 27 if(CXX_VSX_FOUND) 28 message("-- VSX flag was set.") 29 SET(CXX_VSX_FLAGS "${CXX_VSX_FLAGS} -mvsx" ) 30 elseif(POWER_COMP) 31 message(WARNING "-- VSX flag was not set.") 32 endif() 33 message("-- </FindVSX>") 34endif() 35