diff options
author | Haibo Huang <hhb@google.com> | 2020-04-01 03:49:28 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-04-01 03:49:28 +0000 |
commit | b8674bad4b615874dab52b847e59fe2170b2bc19 (patch) | |
tree | 18577d539775a9f289f4b6483bd25c60d72c574a | |
parent | 91d70fa4dc2b78fea7a22c44bbda9f2a0375494b (diff) | |
parent | 5775e8550fb90da8ec36f8839a27c15be8fab6a7 (diff) | |
download | cpuinfo-b8674bad4b615874dab52b847e59fe2170b2bc19.tar.gz |
Upgrade cpuinfo to '0cc563acb9baac39f2c1349bc42098c4a1da59e3' am: 509f21f3a7 am: 5775e8550f
Change-Id: If57d2ddad3fb8847e19a5cd579799480fd955060
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | CMakeLists.txt.orig | 819 | ||||
-rw-r--r-- | README.md | 15 | ||||
-rw-r--r-- | bench/get-current.cc | 9 | ||||
-rw-r--r-- | cmake/DownloadGoogleTest.cmake | 4 | ||||
-rwxr-xr-x | configure.py | 5 | ||||
-rw-r--r-- | src/arm/android/api.h | 1 | ||||
-rw-r--r-- | src/arm/android/properties.c | 4 | ||||
-rw-r--r-- | src/arm/api.h | 72 | ||||
-rw-r--r-- | src/arm/linux/api.h | 4 | ||||
-rw-r--r-- | src/arm/linux/chipset.c | 101 | ||||
-rw-r--r-- | src/cpuinfo/internal-api.h | 1 | ||||
-rw-r--r-- | src/init.c | 15 | ||||
-rw-r--r-- | src/x86/uarch.c | 4 | ||||
-rw-r--r-- | test/arm-cache.cc | 6 | ||||
-rw-r--r-- | test/mock/galaxy-s7-global.cc | 4 | ||||
-rw-r--r-- | test/mock/galaxy-s8-global.cc | 4 | ||||
-rw-r--r-- | test/mock/galaxy-s9-global.cc | 8 | ||||
-rw-r--r-- | test/mock/galaxy-s9-us.cc | 6 | ||||
-rw-r--r-- | test/name/proc-cpuinfo-hardware.cc | 5 |
20 files changed, 185 insertions, 903 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index de319ef..fefb60b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -179,7 +179,6 @@ IF(CPUINFO_SUPPORTED_PLATFORM) LIST(APPEND CPUINFO_SRCS src/linux/smallfile.c src/linux/multiline.c - src/linux/current.c src/linux/cpulist.c src/linux/processors.c) ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR CMAKE_SYSTEM_NAME STREQUAL "iOS") diff --git a/CMakeLists.txt.orig b/CMakeLists.txt.orig deleted file mode 100644 index a71aede..0000000 --- a/CMakeLists.txt.orig +++ /dev/null @@ -1,819 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12 FATAL_ERROR) - -INCLUDE(GNUInstallDirs) - -# ---[ Project and semantic versioning. -PROJECT(cpuinfo C CXX) - -# ---[ Options. -SET(CPUINFO_LIBRARY_TYPE "default" CACHE STRING "Type of cpuinfo library (shared, static, or default) to build") -SET_PROPERTY(CACHE CPUINFO_LIBRARY_TYPE PROPERTY STRINGS default static shared) -SET(CPUINFO_RUNTIME_TYPE "default" CACHE STRING "Type of runtime library (shared, static, or default) to use") -SET_PROPERTY(CACHE CPUINFO_RUNTIME_TYPE PROPERTY STRINGS default static shared) -SET(CPUINFO_LOG_LEVEL "default" CACHE STRING "Minimum logging level (info with lower severity will be ignored)") -SET_PROPERTY(CACHE CPUINFO_LOG_LEVEL PROPERTY STRINGS default debug info warning error fatal none) -OPTION(CPUINFO_BUILD_TOOLS "Build command-line tools" ON) -OPTION(CPUINFO_BUILD_UNIT_TESTS "Build cpuinfo unit tests" ON) -OPTION(CPUINFO_BUILD_MOCK_TESTS "Build cpuinfo mock tests" ON) -OPTION(CPUINFO_BUILD_BENCHMARKS "Build cpuinfo micro-benchmarks" ON) - -# ---[ CMake options -IF(CPUINFO_BUILD_UNIT_TESTS OR CPUINFO_BUILD_MOCK_TESTS) - ENABLE_TESTING() -ENDIF() - -MACRO(CPUINFO_TARGET_ENABLE_C99 target) - IF(${CMAKE_VERSION} VERSION_LESS "3.1") - IF(NOT MSVC) - TARGET_COMPILE_OPTIONS(${target} PRIVATE -std=c99) - ENDIF() - ELSE() - SET_TARGET_PROPERTIES(${target} PROPERTIES - C_STANDARD 99 - C_EXTENSIONS NO) - ENDIF() -ENDMACRO() - -MACRO(CPUINFO_TARGET_ENABLE_CXX11 target) - IF(${CMAKE_VERSION} VERSION_LESS "3.1") - IF(NOT MSVC) - TARGET_COMPILE_OPTIONS(${target} PRIVATE -std=c++11) - ENDIF() - ELSE() - SET_TARGET_PROPERTIES(${target} PROPERTIES - CXX_STANDARD 11 - CXX_EXTENSIONS NO) - ENDIF() -ENDMACRO() - -MACRO(CPUINFO_TARGET_RUNTIME_LIBRARY target) - IF(MSVC AND NOT CPUINFO_RUNTIME_TYPE STREQUAL "default") - IF(CPUINFO_RUNTIME_TYPE STREQUAL "shared") - TARGET_COMPILE_OPTIONS(${target} PRIVATE - "/MD$<$<CONFIG:Debug>:d>") - ELSEIF(CPUINFO_RUNTIME_TYPE STREQUAL "static") - TARGET_COMPILE_OPTIONS(${target} PRIVATE - "/MT$<$<CONFIG:Debug>:d>") - ENDIF() - ENDIF() -ENDMACRO() - -# ---[ Build flags -SET(CPUINFO_SUPPORTED_PLATFORM TRUE) -IF(NOT CMAKE_SYSTEM_PROCESSOR) - IF(NOT IOS) - MESSAGE(WARNING - "Target processor architecture is not specified. " - "cpuinfo will compile, but cpuinfo_initialize() will always fail.") - SET(CPUINFO_SUPPORTED_PLATFORM FALSE) - ENDIF() -ELSEIF(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^(i[3-6]86|AMD64|x86(_64)?|armv[5-8].*|aarch64)$") - MESSAGE(WARNING - "Target processor architecture \"${CMAKE_SYSTEM_PROCESSOR}\" is not supported in cpuinfo. " - "cpuinfo will compile, but cpuinfo_initialize() will always fail.") - SET(CPUINFO_SUPPORTED_PLATFORM FALSE) -ENDIF() - -IF(NOT CMAKE_SYSTEM_NAME) - MESSAGE(WARNING - "Target operating system is not specified. " - "cpuinfo will compile, but cpuinfo_initialize() will always fail.") - SET(CPUINFO_SUPPORTED_PLATFORM FALSE) -ELSEIF(NOT CMAKE_SYSTEM_NAME MATCHES "^(Windows|Darwin|Linux|Android)$") - IF(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.14" AND NOT CMAKE_SYSTEM_NAME STREQUAL "iOS") - MESSAGE(WARNING - "Target operating system \"${CMAKE_SYSTEM_NAME}\" is not supported in cpuinfo. " - "cpuinfo will compile, but cpuinfo_initialize() will always fail.") - SET(CPUINFO_SUPPORTED_PLATFORM FALSE) - ENDIF() -ENDIF() - -# ---[ Download deps -SET(CONFU_DEPENDENCIES_SOURCE_DIR ${CMAKE_SOURCE_DIR}/deps - CACHE PATH "Confu-style dependencies source directory") -SET(CONFU_DEPENDENCIES_BINARY_DIR ${CMAKE_BINARY_DIR}/deps - CACHE PATH "Confu-style dependencies binary directory") - -IF(CPUINFO_BUILD_MOCK_TESTS OR CPUINFO_BUILD_UNIT_TESTS) - IF(CPUINFO_SUPPORTED_PLATFORM AND NOT DEFINED GOOGLETEST_SOURCE_DIR) - MESSAGE(STATUS "Downloading Google Test to ${CONFU_DEPENDENCIES_SOURCE_DIR}/googletest (define GOOGLETEST_SOURCE_DIR to avoid it)") - CONFIGURE_FILE(cmake/DownloadGoogleTest.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest-download/CMakeLists.txt") - EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" . - WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest-download") - EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" --build . - WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest-download") - SET(GOOGLETEST_SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/googletest" CACHE STRING "Google Test source directory") - ENDIF() -ENDIF() - -IF(CPUINFO_BUILD_BENCHMARKS) - IF(CPUINFO_SUPPORTED_PLATFORM AND NOT DEFINED GOOGLEBENCHMARK_SOURCE_DIR) - MESSAGE(STATUS "Downloading Google Benchmark to ${CONFU_DEPENDENCIES_SOURCE_DIR}/googlebenchmark (define GOOGLEBENCHMARK_SOURCE_DIR to avoid it)") - CONFIGURE_FILE(cmake/DownloadGoogleBenchmark.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/googlebenchmark-download/CMakeLists.txt") - EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" . - WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/googlebenchmark-download") - EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" --build . - WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/googlebenchmark-download") - SET(GOOGLEBENCHMARK_SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/googlebenchmark" CACHE STRING "Google Benchmark source directory") - ENDIF() -ENDIF() - -# ---[ cpuinfo library -SET(CPUINFO_SRCS - src/init.c - src/api.c) - -IF(CPUINFO_SUPPORTED_PLATFORM) - IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(i[3-6]86|AMD64|x86(_64)?)$" OR IOS_ARCH MATCHES "^(i386|x86_64)$") - LIST(APPEND CPUINFO_SRCS - src/x86/init.c - src/x86/info.c - src/x86/vendor.c - src/x86/uarch.c - src/x86/name.c - src/x86/topology.c - src/x86/isa.c - src/x86/cache/init.c - src/x86/cache/descriptor.c - src/x86/cache/deterministic.c) - IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") - LIST(APPEND CPUINFO_SRCS - src/x86/linux/init.c - src/x86/linux/cpuinfo.c) - ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR CMAKE_SYSTEM_NAME STREQUAL "iOS") - LIST(APPEND CPUINFO_SRCS src/x86/mach/init.c) - ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "Windows") - LIST(APPEND CPUINFO_SRCS src/x86/windows/init.c) - ENDIF() - ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv[5-8].*|aarch64)$" OR IOS_ARCH MATCHES "^(armv7.*|arm64.*)$") - LIST(APPEND CPUINFO_SRCS - src/arm/uarch.c - src/arm/cache.c) - IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") - LIST(APPEND CPUINFO_SRCS - src/arm/linux/init.c - src/arm/linux/cpuinfo.c - src/arm/linux/clusters.c - src/arm/linux/chipset.c - src/arm/linux/midr.c - src/arm/linux/hwcap.c) - IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^armv[5-8]") - LIST(APPEND CPUINFO_SRCS src/arm/linux/aarch32-isa.c) - IF(CMAKE_SYSTEM_NAME STREQUAL "Android" AND ANDROID_ABI STREQUAL "armeabi") - SET_SOURCE_FILES_PROPERTIES(src/arm/linux/aarch32-isa.c PROPERTIES COMPILE_FLAGS -marm) - ENDIF() - ELSEIF(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64") - LIST(APPEND CPUINFO_SRCS src/arm/linux/aarch64-isa.c) - ENDIF() - ELSEIF(IOS) - LIST(APPEND CPUINFO_SRCS src/arm/mach/init.c) - ENDIF() - IF(CMAKE_SYSTEM_NAME STREQUAL "Android") - LIST(APPEND CPUINFO_SRCS - src/arm/android/properties.c) - ENDIF() - ENDIF() - - IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") - LIST(APPEND CPUINFO_SRCS - src/linux/smallfile.c - src/linux/multiline.c - src/linux/current.c - src/linux/cpulist.c - src/linux/processors.c) - ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR CMAKE_SYSTEM_NAME STREQUAL "iOS") - LIST(APPEND CPUINFO_SRCS src/mach/topology.c) - ENDIF() - - IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") - SET(CMAKE_THREAD_PREFER_PTHREAD TRUE) - SET(THREADS_PREFER_PTHREAD_FLAG TRUE) - FIND_PACKAGE(Threads REQUIRED) - ENDIF() -ENDIF() - -IF(CPUINFO_LIBRARY_TYPE STREQUAL "default") - ADD_LIBRARY(cpuinfo ${CPUINFO_SRCS}) -ELSEIF(CPUINFO_LIBRARY_TYPE STREQUAL "shared") - ADD_LIBRARY(cpuinfo SHARED ${CPUINFO_SRCS}) -ELSEIF(CPUINFO_LIBRARY_TYPE STREQUAL "static") - ADD_LIBRARY(cpuinfo STATIC ${CPUINFO_SRCS}) -ELSE() - MESSAGE(FATAL_ERROR "Unsupported library type ${CPUINFO_LIBRARY_TYPE}") -ENDIF() -ADD_LIBRARY(cpuinfo_internals STATIC ${CPUINFO_SRCS}) -CPUINFO_TARGET_ENABLE_C99(cpuinfo) -CPUINFO_TARGET_ENABLE_C99(cpuinfo_internals) -CPUINFO_TARGET_RUNTIME_LIBRARY(cpuinfo) -SET_TARGET_PROPERTIES(cpuinfo PROPERTIES PUBLIC_HEADER include/cpuinfo.h) -TARGET_INCLUDE_DIRECTORIES(cpuinfo BEFORE PUBLIC include) -TARGET_INCLUDE_DIRECTORIES(cpuinfo BEFORE PRIVATE src) -TARGET_INCLUDE_DIRECTORIES(cpuinfo_internals BEFORE PUBLIC include src) -IF(CPUINFO_LOG_LEVEL STREQUAL "default") - # default logging level: error (subject to change) - TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE CPUINFO_LOG_LEVEL=2) -ELSEIF(CPUINFO_LOG_LEVEL STREQUAL "debug") - TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE CPUINFO_LOG_LEVEL=5) -ELSEIF(CPUINFO_LOG_LEVEL STREQUAL "info") - TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE CPUINFO_LOG_LEVEL=4) -ELSEIF(CPUINFO_LOG_LEVEL STREQUAL "warning") - TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE CPUINFO_LOG_LEVEL=3) -ELSEIF(CPUINFO_LOG_LEVEL STREQUAL "error") - TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE CPUINFO_LOG_LEVEL=2) -ELSEIF(CPUINFO_LOG_LEVEL STREQUAL "fatal") - TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE CPUINFO_LOG_LEVEL=1) -ELSEIF(CPUINFO_LOG_LEVEL STREQUAL "none") - TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE CPUINFO_LOG_LEVEL=0) -ELSE() - MESSAGE(FATAL_ERROR "Unsupported logging level ${CPUINFO_LOG_LEVEL}") -ENDIF() -TARGET_COMPILE_DEFINITIONS(cpuinfo_internals PRIVATE CPUINFO_LOG_LEVEL=0) - -IF(CPUINFO_SUPPORTED_PLATFORM) - TARGET_COMPILE_DEFINITIONS(cpuinfo INTERFACE CPUINFO_SUPPORTED_PLATFORM=1) - IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") - TARGET_LINK_LIBRARIES(cpuinfo PUBLIC ${CMAKE_THREAD_LIBS_INIT}) - TARGET_LINK_LIBRARIES(cpuinfo_internals PUBLIC ${CMAKE_THREAD_LIBS_INIT}) - TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE _GNU_SOURCE=1) - TARGET_COMPILE_DEFINITIONS(cpuinfo_internals PRIVATE _GNU_SOURCE=1) - ENDIF() -ELSE() - TARGET_COMPILE_DEFINITIONS(cpuinfo INTERFACE CPUINFO_SUPPORTED_PLATFORM=0) -ENDIF() - -# ---[ cpuinfo dependencies: clog -IF(NOT DEFINED CLOG_SOURCE_DIR) - SET(CLOG_SOURCE_DIR "${PROJECT_SOURCE_DIR}/deps/clog") -ENDIF() -IF(NOT TARGET clog) - SET(CLOG_BUILD_TESTS OFF CACHE BOOL "") - SET(CLOG_RUNTIME_TYPE "${CPUINFO_RUNTIME_TYPE}" CACHE STRING "") - ADD_SUBDIRECTORY( - "${CLOG_SOURCE_DIR}") - # We build static version of clog but a dynamic library may indirectly depend on it - SET_PROPERTY(TARGET clog PROPERTY POSITION_INDEPENDENT_CODE ON) -ENDIF() -TARGET_LINK_LIBRARIES(cpuinfo PRIVATE clog) -TARGET_LINK_LIBRARIES(cpuinfo_internals PRIVATE clog) - -INSTALL(TARGETS cpuinfo - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) - -# ---[ cpuinfo micro-benchmarks -IF(CPUINFO_SUPPORTED_PLATFORM AND CPUINFO_BUILD_BENCHMARKS) - # ---[ Build google benchmark - IF(NOT TARGET benchmark) - SET(BENCHMARK_ENABLE_TESTING OFF CACHE BOOL "") - ADD_SUBDIRECTORY( - "${GOOGLEBENCHMARK_SOURCE_DIR}" - "${CONFU_DEPENDENCIES_BINARY_DIR}/googlebenchmark") - ENDIF() - - IF(CMAKE_SYSTEM_NAME MATCHES "^(Linux|Android)$") - ADD_EXECUTABLE(get-current-bench bench/get-current.cc) - TARGET_LINK_LIBRARIES(get-current-bench cpuinfo benchmark) - ENDIF() - - ADD_EXECUTABLE(init-bench bench/init.cc) - TARGET_LINK_LIBRARIES(init-bench cpuinfo benchmark) -ENDIF() - -IF(CPUINFO_SUPPORTED_PLATFORM) - IF(CPUINFO_BUILD_MOCK_TESTS OR CPUINFO_BUILD_UNIT_TESTS) - # ---[ Build google test - IF(NOT TARGET gtest) - IF(MSVC AND NOT CPUINFO_RUNTIME_TYPE STREQUAL "static") - SET(gtest_force_shared_crt ON CACHE BOOL "" FORCE) - ENDIF() - ADD_SUBDIRECTORY( - "${GOOGLETEST_SOURCE_DIR}" - "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest") - ENDIF() - ENDIF() -ENDIF() - -# ---[ cpuinfo mock library and mock tests -IF(CPUINFO_SUPPORTED_PLATFORM AND CPUINFO_BUILD_MOCK_TESTS) - SET(CPUINFO_MOCK_SRCS "${CPUINFO_SRCS}") - IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(i[3-6]86|AMD64|x86_64)$") - LIST(APPEND CPUINFO_MOCK_SRCS src/x86/mockcpuid.c) - ENDIF() - IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") - LIST(APPEND CPUINFO_MOCK_SRCS src/linux/mockfile.c) - ENDIF() - - ADD_LIBRARY(cpuinfo_mock STATIC ${CPUINFO_MOCK_SRCS}) - CPUINFO_TARGET_ENABLE_C99(cpuinfo_mock) - CPUINFO_TARGET_RUNTIME_LIBRARY(cpuinfo_mock) - SET_TARGET_PROPERTIES(cpuinfo_mock PROPERTIES PUBLIC_HEADER include/cpuinfo.h) - TARGET_INCLUDE_DIRECTORIES(cpuinfo_mock BEFORE PUBLIC include) - TARGET_INCLUDE_DIRECTORIES(cpuinfo_mock BEFORE PRIVATE src) - TARGET_COMPILE_DEFINITIONS(cpuinfo_mock PUBLIC CPUINFO_MOCK=1) - TARGET_COMPILE_DEFINITIONS(cpuinfo_mock PRIVATE CLOG_LOG_TO_STDIO=1) - IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") - TARGET_LINK_LIBRARIES(cpuinfo_mock PUBLIC ${CMAKE_THREAD_LIBS_INIT}) - TARGET_COMPILE_DEFINITIONS(cpuinfo_mock PRIVATE _GNU_SOURCE=1) - ENDIF() - TARGET_LINK_LIBRARIES(cpuinfo_mock PRIVATE clog) - - IF(CMAKE_SYSTEM_NAME STREQUAL "Android" AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv5te|armv7-a)$") - ADD_EXECUTABLE(atm7029b-tablet-test test/mock/atm7029b-tablet.cc) - TARGET_INCLUDE_DIRECTORIES(atm7029b-tablet-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(atm7029b-tablet-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(atm7029b-tablet-test atm7029b-tablet-test) - - ADD_EXECUTABLE(blu-r1-hd-test test/mock/blu-r1-hd.cc) - TARGET_INCLUDE_DIRECTORIES(blu-r1-hd-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(blu-r1-hd-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(blu-r1-hd-test blu-r1-hd-test) - - ADD_EXECUTABLE(galaxy-a3-2016-eu-test test/mock/galaxy-a3-2016-eu.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-a3-2016-eu-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-a3-2016-eu-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-a3-2016-eu-test galaxy-a3-2016-eu-test) - - ADD_EXECUTABLE(galaxy-a8-2016-duos-test test/mock/galaxy-a8-2016-duos.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-a8-2016-duos-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-a8-2016-duos-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-a8-2016-duos-test galaxy-a8-2016-duos-test) - - ADD_EXECUTABLE(galaxy-grand-prime-value-edition-test test/mock/galaxy-grand-prime-value-edition.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-grand-prime-value-edition-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-grand-prime-value-edition-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-grand-prime-value-edition-test galaxy-grand-prime-value-edition-test) - - ADD_EXECUTABLE(galaxy-j1-2016-test test/mock/galaxy-j1-2016.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-j1-2016-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-j1-2016-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-j1-2016-test galaxy-j1-2016-test) - - ADD_EXECUTABLE(galaxy-j5-test test/mock/galaxy-j5.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-j5-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-j5-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-j5-test galaxy-j5-test) - - ADD_EXECUTABLE(galaxy-j7-prime-test test/mock/galaxy-j7-prime.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-j7-prime-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-j7-prime-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-j7-prime-test galaxy-j7-prime-test) - - ADD_EXECUTABLE(galaxy-j7-tmobile-test test/mock/galaxy-j7-tmobile.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-j7-tmobile-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-j7-tmobile-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-j7-tmobile-test galaxy-j7-tmobile-test) - - ADD_EXECUTABLE(galaxy-j7-uae-test test/mock/galaxy-j7-uae.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-j7-uae-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-j7-uae-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-j7-uae-test galaxy-j7-uae-test) - - ADD_EXECUTABLE(galaxy-s3-us-test test/mock/galaxy-s3-us.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-s3-us-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-s3-us-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-s3-us-test galaxy-s3-us-test) - - ADD_EXECUTABLE(galaxy-s4-us-test test/mock/galaxy-s4-us.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-s4-us-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-s4-us-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-s4-us-test galaxy-s4-us-test) - - ADD_EXECUTABLE(galaxy-s5-global-test test/mock/galaxy-s5-global.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-s5-global-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-s5-global-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-s5-global-test galaxy-s5-global-test) - - ADD_EXECUTABLE(galaxy-s5-us-test test/mock/galaxy-s5-us.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-s5-us-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-s5-us-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-s5-us-test galaxy-s5-us-test) - - ADD_EXECUTABLE(galaxy-tab-3-7.0-test test/mock/galaxy-tab-3-7.0.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-tab-3-7.0-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-tab-3-7.0-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-tab-3-7.0-test galaxy-tab-3-7.0-test) - - ADD_EXECUTABLE(galaxy-tab-3-lite-test test/mock/galaxy-tab-3-lite.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-tab-3-lite-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-tab-3-lite-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-tab-3-lite-test galaxy-tab-3-lite-test) - - ADD_EXECUTABLE(galaxy-win-duos-test test/mock/galaxy-win-duos.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-win-duos-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-win-duos-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-win-duos-test galaxy-win-duos-test) - - ADD_EXECUTABLE(huawei-ascend-p7-test test/mock/huawei-ascend-p7.cc) - TARGET_INCLUDE_DIRECTORIES(huawei-ascend-p7-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(huawei-ascend-p7-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(huawei-ascend-p7-test huawei-ascend-p7-test) - - ADD_EXECUTABLE(huawei-honor-6-test test/mock/huawei-honor-6.cc) - TARGET_INCLUDE_DIRECTORIES(huawei-honor-6-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(huawei-honor-6-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(huawei-honor-6-test huawei-honor-6-test) - - ADD_EXECUTABLE(lenovo-a6600-plus-test test/mock/lenovo-a6600-plus.cc) - TARGET_INCLUDE_DIRECTORIES(lenovo-a6600-plus-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(lenovo-a6600-plus-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(lenovo-a6600-plus-test lenovo-a6600-plus-test) - - ADD_EXECUTABLE(lenovo-vibe-x2-test test/mock/lenovo-vibe-x2.cc) - TARGET_INCLUDE_DIRECTORIES(lenovo-vibe-x2-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(lenovo-vibe-x2-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(lenovo-vibe-x2-test lenovo-vibe-x2-test) - - ADD_EXECUTABLE(lg-k10-eu-test test/mock/lg-k10-eu.cc) - TARGET_INCLUDE_DIRECTORIES(lg-k10-eu-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(lg-k10-eu-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(lg-k10-eu-test lg-k10-eu-test) - - ADD_EXECUTABLE(lg-optimus-g-pro-test test/mock/lg-optimus-g-pro.cc) - TARGET_INCLUDE_DIRECTORIES(lg-optimus-g-pro-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(lg-optimus-g-pro-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(lg-optimus-g-pro-test lg-optimus-g-pro-test) - - ADD_EXECUTABLE(moto-e-gen1-test test/mock/moto-e-gen1.cc) - TARGET_INCLUDE_DIRECTORIES(moto-e-gen1-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(moto-e-gen1-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(moto-e-gen1-test moto-e-gen1-test) - - ADD_EXECUTABLE(moto-g-gen1-test test/mock/moto-g-gen1.cc) - TARGET_INCLUDE_DIRECTORIES(moto-g-gen1-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(moto-g-gen1-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(moto-g-gen1-test moto-g-gen1-test) - - ADD_EXECUTABLE(moto-g-gen2-test test/mock/moto-g-gen2.cc) - TARGET_INCLUDE_DIRECTORIES(moto-g-gen2-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(moto-g-gen2-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(moto-g-gen2-test moto-g-gen2-test) - - ADD_EXECUTABLE(moto-g-gen3-test test/mock/moto-g-gen3.cc) - TARGET_INCLUDE_DIRECTORIES(moto-g-gen3-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(moto-g-gen3-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(moto-g-gen3-test moto-g-gen3-test) - - ADD_EXECUTABLE(moto-g-gen4-test test/mock/moto-g-gen4.cc) - TARGET_INCLUDE_DIRECTORIES(moto-g-gen4-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(moto-g-gen4-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(moto-g-gen4-test moto-g-gen4-test) - - ADD_EXECUTABLE(moto-g-gen5-test test/mock/moto-g-gen5.cc) - TARGET_INCLUDE_DIRECTORIES(moto-g-gen5-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(moto-g-gen5-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(moto-g-gen5-test moto-g-gen5-test) - - ADD_EXECUTABLE(nexus-s-test test/mock/nexus-s.cc) - TARGET_INCLUDE_DIRECTORIES(nexus-s-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(nexus-s-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(nexus-s-test nexus-s-test) - - ADD_EXECUTABLE(nexus4-test test/mock/nexus4.cc) - TARGET_INCLUDE_DIRECTORIES(nexus4-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(nexus4-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(nexus4-test nexus4-test) - - ADD_EXECUTABLE(nexus6-test test/mock/nexus6.cc) - TARGET_INCLUDE_DIRECTORIES(nexus6-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(nexus6-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(nexus6-test nexus6-test) - - ADD_EXECUTABLE(nexus10-test test/mock/nexus10.cc) - TARGET_INCLUDE_DIRECTORIES(nexus10-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(nexus10-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(nexus10-test nexus10-test) - - ADD_EXECUTABLE(padcod-10.1-test test/mock/padcod-10.1.cc) - TARGET_INCLUDE_DIRECTORIES(padcod-10.1-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(padcod-10.1-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(padcod-10.1-test padcod-10.1-test) - - ADD_EXECUTABLE(xiaomi-redmi-2a-test test/mock/xiaomi-redmi-2a.cc) - TARGET_INCLUDE_DIRECTORIES(xiaomi-redmi-2a-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(xiaomi-redmi-2a-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(xiaomi-redmi-2a-test xiaomi-redmi-2a-test) - - ADD_EXECUTABLE(xperia-sl-test test/mock/xperia-sl.cc) - TARGET_INCLUDE_DIRECTORIES(xperia-sl-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(xperia-sl-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(xperia-sl-test xperia-sl-test) - ENDIF() - - IF(CMAKE_SYSTEM_NAME STREQUAL "Android" AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv5te|armv7-a|aarch64)$") - ADD_EXECUTABLE(alcatel-revvl-test test/mock/alcatel-revvl.cc) - TARGET_INCLUDE_DIRECTORIES(alcatel-revvl-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(alcatel-revvl-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(alcatel-revvl-test alcatel-revvl-test) - - ADD_EXECUTABLE(galaxy-a8-2018-test test/mock/galaxy-a8-2018.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-a8-2018-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-a8-2018-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-a8-2018-test galaxy-a8-2018-test) - - ADD_EXECUTABLE(galaxy-c9-pro-test test/mock/galaxy-c9-pro.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-c9-pro-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-c9-pro-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-c9-pro-test galaxy-c9-pro-test) - - ADD_EXECUTABLE(galaxy-s6-test test/mock/galaxy-s6.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-s6-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-s6-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-s6-test galaxy-s6-test) - - ADD_EXECUTABLE(galaxy-s7-us-test test/mock/galaxy-s7-us.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-s7-us-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-s7-us-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-s7-us-test galaxy-s7-us-test) - - ADD_EXECUTABLE(galaxy-s7-global-test test/mock/galaxy-s7-global.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-s7-global-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-s7-global-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-s7-global-test galaxy-s7-global-test) - - ADD_EXECUTABLE(galaxy-s8-us-test test/mock/galaxy-s8-us.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-s8-us-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-s8-us-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-s8-us-test galaxy-s8-us-test) - - ADD_EXECUTABLE(galaxy-s8-global-test test/mock/galaxy-s8-global.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-s8-global-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-s8-global-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-s8-global-test galaxy-s8-global-test) - - ADD_EXECUTABLE(galaxy-s9-us-test test/mock/galaxy-s9-us.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-s9-us-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-s9-us-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-s9-us-test galaxy-s9-us-test) - - ADD_EXECUTABLE(galaxy-s9-global-test test/mock/galaxy-s9-global.cc) - TARGET_INCLUDE_DIRECTORIES(galaxy-s9-global-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(galaxy-s9-global-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(galaxy-s9-global-test galaxy-s9-global-test) - - ADD_EXECUTABLE(huawei-mate-8-test test/mock/huawei-mate-8.cc) - TARGET_INCLUDE_DIRECTORIES(huawei-mate-8-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(huawei-mate-8-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(huawei-mate-8-test huawei-mate-8-test) - - ADD_EXECUTABLE(huawei-mate-9-test test/mock/huawei-mate-9.cc) - TARGET_INCLUDE_DIRECTORIES(huawei-mate-9-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(huawei-mate-9-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(huawei-mate-9-test huawei-mate-9-test) - - ADD_EXECUTABLE(huawei-mate-10-test test/mock/huawei-mate-10.cc) - TARGET_INCLUDE_DIRECTORIES(huawei-mate-10-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(huawei-mate-10-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(huawei-mate-10-test huawei-mate-10-test) - - ADD_EXECUTABLE(huawei-mate-20-test test/mock/huawei-mate-20.cc) - TARGET_INCLUDE_DIRECTORIES(huawei-mate-20-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(huawei-mate-20-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(huawei-mate-20-test huawei-mate-20-test) - - ADD_EXECUTABLE(huawei-p8-lite-test test/mock/huawei-p8-lite.cc) - TARGET_INCLUDE_DIRECTORIES(huawei-p8-lite-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(huawei-p8-lite-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(huawei-p8-lite-test huawei-p8-lite-test) - - ADD_EXECUTABLE(huawei-p9-lite-test test/mock/huawei-p9-lite.cc) - TARGET_INCLUDE_DIRECTORIES(huawei-p9-lite-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(huawei-p9-lite-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(huawei-p9-lite-test huawei-p9-lite-test) - - ADD_EXECUTABLE(huawei-p20-pro-test test/mock/huawei-p20-pro.cc) - TARGET_INCLUDE_DIRECTORIES(huawei-p20-pro-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(huawei-p20-pro-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(huawei-p20-pro-test huawei-p20-pro-test) - - ADD_EXECUTABLE(iconia-one-10-test test/mock/iconia-one-10.cc) - TARGET_INCLUDE_DIRECTORIES(iconia-one-10-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(iconia-one-10-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(iconia-one-10-test iconia-one-10-test) - - ADD_EXECUTABLE(meizu-pro-6-test test/mock/meizu-pro-6.cc) - TARGET_INCLUDE_DIRECTORIES(meizu-pro-6-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(meizu-pro-6-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(meizu-pro-6-test meizu-pro-6-test) - - ADD_EXECUTABLE(meizu-pro-6s-test test/mock/meizu-pro-6s.cc) - TARGET_INCLUDE_DIRECTORIES(meizu-pro-6s-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(meizu-pro-6s-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(meizu-pro-6s-test meizu-pro-6s-test) - - ADD_EXECUTABLE(meizu-pro-7-plus-test test/mock/meizu-pro-7-plus.cc) - TARGET_INCLUDE_DIRECTORIES(meizu-pro-7-plus-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(meizu-pro-7-plus-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(meizu-pro-7-plus-test meizu-pro-7-plus-test) - - ADD_EXECUTABLE(nexus5x-test test/mock/nexus5x.cc) - TARGET_INCLUDE_DIRECTORIES(nexus5x-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(nexus5x-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(nexus5x-test nexus5x-test) - - ADD_EXECUTABLE(nexus6p-test test/mock/nexus6p.cc) - TARGET_INCLUDE_DIRECTORIES(nexus6p-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(nexus6p-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(nexus6p-test nexus6p-test) - - ADD_EXECUTABLE(nexus9-test test/mock/nexus9.cc) - TARGET_INCLUDE_DIRECTORIES(nexus9-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(nexus9-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(nexus9-test nexus9-test) - - ADD_EXECUTABLE(oneplus-3t-test test/mock/oneplus-3t.cc) - TARGET_INCLUDE_DIRECTORIES(oneplus-3t-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(oneplus-3t-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(oneplus-3t-test oneplus-3t-test) - - ADD_EXECUTABLE(oneplus-5-test test/mock/oneplus-5.cc) - TARGET_INCLUDE_DIRECTORIES(oneplus-5-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(oneplus-5-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(oneplus-5-test oneplus-5-test) - - ADD_EXECUTABLE(oneplus-5t-test test/mock/oneplus-5t.cc) - TARGET_INCLUDE_DIRECTORIES(oneplus-5t-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(oneplus-5t-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(oneplus-5t-test oneplus-5t-test) - - ADD_EXECUTABLE(oppo-a37-test test/mock/oppo-a37.cc) - TARGET_INCLUDE_DIRECTORIES(oppo-a37-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(oppo-a37-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(oppo-a37-test oppo-a37-test) - - ADD_EXECUTABLE(oppo-r9-test test/mock/oppo-r9.cc) - TARGET_INCLUDE_DIRECTORIES(oppo-r9-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(oppo-r9-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(oppo-r9-test oppo-r9-test) - - ADD_EXECUTABLE(oppo-r15-test test/mock/oppo-r15.cc) - TARGET_INCLUDE_DIRECTORIES(oppo-r15-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(oppo-r15-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(oppo-r15-test oppo-r15-test) - - ADD_EXECUTABLE(pixel-test test/mock/pixel.cc) - TARGET_INCLUDE_DIRECTORIES(pixel-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(pixel-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(pixel-test pixel-test) - - ADD_EXECUTABLE(pixel-c-test test/mock/pixel-c.cc) - TARGET_INCLUDE_DIRECTORIES(pixel-c-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(pixel-c-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(pixel-c-test pixel-c-test) - - ADD_EXECUTABLE(pixel-xl-test test/mock/pixel-xl.cc) - TARGET_INCLUDE_DIRECTORIES(pixel-xl-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(pixel-xl-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(pixel-xl-test pixel-xl-test) - - ADD_EXECUTABLE(pixel-2-xl-test test/mock/pixel-2-xl.cc) - TARGET_INCLUDE_DIRECTORIES(pixel-2-xl-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(pixel-2-xl-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(pixel-2-xl-test pixel-2-xl-test) - - ADD_EXECUTABLE(xiaomi-mi-5c-test test/mock/xiaomi-mi-5c.cc) - TARGET_INCLUDE_DIRECTORIES(xiaomi-mi-5c-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(xiaomi-mi-5c-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(xiaomi-mi-5c-test xiaomi-mi-5c-test) - - ADD_EXECUTABLE(xiaomi-redmi-note-3-test test/mock/xiaomi-redmi-note-3.cc) - TARGET_INCLUDE_DIRECTORIES(xiaomi-redmi-note-3-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(xiaomi-redmi-note-3-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(xiaomi-redmi-note-3-test xiaomi-redmi-note-3-test) - - ADD_EXECUTABLE(xiaomi-redmi-note-4-test test/mock/xiaomi-redmi-note-4.cc) - TARGET_INCLUDE_DIRECTORIES(xiaomi-redmi-note-4-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(xiaomi-redmi-note-4-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(xiaomi-redmi-note-4-test xiaomi-redmi-note-4-test) - - ADD_EXECUTABLE(xperia-c4-dual-test test/mock/xperia-c4-dual.cc) - TARGET_INCLUDE_DIRECTORIES(xperia-c4-dual-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(xperia-c4-dual-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(xperia-c4-dual-test xperia-c4-dual-test) - ENDIF() - - IF(CMAKE_SYSTEM_NAME STREQUAL "Android" AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(i686|x86_64)$") - ADD_EXECUTABLE(alldocube-iwork8-test test/mock/alldocube-iwork8.cc) - TARGET_INCLUDE_DIRECTORIES(alldocube-iwork8-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(alldocube-iwork8-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(alldocube-iwork8-test alldocube-iwork8-test) - - ADD_EXECUTABLE(leagoo-t5c-test test/mock/leagoo-t5c.cc) - TARGET_INCLUDE_DIRECTORIES(leagoo-t5c-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(leagoo-t5c-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(leagoo-t5c-test leagoo-t5c-test) - - ADD_EXECUTABLE(memo-pad-7-test test/mock/memo-pad-7.cc) - TARGET_INCLUDE_DIRECTORIES(memo-pad-7-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(memo-pad-7-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(memo-pad-7-test memo-pad-7-test) - - ADD_EXECUTABLE(zenfone-c-test test/mock/zenfone-c.cc) - TARGET_INCLUDE_DIRECTORIES(zenfone-c-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(zenfone-c-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(zenfone-c-test zenfone-c-test) - - ADD_EXECUTABLE(zenfone-2-test test/mock/zenfone-2.cc) - TARGET_INCLUDE_DIRECTORIES(zenfone-2-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(zenfone-2-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(zenfone-2-test zenfone-2-test) - - ADD_EXECUTABLE(zenfone-2e-test test/mock/zenfone-2e.cc) - TARGET_INCLUDE_DIRECTORIES(zenfone-2e-test BEFORE PRIVATE test/mock) - TARGET_LINK_LIBRARIES(zenfone-2e-test PRIVATE cpuinfo_mock gtest) - ADD_TEST(zenfone-2e-test zenfone-2e-test) - ENDIF() -ENDIF() - -# ---[ cpuinfo unit tests -IF(CPUINFO_SUPPORTED_PLATFORM AND CPUINFO_BUILD_UNIT_TESTS) - ADD_EXECUTABLE(init-test test/init.cc) - CPUINFO_TARGET_ENABLE_CXX11(init-test) - CPUINFO_TARGET_RUNTIME_LIBRARY(init-test) - TARGET_LINK_LIBRARIES(init-test PRIVATE cpuinfo gtest gtest_main) - ADD_TEST(init-test init-test) - - IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") - ADD_EXECUTABLE(get-current-test test/get-current.cc) - CPUINFO_TARGET_ENABLE_CXX11(get-current-test) - CPUINFO_TARGET_RUNTIME_LIBRARY(get-current-test) - TARGET_LINK_LIBRARIES(get-current-test PRIVATE cpuinfo gtest gtest_main) - ADD_TEST(get-current-test get-current-test) - ENDIF() - - IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(i[3-6]86|AMD64|x86_64)$") - ADD_EXECUTABLE(brand-string-test test/name/brand-string.cc) - CPUINFO_TARGET_ENABLE_CXX11(brand-string-test) - CPUINFO_TARGET_RUNTIME_LIBRARY(brand-string-test) - TARGET_LINK_LIBRARIES(brand-string-test PRIVATE cpuinfo_internals gtest gtest_main) - ADD_TEST(brand-string-test brand-string-test) - ENDIF() - - IF(CMAKE_SYSTEM_NAME STREQUAL "Android" AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv[5-8].*|aarch64)$") - ADD_LIBRARY(android_properties_interface STATIC test/name/android-properties-interface.c) - CPUINFO_TARGET_ENABLE_C99(android_properties_interface) - CPUINFO_TARGET_RUNTIME_LIBRARY(android_properties_interface) - TARGET_LINK_LIBRARIES(android_properties_interface PRIVATE cpuinfo_internals) - - ADD_EXECUTABLE(chipset-test - test/name/proc-cpuinfo-hardware.cc - test/name/ro-product-board.cc - test/name/ro-board-platform.cc - test/name/ro-mediatek-platform.cc - test/name/ro-arch.cc - test/name/ro-chipname.cc - test/name/android-properties.cc) - CPUINFO_TARGET_ENABLE_CXX11(chipset-test) - CPUINFO_TARGET_RUNTIME_LIBRARY(chipset-test) - TARGET_LINK_LIBRARIES(chipset-test PRIVATE android_properties_interface gtest gtest_main) - ADD_TEST(chipset-test chipset-test) - - ADD_EXECUTABLE(cache-test test/arm-cache.cc) - CPUINFO_TARGET_ENABLE_CXX11(cache-test) - CPUINFO_TARGET_RUNTIME_LIBRARY(cache-test) - TARGET_COMPILE_DEFINITIONS(cache-test PRIVATE __STDC_LIMIT_MACROS=1 __STDC_CONSTANT_MACROS=1) - TARGET_LINK_LIBRARIES(cache-test PRIVATE cpuinfo_internals gtest gtest_main) - ADD_TEST(cache-test, cache-test) - ENDIF() -ENDIF() - -# ---[ Helper and debug tools -IF(CPUINFO_SUPPORTED_PLATFORM AND CPUINFO_BUILD_TOOLS) - ADD_EXECUTABLE(isa-info tools/isa-info.c) - CPUINFO_TARGET_ENABLE_C99(isa-info) - CPUINFO_TARGET_RUNTIME_LIBRARY(isa-info) - TARGET_LINK_LIBRARIES(isa-info PRIVATE cpuinfo) - INSTALL(TARGETS isa-info RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - - ADD_EXECUTABLE(cpu-info tools/cpu-info.c) - CPUINFO_TARGET_ENABLE_C99(cpu-info) - CPUINFO_TARGET_RUNTIME_LIBRARY(cpu-info) - TARGET_LINK_LIBRARIES(cpu-info PRIVATE cpuinfo) - INSTALL(TARGETS cpu-info RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - - ADD_EXECUTABLE(cache-info tools/cache-info.c) - CPUINFO_TARGET_ENABLE_C99(cache-info) - CPUINFO_TARGET_RUNTIME_LIBRARY(cache-info) - TARGET_LINK_LIBRARIES(cache-info PRIVATE cpuinfo) - INSTALL(TARGETS cache-info RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - - IF(CMAKE_SYSTEM_NAME MATCHES "^(Android|Linux)$" AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv[5-8].*|aarch64)$") - ADD_EXECUTABLE(auxv-dump tools/auxv-dump.c) - CPUINFO_TARGET_ENABLE_C99(auxv-dump) - CPUINFO_TARGET_RUNTIME_LIBRARY(auxv-dump) - TARGET_LINK_LIBRARIES(auxv-dump PRIVATE ${CMAKE_DL_LIBS} cpuinfo) - - ADD_EXECUTABLE(cpuinfo-dump tools/cpuinfo-dump.c) - CPUINFO_TARGET_ENABLE_C99(cpuinfo-dump) - CPUINFO_TARGET_RUNTIME_LIBRARY(cpuinfo-dump) - ENDIF() - - IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(i[3-6]86|AMD64|x86_64)$") - ADD_EXECUTABLE(cpuid-dump tools/cpuid-dump.c) - CPUINFO_TARGET_ENABLE_C99(cpuid-dump) - CPUINFO_TARGET_RUNTIME_LIBRARY(cpuid-dump) - TARGET_INCLUDE_DIRECTORIES(cpuid-dump BEFORE PRIVATE src) - TARGET_INCLUDE_DIRECTORIES(cpuid-dump BEFORE PRIVATE include) - INSTALL(TARGETS cpuid-dump RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - ENDIF() -ENDIF() @@ -152,21 +152,20 @@ pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpu_set); - [x] Using `ro.chipname`, `ro.board.platform`, `ro.product.board`, `ro.mediatek.platform`, `ro.arch` properties (Android) - [ ] Using kernel log (`dmesg`) on ARM Linux - Vendor and microarchitecture detection - - [x] Intel-designed x86/x86-64 cores (up to Kaby Lake, Airmont, and Knights Mill) - - [x] AMD-designed x86/x86-64 cores (up to Puma/Jaguar and Zen) + - [x] Intel-designed x86/x86-64 cores (up to Sunny Cove, Goldmont Plus, and Knights Mill) + - [x] AMD-designed x86/x86-64 cores (up to Puma/Jaguar and Zen 2) - [ ] VIA-designed x86/x86-64 cores - [ ] Other x86 cores (DM&P, RDC, Transmeta, Cyrix, Rise) - - [x] ARM-designed ARM cores (up to Cortex-A55 and Cortex-A75) - - [x] Qualcomm-designed ARM cores (up to Kryo, Kryo-280, and Kryo-385) - - [x] Nvidia-designed ARM cores (Denver) - - [x] Samsung-designed ARM cores (Mongoose and Meerkat) + - [x] ARM-designed ARM cores (up to Cortex-A55, Cortex-A77, and Neoverse E1/N1) + - [x] Qualcomm-designed ARM cores (Scorpion, Krait, and Kryo) + - [x] Nvidia-designed ARM cores (Denver and Carmel) + - [x] Samsung-designed ARM cores (Exynos) - [x] Intel-designed ARM cores (XScale up to 3rd-gen) - - [x] Apple-designed ARM cores (up to Hurricane) + - [x] Apple-designed ARM cores (up to Lightning and Thunder) - [x] Cavium-designed ARM cores (ThunderX) - [x] AppliedMicro-designed ARM cores (X-Gene) - Instruction set detection - [x] Using CPUID (x86/x86-64) - - [x] Using dynamic code generation validator (Native Client/x86-64) - [x] Using `/proc/cpuinfo` on 32-bit ARM EABI (Linux) - [x] Using microarchitecture heuristics on (32-bit ARM) - [x] Using `FPSID` and `WCID` registers (32-bit ARM) diff --git a/bench/get-current.cc b/bench/get-current.cc index 91b35a0..b547df0 100644 --- a/bench/get-current.cc +++ b/bench/get-current.cc @@ -21,4 +21,13 @@ static void cpuinfo_get_current_core(benchmark::State& state) { } BENCHMARK(cpuinfo_get_current_core)->Unit(benchmark::kNanosecond); +static void cpuinfo_get_current_uarch_index(benchmark::State& state) { + cpuinfo_initialize(); + while (state.KeepRunning()) { + const uint32_t uarch_index = cpuinfo_get_current_uarch_index(); + benchmark::DoNotOptimize(uarch_index); + } +} +BENCHMARK(cpuinfo_get_current_uarch_index)->Unit(benchmark::kNanosecond); + BENCHMARK_MAIN(); diff --git a/cmake/DownloadGoogleTest.cmake b/cmake/DownloadGoogleTest.cmake index d69d19a..dc86c9c 100644 --- a/cmake/DownloadGoogleTest.cmake +++ b/cmake/DownloadGoogleTest.cmake @@ -4,8 +4,8 @@ PROJECT(googletest-download NONE) INCLUDE(ExternalProject) ExternalProject_Add(googletest - URL https://github.com/google/googletest/archive/release-1.8.0.zip - URL_HASH SHA256=f3ed3b58511efd272eb074a3a6d6fb79d7c2e6a0e374323d1e6bcbcc1ef141bf + URL https://github.com/google/googletest/archive/release-1.10.0.zip + URL_HASH SHA256=94c634d499558a76fa649edb13721dce6e98fb1e7018dfaeba3cd7a083945e91 SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/googletest" BINARY_DIR "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest" CONFIGURE_COMMAND "" diff --git a/configure.py b/configure.py index a340c4c..0e58dba 100755 --- a/configure.py +++ b/configure.py @@ -26,8 +26,8 @@ def main(args): sources = ["init.c", "api.c"] if build.target.is_x86 or build.target.is_x86_64: sources += [ - "x86/init.c", "x86/info.c", "x86/vendor.c", "x86/uarch.c", "x86/name.c", - "x86/topology.c", + "x86/init.c", "x86/info.c", "x86/isa.c", "x86/vendor.c", + "x86/uarch.c", "x86/name.c", "x86/topology.c", "x86/cache/init.c", "x86/cache/descriptor.c", "x86/cache/deterministic.c", ] if build.target.is_macos: @@ -37,7 +37,6 @@ def main(args): "x86/linux/init.c", "x86/linux/cpuinfo.c", ] - sources.append("x86/isa.c" if not build.target.is_nacl else "x86/nacl/isa.c") if build.target.is_arm or build.target.is_arm64: sources += ["arm/uarch.c", "arm/cache.c"] if build.target.is_linux or build.target.is_android: diff --git a/src/arm/android/api.h b/src/arm/android/api.h index b959894..228632a 100644 --- a/src/arm/android/api.h +++ b/src/arm/android/api.h @@ -12,6 +12,7 @@ enum cpuinfo_android_chipset_property { cpuinfo_android_chipset_property_ro_mediatek_platform, cpuinfo_android_chipset_property_ro_arch, cpuinfo_android_chipset_property_ro_chipname, + cpuinfo_android_chipset_property_ro_hardware_chipname, cpuinfo_android_chipset_property_max, }; diff --git a/src/arm/android/properties.c b/src/arm/android/properties.c index 6e69647..5f93889 100644 --- a/src/arm/android/properties.c +++ b/src/arm/android/properties.c @@ -60,4 +60,8 @@ void cpuinfo_arm_android_parse_properties(struct cpuinfo_android_properties prop const int ro_chipname_length = cpuinfo_android_property_get("ro.chipname", properties->ro_chipname); cpuinfo_log_debug("read ro.chipname = \"%.*s\"", ro_chipname_length, properties->ro_chipname); + + const int ro_hardware_chipname_length = + cpuinfo_android_property_get("ro.hardware.chipname", properties->ro_hardware_chipname); + cpuinfo_log_debug("read ro.hardware.chipname = \"%.*s\"", ro_hardware_chipname_length, properties->ro_hardware_chipname); } diff --git a/src/arm/api.h b/src/arm/api.h index 69274bc..48b99dd 100644 --- a/src/arm/api.h +++ b/src/arm/api.h @@ -78,45 +78,45 @@ struct cpuinfo_arm_chipset { #define CPUINFO_ARM_CHIPSET_NAME_MAX CPUINFO_PACKAGE_NAME_MAX #ifndef __cplusplus -CPUINFO_INTERNAL void cpuinfo_arm_chipset_to_string( - const struct cpuinfo_arm_chipset chipset[restrict static 1], - char name[restrict static CPUINFO_ARM_CHIPSET_NAME_MAX]); + CPUINFO_INTERNAL void cpuinfo_arm_chipset_to_string( + const struct cpuinfo_arm_chipset chipset[restrict static 1], + char name[restrict static CPUINFO_ARM_CHIPSET_NAME_MAX]); -CPUINFO_INTERNAL void cpuinfo_arm_fixup_chipset( - struct cpuinfo_arm_chipset chipset[restrict static 1], uint32_t cores, uint32_t max_cpu_freq_max); + CPUINFO_INTERNAL void cpuinfo_arm_fixup_chipset( + struct cpuinfo_arm_chipset chipset[restrict static 1], uint32_t cores, uint32_t max_cpu_freq_max); -CPUINFO_INTERNAL void cpuinfo_arm_decode_vendor_uarch( - uint32_t midr, -#if CPUINFO_ARCH_ARM - bool has_vfpv4, -#endif - enum cpuinfo_vendor vendor[restrict static 1], - enum cpuinfo_uarch uarch[restrict static 1]); + CPUINFO_INTERNAL void cpuinfo_arm_decode_vendor_uarch( + uint32_t midr, + #if CPUINFO_ARCH_ARM + bool has_vfpv4, + #endif + enum cpuinfo_vendor vendor[restrict static 1], + enum cpuinfo_uarch uarch[restrict static 1]); -CPUINFO_INTERNAL void cpuinfo_arm_decode_cache( - enum cpuinfo_uarch uarch, - uint32_t cluster_cores, - uint32_t midr, - const struct cpuinfo_arm_chipset chipset[restrict static 1], - uint32_t cluster_id, - uint32_t arch_version, - struct cpuinfo_cache l1i[restrict static 1], - struct cpuinfo_cache l1d[restrict static 1], - struct cpuinfo_cache l2[restrict static 1], - struct cpuinfo_cache l3[restrict static 1]); + CPUINFO_INTERNAL void cpuinfo_arm_decode_cache( + enum cpuinfo_uarch uarch, + uint32_t cluster_cores, + uint32_t midr, + const struct cpuinfo_arm_chipset chipset[restrict static 1], + uint32_t cluster_id, + uint32_t arch_version, + struct cpuinfo_cache l1i[restrict static 1], + struct cpuinfo_cache l1d[restrict static 1], + struct cpuinfo_cache l2[restrict static 1], + struct cpuinfo_cache l3[restrict static 1]); -CPUINFO_INTERNAL uint32_t cpuinfo_arm_compute_max_cache_size( - const struct cpuinfo_processor processor[restrict static 1]); + CPUINFO_INTERNAL uint32_t cpuinfo_arm_compute_max_cache_size( + const struct cpuinfo_processor processor[restrict static 1]); #else /* defined(__cplusplus) */ -CPUINFO_INTERNAL void cpuinfo_arm_decode_cache( - enum cpuinfo_uarch uarch, - uint32_t cluster_cores, - uint32_t midr, - const struct cpuinfo_arm_chipset chipset[1], - uint32_t cluster_id, - uint32_t arch_version, - struct cpuinfo_cache l1i[1], - struct cpuinfo_cache l1d[1], - struct cpuinfo_cache l2[1], - struct cpuinfo_cache l3[1]); + CPUINFO_INTERNAL void cpuinfo_arm_decode_cache( + enum cpuinfo_uarch uarch, + uint32_t cluster_cores, + uint32_t midr, + const struct cpuinfo_arm_chipset chipset[1], + uint32_t cluster_id, + uint32_t arch_version, + struct cpuinfo_cache l1i[1], + struct cpuinfo_cache l1d[1], + struct cpuinfo_cache l2[1], + struct cpuinfo_cache l3[1]); #endif diff --git a/src/arm/linux/api.h b/src/arm/linux/api.h index afefdb3..f99da66 100644 --- a/src/arm/linux/api.h +++ b/src/arm/linux/api.h @@ -24,6 +24,7 @@ char ro_mediatek_platform[CPUINFO_BUILD_PROP_VALUE_MAX]; char ro_arch[CPUINFO_BUILD_PROP_VALUE_MAX]; char ro_chipname[CPUINFO_BUILD_PROP_VALUE_MAX]; + char ro_hardware_chipname[CPUINFO_BUILD_PROP_VALUE_MAX]; }; #endif @@ -323,6 +324,9 @@ CPUINFO_INTERNAL struct cpuinfo_arm_chipset CPUINFO_INTERNAL struct cpuinfo_arm_chipset cpuinfo_arm_android_decode_chipset_from_ro_chipname( const char ro_chipname[restrict static CPUINFO_BUILD_PROP_VALUE_MAX]); + CPUINFO_INTERNAL struct cpuinfo_arm_chipset + cpuinfo_arm_android_decode_chipset_from_ro_hardware_chipname( + const char ro_hardware_chipname[restrict static CPUINFO_BUILD_PROP_VALUE_MAX]); #endif CPUINFO_INTERNAL bool cpuinfo_arm_linux_detect_core_clusters_by_heuristic( diff --git a/src/arm/linux/chipset.c b/src/arm/linux/chipset.c index f365842..35058d9 100644 --- a/src/arm/linux/chipset.c +++ b/src/arm/linux/chipset.c @@ -235,6 +235,53 @@ static bool match_sdm( } /** + * Tries to match /SM\d{4}$/ signature for Qualcomm Snapdragon chipsets. + * If match successful, extracts model information into \p chipset argument. + * + * @param start - start of the /proc/cpuinfo Hardware string to match. + * @param end - end of the /proc/cpuinfo Hardware string to match. + * @param[out] chipset - location where chipset information will be stored upon a successful match. + * + * @returns true if signature matched, false otherwise. + */ +static bool match_sm( + const char* start, const char* end, + struct cpuinfo_arm_chipset chipset[restrict static 1]) +{ + /* Expect exactly 6 symbols: 2 symbols "SM" + 4 digits */ + if (start + 6 != end) { + return false; + } + + /* Check that string starts with "SM". + * The first three characters are loaded and compared as 16-bit little endian word. + */ + const uint32_t expected_sm = load_u16le(start); + if (expected_sm != UINT16_C(0x4D53) /* "MS" = reverse("SM") */) { + return false; + } + + /* Validate and parse 4-digit model number */ + uint32_t model = 0; + for (uint32_t i = 2; i < 6; i++) { + const uint32_t digit = (uint32_t) (uint8_t) start[i] - '0'; + if (digit >= 10) { + /* Not really a digit */ + return false; + } + model = model * 10 + digit; + } + + /* Return parsed chipset. */ + *chipset = (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_qualcomm, + .series = cpuinfo_arm_chipset_series_qualcomm_snapdragon, + .model = model, + }; + return true; +} + +/** * Tries to match /Samsung Exynos\d{4}$/ signature (case-insensitive) for Samsung Exynos chipsets. * If match successful, extracts model information into \p chipset argument. * @@ -735,7 +782,7 @@ static bool match_rk( } /** - * Tries to match, case-insentitively, /sc\d{4}[a-z]*|scx15$/ signature for Spreadtrum SC chipsets. + * Tries to match, case-insentitively, /s[cp]\d{4}[a-z]*|scx15$/ signature for Spreadtrum SC chipsets. * If match successful, extracts model information into \p chipset argument. * * @param start - start of the platform identifier (/proc/cpuinfo Hardware string, ro.product.board, @@ -756,12 +803,16 @@ static bool match_sc( } /* - * Check that string starts with "SC" (case-insensitive). + * Check that string starts with "S[CP]" (case-insensitive). * The first two characters are loaded as 16-bit little endian word and converted to lowercase. */ - const uint16_t expected_sc = UINT16_C(0x2020) | load_u16le(start); - if (expected_sc != UINT16_C(0x6373) /* "cs" = reverse("sc") */) { - return false; + const uint16_t expected_sc_or_sp = UINT16_C(0x2020) | load_u16le(start); + switch (expected_sc_or_sp) { + case UINT16_C(0x6373): /* "cs" = reverse("sc") */ + case UINT16_C(0x7073): /* "ps" = reverse("sp") */ + break; + default: + return false; } /* Special case: "scx" prefix (SC7715 reported as "scx15") */ @@ -785,7 +836,7 @@ static bool match_sc( return true; } - /* Expect at least 6 symbols: "SC" (2 symbols) + 4-digit model number */ + /* Expect at least 6 symbols: "S[CP]" (2 symbols) + 4-digit model number */ if (start + 6 > end) { return false; } @@ -2188,6 +2239,14 @@ struct cpuinfo_arm_chipset cpuinfo_arm_linux_decode_chipset_from_proc_cpuinfo_ha return chipset; } + /* Check SMxxxx (Qualcomm Snapdragon) signature */ + if (match_sm(pos, hardware_end, &chipset)) { + cpuinfo_log_debug( + "matched Qualcomm SM signature in /proc/cpuinfo Hardware string \"%.*s\"", + (int) hardware_length, hardware); + return chipset; + } + /* Check MediaTek MT signature */ if (match_mt(pos, hardware_end, true, &chipset)) { cpuinfo_log_debug( @@ -2949,13 +3008,14 @@ struct cpuinfo_arm_chipset cpuinfo_arm_linux_decode_chipset_from_proc_cpuinfo_ha } /* - * Decodes chipset name from ro.chipname Android system property. + * Decodes chipset name from ro.chipname or ro.hardware.chipname Android system property. * - * @param[in] chipname - ro.chipname value. + * @param[in] chipname - ro.chipname or ro.hardware.chipname value. * * @returns Decoded chipset name. If chipset could not be decoded, the resulting structure would use `unknown` vendor * and series identifiers. */ + struct cpuinfo_arm_chipset cpuinfo_arm_android_decode_chipset_from_ro_chipname( const char chipname[restrict static CPUINFO_BUILD_PROP_VALUE_MAX]) { @@ -2971,6 +3031,14 @@ struct cpuinfo_arm_chipset cpuinfo_arm_linux_decode_chipset_from_proc_cpuinfo_ha return chipset; } + /* Check SMxxxx (Qualcomm Snapdragon) signature */ + if (match_sm(chipname, chipname_end, &chipset)) { + cpuinfo_log_debug( + "matched Qualcomm SM signature in /proc/cpuinfo Hardware string \"%.*s\"", + (int) chipname_length, chipname); + return chipset; + } + /* Check exynosXXXX (Samsung Exynos) signature */ if (match_exynos(chipname, chipname_end, &chipset)) { cpuinfo_log_debug( @@ -3181,12 +3249,6 @@ void cpuinfo_arm_fixup_chipset( } break; } - case cpuinfo_arm_chipset_series_qualcomm_snapdragon: - /* Snapdragon 670 was renamed to Snapdragon 710 */ - if (chipset->model == 670) { - chipset->model = 710; - } - break; case cpuinfo_arm_chipset_series_samsung_exynos: switch (chipset->model) { #if CPUINFO_ARCH_ARM @@ -3372,8 +3434,12 @@ void cpuinfo_arm_chipset_to_string( const struct cpuinfo_arm_chipset proc_cpuinfo_hardware_chipset[restrict static 1], const struct cpuinfo_arm_chipset ro_product_board_chipset[restrict static 1], const struct cpuinfo_arm_chipset ro_board_platform_chipset[restrict static 1], - const struct cpuinfo_arm_chipset ro_chipname_chipset[restrict static 1]) + const struct cpuinfo_arm_chipset ro_chipname_chipset[restrict static 1], + const struct cpuinfo_arm_chipset ro_hardware_chipname_chipset[restrict static 1]) { + if (ro_hardware_chipname_chipset->series != cpuinfo_arm_chipset_series_unknown) { + return *ro_hardware_chipname_chipset; + } if (ro_chipname_chipset->series != cpuinfo_arm_chipset_series_unknown) { return *ro_chipname_chipset; } @@ -3524,6 +3590,8 @@ void cpuinfo_arm_chipset_to_string( cpuinfo_arm_android_decode_chipset_from_ro_arch(properties->ro_arch), [cpuinfo_android_chipset_property_ro_chipname] = cpuinfo_arm_android_decode_chipset_from_ro_chipname(properties->ro_chipname), + [cpuinfo_android_chipset_property_ro_hardware_chipname] = + cpuinfo_arm_android_decode_chipset_from_ro_chipname(properties->ro_hardware_chipname), }; enum cpuinfo_arm_chipset_vendor vendor = cpuinfo_arm_chipset_vendor_unknown; for (size_t i = 0; i < cpuinfo_android_chipset_property_max; i++) { @@ -3592,7 +3660,8 @@ void cpuinfo_arm_chipset_to_string( &chipsets[cpuinfo_android_chipset_property_proc_cpuinfo_hardware], &chipsets[cpuinfo_android_chipset_property_ro_product_board], &chipsets[cpuinfo_android_chipset_property_ro_board_platform], - &chipsets[cpuinfo_android_chipset_property_ro_chipname]); + &chipsets[cpuinfo_android_chipset_property_ro_chipname], + &chipsets[cpuinfo_android_chipset_property_ro_hardware_chipname]); case cpuinfo_arm_chipset_vendor_mediatek: return disambiguate_mediatek_chipset( &chipsets[cpuinfo_android_chipset_property_proc_cpuinfo_hardware], diff --git a/src/cpuinfo/internal-api.h b/src/cpuinfo/internal-api.h index 8d97e92..c6eed0b 100644 --- a/src/cpuinfo/internal-api.h +++ b/src/cpuinfo/internal-api.h @@ -55,6 +55,7 @@ CPUINFO_PRIVATE void cpuinfo_x86_linux_init(void); #endif CPUINFO_PRIVATE void cpuinfo_arm_mach_init(void); CPUINFO_PRIVATE void cpuinfo_arm_linux_init(void); +CPUINFO_PRIVATE void cpuinfo_emscripten_init(void); CPUINFO_PRIVATE uint32_t cpuinfo_compute_max_cache_size(const struct cpuinfo_processor* processor); @@ -1,6 +1,6 @@ #ifdef _WIN32 #include <windows.h> -#else +#elif !defined(__EMSCRIPTEN__) || defined(__EMSCRIPTEN_PTHREADS__) #include <pthread.h> #endif @@ -15,8 +15,10 @@ #ifdef _WIN32 static INIT_ONCE init_guard = INIT_ONCE_STATIC_INIT; -#else +#elif !defined(__EMSCRIPTEN__) || defined(__EMSCRIPTEN_PTHREADS__) static pthread_once_t init_guard = PTHREAD_ONCE_INIT; +#else + static bool init_guard = false; #endif bool CPUINFO_ABI cpuinfo_initialize(void) { @@ -38,6 +40,15 @@ bool CPUINFO_ABI cpuinfo_initialize(void) { #else cpuinfo_log_error("operating system is not supported in cpuinfo"); #endif +#elif CPUINFO_ARCH_ASMJS || CPUINFO_ARCH_WASM || CPUINFO_ARCH_WASMSIMD + #if defined(__EMSCRIPTEN_PTHREADS__) + pthread_once(&init_guard, &cpuinfo_emscripten_init); + #else + if (!init_guard) { + cpuinfo_emscripten_init(); + } + init_guard = true; + #endif #else cpuinfo_log_error("processor architecture is not supported in cpuinfo"); #endif diff --git a/src/x86/uarch.c b/src/x86/uarch.c index ec2c1ef..ecaa762 100644 --- a/src/x86/uarch.c +++ b/src/x86/uarch.c @@ -202,9 +202,9 @@ enum cpuinfo_uarch cpuinfo_x86_decode_uarch( } case 0x17: switch (model_info->model) { - case 0x01: // 14 nm Naples, Whitehaven, Summit Ridge, Snowy_Owl + case 0x01: // 14 nm Naples, Whitehaven, Summit Ridge, Snowy Owl case 0x08: // 12 nm Pinnacle Ridge - case 0x11: // 14 nm Raven_Ridge, Great Horned_Owl + case 0x11: // 14 nm Raven Ridge, Great Horned Owl case 0x18: // 12 nm Picasso return cpuinfo_uarch_zen; case 0x31: // Rome, Castle Peak diff --git a/test/arm-cache.cc b/test/arm-cache.cc index 8cbcc92..7d2e4a4 100644 --- a/test/arm-cache.cc +++ b/test/arm-cache.cc @@ -829,7 +829,7 @@ TEST(SAMSUNG, exynos_8890) { struct cpuinfo_cache big_l2 = { 0 }; struct cpuinfo_cache big_l3 = { 0 }; cpuinfo_arm_decode_cache( - cpuinfo_uarch_mongoose_m1, 4, UINT32_C(0x531F0011), + cpuinfo_uarch_exynos_m1, 4, UINT32_C(0x531F0011), &chipset, 0, 8, &big_l1i, &big_l1d, &big_l2, &big_l3); @@ -865,7 +865,7 @@ TEST(SAMSUNG, exynos_8895) { struct cpuinfo_cache big_l2 = { 0 }; struct cpuinfo_cache big_l3 = { 0 }; cpuinfo_arm_decode_cache( - cpuinfo_uarch_mongoose_m2, 4, UINT32_C(0x534F0010), + cpuinfo_uarch_exynos_m2, 4, UINT32_C(0x534F0010), &chipset, 0, 8, &big_l1i, &big_l1d, &big_l2, &big_l3); @@ -901,7 +901,7 @@ TEST(SAMSUNG, exynos_9810) { struct cpuinfo_cache big_l2 = { 0 }; struct cpuinfo_cache big_l3 = { 0 }; cpuinfo_arm_decode_cache( - cpuinfo_uarch_meerkat_m3, 4, UINT32_C(0x531F0020), + cpuinfo_uarch_exynos_m3, 4, UINT32_C(0x531F0020), &chipset, 0, 8, &big_l1i, &big_l1d, &big_l2, &big_l3); diff --git a/test/mock/galaxy-s7-global.cc b/test/mock/galaxy-s7-global.cc index 7a2ddab..620f2c1 100644 --- a/test/mock/galaxy-s7-global.cc +++ b/test/mock/galaxy-s7-global.cc @@ -188,7 +188,7 @@ TEST(CORES, uarch) { case 1: case 2: case 3: - ASSERT_EQ(cpuinfo_uarch_mongoose_m1, cpuinfo_get_core(i)->uarch); + ASSERT_EQ(cpuinfo_uarch_exynos_m1, cpuinfo_get_core(i)->uarch); break; case 4: case 5: @@ -313,7 +313,7 @@ TEST(CLUSTERS, uarch) { for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) { switch (i) { case 0: - ASSERT_EQ(cpuinfo_uarch_mongoose_m1, cpuinfo_get_cluster(i)->uarch); + ASSERT_EQ(cpuinfo_uarch_exynos_m1, cpuinfo_get_cluster(i)->uarch); break; case 1: ASSERT_EQ(cpuinfo_uarch_cortex_a53, cpuinfo_get_cluster(i)->uarch); diff --git a/test/mock/galaxy-s8-global.cc b/test/mock/galaxy-s8-global.cc index ae946ba..30a2826 100644 --- a/test/mock/galaxy-s8-global.cc +++ b/test/mock/galaxy-s8-global.cc @@ -188,7 +188,7 @@ TEST(CORES, uarch) { case 1: case 2: case 3: - ASSERT_EQ(cpuinfo_uarch_mongoose_m2, cpuinfo_get_core(i)->uarch); + ASSERT_EQ(cpuinfo_uarch_exynos_m2, cpuinfo_get_core(i)->uarch); break; case 4: case 5: @@ -313,7 +313,7 @@ TEST(CLUSTERS, uarch) { for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) { switch (i) { case 0: - ASSERT_EQ(cpuinfo_uarch_mongoose_m2, cpuinfo_get_cluster(i)->uarch); + ASSERT_EQ(cpuinfo_uarch_exynos_m2, cpuinfo_get_cluster(i)->uarch); break; case 1: ASSERT_EQ(cpuinfo_uarch_cortex_a53, cpuinfo_get_cluster(i)->uarch); diff --git a/test/mock/galaxy-s9-global.cc b/test/mock/galaxy-s9-global.cc index 412476e..6c72513 100644 --- a/test/mock/galaxy-s9-global.cc +++ b/test/mock/galaxy-s9-global.cc @@ -201,13 +201,13 @@ TEST(CORES, uarch) { case 1: case 2: case 3: - ASSERT_EQ(cpuinfo_uarch_meerkat_m3, cpuinfo_get_core(i)->uarch); + ASSERT_EQ(cpuinfo_uarch_exynos_m3, cpuinfo_get_core(i)->uarch); break; case 4: case 5: case 6: case 7: - ASSERT_EQ(cpuinfo_uarch_cortex_a55, cpuinfo_get_core(i)->uarch); + ASSERT_EQ(cpuinfo_uarch_cortex_a55r0, cpuinfo_get_core(i)->uarch); break; } } @@ -326,10 +326,10 @@ TEST(CLUSTERS, uarch) { for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) { switch (i) { case 0: - ASSERT_EQ(cpuinfo_uarch_meerkat_m3, cpuinfo_get_cluster(i)->uarch); + ASSERT_EQ(cpuinfo_uarch_exynos_m3, cpuinfo_get_cluster(i)->uarch); break; case 1: - ASSERT_EQ(cpuinfo_uarch_cortex_a55, cpuinfo_get_cluster(i)->uarch); + ASSERT_EQ(cpuinfo_uarch_cortex_a55r0, cpuinfo_get_cluster(i)->uarch); break; } } diff --git a/test/mock/galaxy-s9-us.cc b/test/mock/galaxy-s9-us.cc index 6df7f3c..ceea969 100644 --- a/test/mock/galaxy-s9-us.cc +++ b/test/mock/galaxy-s9-us.cc @@ -168,7 +168,7 @@ TEST(CORES, uarch) { case 5: case 6: case 7: - ASSERT_EQ(cpuinfo_uarch_cortex_a55, cpuinfo_get_core(i)->uarch); + ASSERT_EQ(cpuinfo_uarch_cortex_a55r0, cpuinfo_get_core(i)->uarch); break; } } @@ -283,7 +283,7 @@ TEST(CLUSTERS, uarch) { ASSERT_EQ(cpuinfo_uarch_cortex_a75, cpuinfo_get_cluster(i)->uarch); break; case 1: - ASSERT_EQ(cpuinfo_uarch_cortex_a55, cpuinfo_get_cluster(i)->uarch); + ASSERT_EQ(cpuinfo_uarch_cortex_a55r0, cpuinfo_get_cluster(i)->uarch); break; } } @@ -817,4 +817,4 @@ int main(int argc, char* argv[]) { cpuinfo_initialize(); ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); -}
\ No newline at end of file +} diff --git a/test/name/proc-cpuinfo-hardware.cc b/test/name/proc-cpuinfo-hardware.cc index 3076ea2..5e6561b 100644 --- a/test/name/proc-cpuinfo-hardware.cc +++ b/test/name/proc-cpuinfo-hardware.cc @@ -288,6 +288,11 @@ TEST(PROC_CPUINFO_HARDWARE, qualcomm_sdm) { parse_proc_cpuinfo_hardware("Qualcomm Technologies, Inc SDM660")); } +TEST(PROC_CPUINFO_HARDWARE, qualcomm_sm) { + EXPECT_EQ("Qualcomm Snapdragon 8150", + parse_proc_cpuinfo_hardware("Qualcomm Technologies, Inc SM8150")); +} + TEST(PROC_CPUINFO_HARDWARE, mediatek_mt) { EXPECT_EQ("MediaTek MT5507", parse_proc_cpuinfo_hardware("MT5507")); |