1*da0073e9SAndroid Build Coastguard Worker# Check if the processor is an ARM and if Neon instruction are available on the machine where 2*da0073e9SAndroid Build Coastguard Worker# the project is compiled. 3*da0073e9SAndroid Build Coastguard Worker 4*da0073e9SAndroid Build Coastguard WorkerIF(CMAKE_SYSTEM_NAME MATCHES "Linux") 5*da0073e9SAndroid Build Coastguard Worker EXECUTE_PROCESS(COMMAND cat /proc/cpuinfo OUTPUT_VARIABLE CPUINFO) 6*da0073e9SAndroid Build Coastguard Worker 7*da0073e9SAndroid Build Coastguard Worker #neon instruction can be found on the majority part of modern ARM processor 8*da0073e9SAndroid Build Coastguard Worker STRING(REGEX REPLACE "^.*(neon).*$" "\\1" NEON_THERE "${CPUINFO}") 9*da0073e9SAndroid Build Coastguard Worker STRING(COMPARE EQUAL "neon" "${NEON_THERE}" NEON_TRUE) 10*da0073e9SAndroid Build Coastguard Worker IF (NEON_TRUE) 11*da0073e9SAndroid Build Coastguard Worker set(NEON_FOUND true CACHE BOOL "NEON available on host") 12*da0073e9SAndroid Build Coastguard Worker ELSE (NEON_TRUE) 13*da0073e9SAndroid Build Coastguard Worker set(NEON_FOUND false CACHE BOOL "NEON available on host") 14*da0073e9SAndroid Build Coastguard Worker ENDIF (NEON_TRUE) 15*da0073e9SAndroid Build Coastguard Worker 16*da0073e9SAndroid Build Coastguard Worker # on ARMv8, neon is inherit and instead listed as 'asimd' in /proc/cpuinfo 17*da0073e9SAndroid Build Coastguard Worker STRING(REGEX REPLACE "^.*(asimd).*$" "\\1" ASIMD_THERE "${CPUINFO}") 18*da0073e9SAndroid Build Coastguard Worker STRING(COMPARE EQUAL "asimd" "${ASIMD_THERE}" ASIMD_TRUE) 19*da0073e9SAndroid Build Coastguard Worker IF (ASIMD_TRUE) 20*da0073e9SAndroid Build Coastguard Worker set(ASIMD_FOUND true CACHE BOOL "ASIMD/NEON available on host") 21*da0073e9SAndroid Build Coastguard Worker ELSE (ASIMD_TRUE) 22*da0073e9SAndroid Build Coastguard Worker set(ASIMD_FOUND false CACHE BOOL "ASIMD/NEON available on host") 23*da0073e9SAndroid Build Coastguard Worker ENDIF (ASIMD_TRUE) 24*da0073e9SAndroid Build Coastguard Worker 25*da0073e9SAndroid Build Coastguard Worker #Find the processor type (for now OMAP3 or OMAP4) 26*da0073e9SAndroid Build Coastguard Worker STRING(REGEX REPLACE "^.*(OMAP3).*$" "\\1" OMAP3_THERE "${CPUINFO}") 27*da0073e9SAndroid Build Coastguard Worker STRING(COMPARE EQUAL "OMAP3" "${OMAP3_THERE}" OMAP3_TRUE) 28*da0073e9SAndroid Build Coastguard Worker IF (OMAP3_TRUE) 29*da0073e9SAndroid Build Coastguard Worker set(CORTEXA8_FOUND true CACHE BOOL "OMAP3 available on host") 30*da0073e9SAndroid Build Coastguard Worker ELSE (OMAP3_TRUE) 31*da0073e9SAndroid Build Coastguard Worker set(CORTEXA8_FOUND false CACHE BOOL "OMAP3 available on host") 32*da0073e9SAndroid Build Coastguard Worker ENDIF (OMAP3_TRUE) 33*da0073e9SAndroid Build Coastguard Worker 34*da0073e9SAndroid Build Coastguard Worker #Find the processor type (for now OMAP3 or OMAP4) 35*da0073e9SAndroid Build Coastguard Worker STRING(REGEX REPLACE "^.*(OMAP4).*$" "\\1" OMAP4_THERE "${CPUINFO}") 36*da0073e9SAndroid Build Coastguard Worker STRING(COMPARE EQUAL "OMAP4" "${OMAP4_THERE}" OMAP4_TRUE) 37*da0073e9SAndroid Build Coastguard Worker IF (OMAP4_TRUE) 38*da0073e9SAndroid Build Coastguard Worker set(CORTEXA9_FOUND true CACHE BOOL "OMAP4 available on host") 39*da0073e9SAndroid Build Coastguard Worker ELSE (OMAP4_TRUE) 40*da0073e9SAndroid Build Coastguard Worker set(CORTEXA9_FOUND false CACHE BOOL "OMAP4 available on host") 41*da0073e9SAndroid Build Coastguard Worker ENDIF (OMAP4_TRUE) 42*da0073e9SAndroid Build Coastguard Worker 43*da0073e9SAndroid Build Coastguard WorkerELSEIF(CMAKE_SYSTEM_NAME MATCHES "Darwin") 44*da0073e9SAndroid Build Coastguard Worker IF(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" AND NOT CMAKE_OSX_ARCHITECTURES STREQUAL "x86_64") 45*da0073e9SAndroid Build Coastguard Worker set(NEON_FOUND true CACHE BOOL "NEON available on ARM64") 46*da0073e9SAndroid Build Coastguard Worker ENDIF() 47*da0073e9SAndroid Build Coastguard Worker EXECUTE_PROCESS(COMMAND /usr/sbin/sysctl -n machdep.cpu.features OUTPUT_VARIABLE 48*da0073e9SAndroid Build Coastguard Worker CPUINFO) 49*da0073e9SAndroid Build Coastguard Worker 50*da0073e9SAndroid Build Coastguard Worker IF(NOT CPUINFO STREQUAL "") 51*da0073e9SAndroid Build Coastguard Worker #neon instruction can be found on the majority part of modern ARM processor 52*da0073e9SAndroid Build Coastguard Worker STRING(REGEX REPLACE "^.*(neon).*$" "\\1" NEON_THERE "${CPUINFO}") 53*da0073e9SAndroid Build Coastguard Worker STRING(COMPARE EQUAL "neon" "${NEON_THERE}" NEON_TRUE) 54*da0073e9SAndroid Build Coastguard Worker IF (NEON_TRUE) 55*da0073e9SAndroid Build Coastguard Worker set(NEON_FOUND true CACHE BOOL "NEON available on host") 56*da0073e9SAndroid Build Coastguard Worker ELSE (NEON_TRUE) 57*da0073e9SAndroid Build Coastguard Worker set(NEON_FOUND false CACHE BOOL "NEON available on host") 58*da0073e9SAndroid Build Coastguard Worker ENDIF (NEON_TRUE) 59*da0073e9SAndroid Build Coastguard Worker ENDIF() 60*da0073e9SAndroid Build Coastguard Worker 61*da0073e9SAndroid Build Coastguard WorkerELSEIF(CMAKE_SYSTEM_NAME MATCHES "Windows") 62*da0073e9SAndroid Build Coastguard Worker # TODO 63*da0073e9SAndroid Build Coastguard Worker set(CORTEXA8_FOUND false CACHE BOOL "OMAP3 not available on host") 64*da0073e9SAndroid Build Coastguard Worker set(CORTEXA9_FOUND false CACHE BOOL "OMAP4 not available on host") 65*da0073e9SAndroid Build Coastguard Worker set(NEON_FOUND false CACHE BOOL "NEON not available on host") 66*da0073e9SAndroid Build Coastguard WorkerELSE(CMAKE_SYSTEM_NAME MATCHES "Linux") 67*da0073e9SAndroid Build Coastguard Worker set(CORTEXA8_FOUND false CACHE BOOL "OMAP3 not available on host") 68*da0073e9SAndroid Build Coastguard Worker set(CORTEXA9_FOUND false CACHE BOOL "OMAP4 not available on host") 69*da0073e9SAndroid Build Coastguard Worker set(NEON_FOUND false CACHE BOOL "NEON not available on host") 70*da0073e9SAndroid Build Coastguard WorkerENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux") 71*da0073e9SAndroid Build Coastguard Worker 72*da0073e9SAndroid Build Coastguard Workerif(NOT NEON_FOUND) 73*da0073e9SAndroid Build Coastguard Worker MESSAGE(STATUS "Could not find hardware support for NEON on this machine.") 74*da0073e9SAndroid Build Coastguard Workerendif(NOT NEON_FOUND) 75*da0073e9SAndroid Build Coastguard Workerif(NOT CORTEXA8_FOUND) 76*da0073e9SAndroid Build Coastguard Worker MESSAGE(STATUS "No OMAP3 processor on this machine.") 77*da0073e9SAndroid Build Coastguard Workerendif(NOT CORTEXA8_FOUND) 78*da0073e9SAndroid Build Coastguard Workerif(NOT CORTEXA9_FOUND) 79*da0073e9SAndroid Build Coastguard Worker MESSAGE(STATUS "No OMAP4 processor on this machine.") 80*da0073e9SAndroid Build Coastguard Workerendif(NOT CORTEXA9_FOUND) 81*da0073e9SAndroid Build Coastguard Workermark_as_advanced(NEON_FOUND) 82