xref: /aosp_15_r20/external/pytorch/cmake/Modules/FindVSX.cmake (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1*da0073e9SAndroid Build Coastguard Worker
2*da0073e9SAndroid Build Coastguard WorkerIF(CMAKE_SYSTEM_NAME MATCHES "Linux")
3*da0073e9SAndroid Build Coastguard Worker  message("-- <FindVSX>")
4*da0073e9SAndroid Build Coastguard Worker  EXEC_PROGRAM(LD_SHOW_AUXV=1 ARGS "/bin/true" OUTPUT_VARIABLE bintrue)
5*da0073e9SAndroid Build Coastguard Worker  if(bintrue MATCHES "AT_PLATFORM:[ \\t\\n\\r]*([a-zA-Z0-9_]+)[ \\t\\n\\r]*")
6*da0073e9SAndroid Build Coastguard Worker    if(CMAKE_MATCH_COUNT GREATER 0)
7*da0073e9SAndroid Build Coastguard Worker      string(TOLOWER ${CMAKE_MATCH_1} platform)
8*da0073e9SAndroid Build Coastguard Worker      if(${platform} MATCHES "^power")
9*da0073e9SAndroid Build Coastguard Worker        message("-- POWER Platform: ${platform}")
10*da0073e9SAndroid Build Coastguard Worker        SET(POWER_COMP TRUE CACHE BOOL "power ")
11*da0073e9SAndroid Build Coastguard Worker        SET(CXX_VSX_FLAGS  "${CXX_VSX_FLAGS} -mcpu=${platform} -mtune=${platform}" )
12*da0073e9SAndroid Build Coastguard Worker      endif()
13*da0073e9SAndroid Build Coastguard Worker    endif()
14*da0073e9SAndroid Build Coastguard Worker  endif()
15*da0073e9SAndroid Build Coastguard Worker  SET(VSX_CODE " #include <altivec.h>
16*da0073e9SAndroid Build Coastguard Worker      int main() {
17*da0073e9SAndroid Build Coastguard Worker      float __attribute__((aligned(16))) vptr_y[8]   = { 1.0f,2.f,3.f,4.f,4.f,3.f,2.f,1.f };
18*da0073e9SAndroid Build Coastguard Worker      __vector float v_result = vec_add(vec_vsx_ld(0, vptr_y), vec_vsx_ld(16, vptr_y));
19*da0073e9SAndroid Build Coastguard Worker      return 0;
20*da0073e9SAndroid Build Coastguard Worker      }")
21*da0073e9SAndroid Build Coastguard Worker  #check_cxx_compiler_flag(-mvsx vsx_flag)
22*da0073e9SAndroid Build Coastguard Worker  SET(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
23*da0073e9SAndroid Build Coastguard Worker  SET(CMAKE_REQUIRED_FLAGS "-mvsx")
24*da0073e9SAndroid Build Coastguard Worker  CHECK_C_SOURCE_COMPILES("${VSX_CODE}"  C_VSX_FOUND)
25*da0073e9SAndroid Build Coastguard Worker  CHECK_CXX_SOURCE_COMPILES("${VSX_CODE}"  CXX_VSX_FOUND)
26*da0073e9SAndroid Build Coastguard Worker  SET(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE})
27*da0073e9SAndroid Build Coastguard Worker  if(CXX_VSX_FOUND)
28*da0073e9SAndroid Build Coastguard Worker    message("-- VSX flag was set.")
29*da0073e9SAndroid Build Coastguard Worker    SET(CXX_VSX_FLAGS  "${CXX_VSX_FLAGS} -mvsx" )
30*da0073e9SAndroid Build Coastguard Worker  elseif(POWER_COMP)
31*da0073e9SAndroid Build Coastguard Worker    message(WARNING "-- VSX flag was not set.")
32*da0073e9SAndroid Build Coastguard Worker  endif()
33*da0073e9SAndroid Build Coastguard Worker  message("-- </FindVSX>")
34*da0073e9SAndroid Build Coastguard Workerendif()
35