35 lines
1.3 KiB
CMake
35 lines
1.3 KiB
CMake
|
|
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
|
message("-- <FindVSX>")
|
|
EXEC_PROGRAM(LD_SHOW_AUXV=1 ARGS "/bin/true" OUTPUT_VARIABLE bintrue)
|
|
if(bintrue MATCHES "AT_PLATFORM:[ \\t\\n\\r]*([a-zA-Z0-9_]+)[ \\t\\n\\r]*")
|
|
if(CMAKE_MATCH_COUNT GREATER 0)
|
|
string(TOLOWER ${CMAKE_MATCH_1} platform)
|
|
if(${platform} MATCHES "^power")
|
|
message("-- POWER Platform: ${platform}")
|
|
SET(POWER_COMP TRUE CACHE BOOL "power ")
|
|
SET(CXX_VSX_FLAGS "${CXX_VSX_FLAGS} -mcpu=${platform} -mtune=${platform}" )
|
|
endif()
|
|
endif()
|
|
endif()
|
|
SET(VSX_CODE " #include <altivec.h>
|
|
int main() {
|
|
float __attribute__((aligned(16))) vptr_y[8] = { 1.0f,2.f,3.f,4.f,4.f,3.f,2.f,1.f };
|
|
__vector float v_result = vec_add(vec_vsx_ld(0, vptr_y), vec_vsx_ld(16, vptr_y));
|
|
return 0;
|
|
}")
|
|
#check_cxx_compiler_flag(-mvsx vsx_flag)
|
|
SET(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
|
|
SET(CMAKE_REQUIRED_FLAGS "-mvsx")
|
|
CHECK_C_SOURCE_COMPILES("${VSX_CODE}" C_VSX_FOUND)
|
|
CHECK_CXX_SOURCE_COMPILES("${VSX_CODE}" CXX_VSX_FOUND)
|
|
SET(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE})
|
|
if(CXX_VSX_FOUND)
|
|
message("-- VSX flag was set.")
|
|
SET(CXX_VSX_FLAGS "${CXX_VSX_FLAGS} -mvsx" )
|
|
elseif(POWER_COMP)
|
|
message(WARNING "-- VSX flag was not set.")
|
|
endif()
|
|
message("-- </FindVSX>")
|
|
endif()
|