Skip to content

Commit

Permalink
Merge pull request #23944 from howie-f/v21-cmake-execute-process
Browse files Browse the repository at this point in the history
[cmake] 3.28 change exec_program to execute_process
  • Loading branch information
fuzzard committed May 9, 2024
2 parents f5a5789 + a0fdbfd commit 196a2e4
Showing 1 changed file with 18 additions and 54 deletions.
72 changes: 18 additions & 54 deletions cmake/modules/FindSSE.cmake
Expand Up @@ -4,74 +4,74 @@ include(TestCXXAcceptsFlag)

if(CMAKE_SYSTEM_NAME MATCHES "Linux")
if(CPU MATCHES "x86_64" OR CPU MATCHES "i.86")
exec_program(cat ARGS "/proc/cpuinfo" OUTPUT_VARIABLE CPUINFO)
execute_process(COMMAND cat /proc/cpuinfo OUTPUT_VARIABLE CPUINFO)

string(REGEX REPLACE "^.*(sse).*$" "\\1" _SSE_THERE ${CPUINFO})
string(REGEX REPLACE "^.*(sse).*$" "\\1" _SSE_THERE "${CPUINFO}")
string(COMPARE EQUAL "sse" "${_SSE_THERE}" _SSE_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-msse" _SSE_OK)

string(REGEX REPLACE "^.*(sse2).*$" "\\1" _SSE_THERE ${CPUINFO})
string(REGEX REPLACE "^.*(sse2).*$" "\\1" _SSE_THERE "${CPUINFO}")
string(COMPARE EQUAL "sse2" "${_SSE_THERE}" _SSE2_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-msse2" _SSE2_OK)

# SSE3 is also known as the Prescott New Instructions (PNI)
# it's labeled as pni in /proc/cpuinfo
string(REGEX REPLACE "^.*(pni).*$" "\\1" _SSE_THERE ${CPUINFO})
string(REGEX REPLACE "^.*(pni).*$" "\\1" _SSE_THERE "${CPUINFO}")
string(COMPARE EQUAL "pni" "${_SSE_THERE}" _SSE3_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-msse3" _SSE3_OK)

string(REGEX REPLACE "^.*(ssse3).*$" "\\1" _SSE_THERE ${CPUINFO})
string(REGEX REPLACE "^.*(ssse3).*$" "\\1" _SSE_THERE "${CPUINFO}")
string(COMPARE EQUAL "ssse3" "${_SSE_THERE}" _SSSE3_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-mssse3" _SSSE3_OK)

string(REGEX REPLACE "^.*(sse4_1).*$" "\\1" _SSE_THERE ${CPUINFO})
string(REGEX REPLACE "^.*(sse4_1).*$" "\\1" _SSE_THERE "${CPUINFO}")
string(COMPARE EQUAL "sse4_1" "${_SSE_THERE}" _SSE41_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-msse4.1" _SSE41_OK)

string(REGEX REPLACE "^.*(sse4_2).*$" "\\1" _SSE_THERE ${CPUINFO})
string(REGEX REPLACE "^.*(sse4_2).*$" "\\1" _SSE_THERE "${CPUINFO}")
string(COMPARE EQUAL "sse4_2" "${_SSE_THERE}" _SSE42_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-msse4.2" _SSE42_OK)

string(REGEX REPLACE "^.*(avx).*$" "\\1" _SSE_THERE ${CPUINFO})
string(REGEX REPLACE "^.*(avx).*$" "\\1" _SSE_THERE "${CPUINFO}")
string(COMPARE EQUAL "avx" "${_SSE_THERE}" _AVX_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-mavx" _AVX_OK)

string(REGEX REPLACE "^.*(avx2).*$" "\\1" _SSE_THERE ${CPUINFO})
string(REGEX REPLACE "^.*(avx2).*$" "\\1" _SSE_THERE "${CPUINFO}")
string(COMPARE EQUAL "avx2" "${_SSE_THERE}" _AVX2_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-mavx2" _AVX2_OK)
endif()
elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
if(CPU MATCHES "amd64" OR CPU MATCHES "i.86")
exec_program(cat ARGS "/var/run/dmesg.boot | grep Features" OUTPUT_VARIABLE CPUINFO)
execute_process(COMMAND grep Features /var/run/dmesg.boot OUTPUT_VARIABLE CPUINFO)

string(REGEX REPLACE "^.*(SSE).*$" "\\1" _SSE_THERE ${CPUINFO})
string(REGEX REPLACE "^.*(SSE).*$" "\\1" _SSE_THERE "${CPUINFO}")
string(COMPARE EQUAL "SSE" "${_SSE_THERE}" _SSE_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-msse" _SSE_OK)

string(REGEX REPLACE "^.*(SSE2).*$" "\\1" _SSE_THERE ${CPUINFO})
string(REGEX REPLACE "^.*(SSE2).*$" "\\1" _SSE_THERE "${CPUINFO}")
string(COMPARE EQUAL "SSE2" "${_SSE_THERE}" _SSE2_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-msse2" _SSE2_OK)

string(REGEX REPLACE "^.*(SSE3).*$" "\\1" _SSE_THERE ${CPUINFO})
string(REGEX REPLACE "^.*(SSE3).*$" "\\1" _SSE_THERE "${CPUINFO}")
string(COMPARE EQUAL "SSE3" "${_SSE_THERE}" _SSE3_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-msse3" _SSE3_OK)

string(REGEX REPLACE "^.*(SSSE3).*$" "\\1" _SSE_THERE ${CPUINFO})
string(REGEX REPLACE "^.*(SSSE3).*$" "\\1" _SSE_THERE "${CPUINFO}")
string(COMPARE EQUAL "SSSE3" "${_SSE_THERE}" _SSSE3_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-mssse3" _SSSE3_OK)

string(REGEX REPLACE "^.*(SSE4.1).*$" "\\1" _SSE_THERE ${CPUINFO})
string(REGEX REPLACE "^.*(SSE4.1).*$" "\\1" _SSE_THERE "${CPUINFO}")
string(COMPARE EQUAL "SSE4.1" "${_SSE_THERE}" _SSE41_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-msse4.1" _SSE41_OK)
string(REGEX REPLACE "^.*(SSE4.2).*$" "\\1" _SSE_THERE ${CPUINFO})
string(REGEX REPLACE "^.*(SSE4.2).*$" "\\1" _SSE_THERE "${CPUINFO}")
string(COMPARE EQUAL "SSE4.2" "${_SSE_THERE}" _SSE42_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-msse4.2" _SSE42_OK)

string(REGEX REPLACE "^.*(AVX).*$" "\\1" _SSE_THERE ${CPUINFO})
string(REGEX REPLACE "^.*(AVX).*$" "\\1" _SSE_THERE "${CPUINFO}")
string(COMPARE EQUAL "AVX" "${_SSE_THERE}" _AVX_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-mavx" _AVX_OK)

string(REGEX REPLACE "^.*(AVX2).*$" "\\1" _SSE_THERE ${CPUINFO})
string(REGEX REPLACE "^.*(AVX2).*$" "\\1" _SSE_THERE "${CPUINFO}")
string(COMPARE EQUAL "AVX2" "${_SSE_THERE}" _AVX2_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-mavx2" _AVX2_OK)
endif()
Expand All @@ -91,42 +91,6 @@ elseif(CMAKE_SYSTEM_NAME MATCHES "Android")
CHECK_CXX_ACCEPTS_FLAG("-mavx" _AVX_OK)
CHECK_CXX_ACCEPTS_FLAG("-mavx2" _AVX2_OK)
endif()
elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
if(NOT CPU MATCHES "arm")
exec_program("/usr/sbin/sysctl -n machdep.cpu.features machdep.cpu.leaf7_features" OUTPUT_VARIABLE CPUINFO)

string(REGEX REPLACE "^.*[^S](SSE).*$" "\\1" _SSE_THERE ${CPUINFO})
string(COMPARE EQUAL "SSE" "${_SSE_THERE}" _SSE_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-msse" _SSE_OK)

string(REGEX REPLACE "^.*[^S](SSE2).*$" "\\1" _SSE_THERE ${CPUINFO})
string(COMPARE EQUAL "SSE2" "${_SSE_THERE}" _SSE2_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-msse2" _SSE2_OK)

string(REGEX REPLACE "^.*[^S](SSE3).*$" "\\1" _SSE_THERE ${CPUINFO})
string(COMPARE EQUAL "SSE3" "${_SSE_THERE}" _SSE3_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-msse3" _SSE3_OK)

string(REGEX REPLACE "^.*(SSSE3).*$" "\\1" _SSE_THERE ${CPUINFO})
string(COMPARE EQUAL "SSSE3" "${_SSE_THERE}" _SSSE3_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-mssse3" _SSSE3_OK)

string(REGEX REPLACE "^.*(SSE4.1).*$" "\\1" _SSE_THERE ${CPUINFO})
string(COMPARE EQUAL "SSE4.1" "${_SSE_THERE}" _SSE41_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-msse4.1" _SSE41_OK)

string(REGEX REPLACE "^.*(SSE4.2).*$" "\\1" _SSE_THERE ${CPUINFO})
string(COMPARE EQUAL "SSE4.2" "${_SSE_THERE}" _SSE42_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-msse4.2" _SSE42_OK)

string(REGEX REPLACE "^.*(AVX).*$" "\\1" _SSE_THERE ${CPUINFO})
string(COMPARE EQUAL "AVX" "${_SSE_THERE}" _AVX_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-mavx" _AVX_OK)

string(REGEX REPLACE "^.*(AVX2).*$" "\\1" _SSE_THERE ${CPUINFO})
string(COMPARE EQUAL "AVX2" "${_SSE_THERE}" _AVX2_TRUE)
CHECK_CXX_ACCEPTS_FLAG("-mavx2" _AVX2_OK)
endif()
elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
# TODO
if(ARCH STREQUAL win32 OR ARCH STREQUAL x64)
Expand Down

0 comments on commit 196a2e4

Please sign in to comment.