xref: /aosp_15_r20/external/cpuinfo/CMakeLists.txt (revision 2b54f0db79fd8303838913b20ff3780cddaa909f)
1*2b54f0dbSXin LiCMAKE_MINIMUM_REQUIRED(VERSION 3.5 FATAL_ERROR)
2*2b54f0dbSXin Li
3*2b54f0dbSXin Li# ---[ Setup project
4*2b54f0dbSXin LiPROJECT(
5*2b54f0dbSXin Li    cpuinfo
6*2b54f0dbSXin Li    LANGUAGES C CXX
7*2b54f0dbSXin Li    )
8*2b54f0dbSXin Li
9*2b54f0dbSXin Li# ---[ Options.
10*2b54f0dbSXin LiSET(CPUINFO_LIBRARY_TYPE "default" CACHE STRING "Type of cpuinfo library (shared, static, or default) to build")
11*2b54f0dbSXin LiSET_PROPERTY(CACHE CPUINFO_LIBRARY_TYPE PROPERTY STRINGS default static shared)
12*2b54f0dbSXin LiSET(CPUINFO_RUNTIME_TYPE "default" CACHE STRING "Type of runtime library (shared, static, or default) to use")
13*2b54f0dbSXin LiSET_PROPERTY(CACHE CPUINFO_RUNTIME_TYPE PROPERTY STRINGS default static shared)
14*2b54f0dbSXin LiSET(CPUINFO_LOG_LEVEL "default" CACHE STRING "Minimum logging level (info with lower severity will be ignored)")
15*2b54f0dbSXin LiSET_PROPERTY(CACHE CPUINFO_LOG_LEVEL PROPERTY STRINGS default debug info warning error fatal none)
16*2b54f0dbSXin LiOPTION(CPUINFO_BUILD_TOOLS "Build command-line tools" ON)
17*2b54f0dbSXin LiOPTION(CPUINFO_BUILD_UNIT_TESTS "Build cpuinfo unit tests" ON)
18*2b54f0dbSXin LiOPTION(CPUINFO_BUILD_MOCK_TESTS "Build cpuinfo mock tests" ON)
19*2b54f0dbSXin LiOPTION(CPUINFO_BUILD_BENCHMARKS "Build cpuinfo micro-benchmarks" ON)
20*2b54f0dbSXin LiOPTION(CPUINFO_BUILD_PKG_CONFIG "Build pkg-config manifest" ON)
21*2b54f0dbSXin Li
22*2b54f0dbSXin Li# ---[ CMake options
23*2b54f0dbSXin LiINCLUDE(GNUInstallDirs)
24*2b54f0dbSXin Li
25*2b54f0dbSXin LiIF(CPUINFO_BUILD_UNIT_TESTS OR CPUINFO_BUILD_MOCK_TESTS)
26*2b54f0dbSXin Li  ENABLE_TESTING()
27*2b54f0dbSXin LiENDIF()
28*2b54f0dbSXin Li
29*2b54f0dbSXin LiMACRO(CPUINFO_TARGET_ENABLE_C99 target)
30*2b54f0dbSXin Li  SET_TARGET_PROPERTIES(${target} PROPERTIES
31*2b54f0dbSXin Li    C_STANDARD 99
32*2b54f0dbSXin Li    C_EXTENSIONS NO)
33*2b54f0dbSXin LiENDMACRO()
34*2b54f0dbSXin Li
35*2b54f0dbSXin LiMACRO(CPUINFO_TARGET_ENABLE_CXX11 target)
36*2b54f0dbSXin Li  SET_TARGET_PROPERTIES(${target} PROPERTIES
37*2b54f0dbSXin Li    CXX_STANDARD 11
38*2b54f0dbSXin Li    CXX_EXTENSIONS NO)
39*2b54f0dbSXin LiENDMACRO()
40*2b54f0dbSXin Li
41*2b54f0dbSXin LiMACRO(CPUINFO_TARGET_RUNTIME_LIBRARY target)
42*2b54f0dbSXin Li  IF(MSVC AND NOT CPUINFO_RUNTIME_TYPE STREQUAL "default")
43*2b54f0dbSXin Li    IF(CPUINFO_RUNTIME_TYPE STREQUAL "shared")
44*2b54f0dbSXin Li      TARGET_COMPILE_OPTIONS(${target} PRIVATE
45*2b54f0dbSXin Li        "/MD$<$<CONFIG:Debug>:d>")
46*2b54f0dbSXin Li    ELSEIF(CPUINFO_RUNTIME_TYPE STREQUAL "static")
47*2b54f0dbSXin Li      TARGET_COMPILE_OPTIONS(${target} PRIVATE
48*2b54f0dbSXin Li        "/MT$<$<CONFIG:Debug>:d>")
49*2b54f0dbSXin Li    ENDIF()
50*2b54f0dbSXin Li  ENDIF()
51*2b54f0dbSXin LiENDMACRO()
52*2b54f0dbSXin Li
53*2b54f0dbSXin Li# -- [ Determine target processor
54*2b54f0dbSXin LiSET(CPUINFO_TARGET_PROCESSOR "${CMAKE_SYSTEM_PROCESSOR}")
55*2b54f0dbSXin LiIF(IOS OR (CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_OSX_ARCHITECTURES MATCHES "^(x86_64|arm64)$"))
56*2b54f0dbSXin Li  SET(CPUINFO_TARGET_PROCESSOR "${CMAKE_OSX_ARCHITECTURES}")
57*2b54f0dbSXin LiENDIF()
58*2b54f0dbSXin Li
59*2b54f0dbSXin Li# ---[ Build flags
60*2b54f0dbSXin LiSET(CPUINFO_SUPPORTED_PLATFORM TRUE)
61*2b54f0dbSXin LiIF(NOT CMAKE_SYSTEM_PROCESSOR)
62*2b54f0dbSXin Li  IF(NOT IOS)
63*2b54f0dbSXin Li    MESSAGE(WARNING
64*2b54f0dbSXin Li      "Target processor architecture is not specified. "
65*2b54f0dbSXin Li      "cpuinfo will compile, but cpuinfo_initialize() will always fail.")
66*2b54f0dbSXin Li    SET(CPUINFO_SUPPORTED_PLATFORM FALSE)
67*2b54f0dbSXin Li  ENDIF()
68*2b54f0dbSXin LiELSEIF(NOT CPUINFO_TARGET_PROCESSOR MATCHES "^(i[3-6]86|AMD64|x86(_64)?|armv[5-8].*|aarch64|arm64|ARM64)$")
69*2b54f0dbSXin Li  MESSAGE(WARNING
70*2b54f0dbSXin Li    "Target processor architecture \"${CPUINFO_TARGET_PROCESSOR}\" is not supported in cpuinfo. "
71*2b54f0dbSXin Li    "cpuinfo will compile, but cpuinfo_initialize() will always fail.")
72*2b54f0dbSXin Li  SET(CPUINFO_SUPPORTED_PLATFORM FALSE)
73*2b54f0dbSXin LiENDIF()
74*2b54f0dbSXin Li
75*2b54f0dbSXin LiIF(NOT CMAKE_SYSTEM_NAME)
76*2b54f0dbSXin Li    MESSAGE(WARNING
77*2b54f0dbSXin Li      "Target operating system is not specified. "
78*2b54f0dbSXin Li      "cpuinfo will compile, but cpuinfo_initialize() will always fail.")
79*2b54f0dbSXin Li  SET(CPUINFO_SUPPORTED_PLATFORM FALSE)
80*2b54f0dbSXin LiELSEIF(NOT CMAKE_SYSTEM_NAME MATCHES "^(Windows|CYGWIN|MSYS|Darwin|Linux|Android)$")
81*2b54f0dbSXin Li  IF(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.14" AND NOT CMAKE_SYSTEM_NAME STREQUAL "iOS")
82*2b54f0dbSXin Li    MESSAGE(WARNING
83*2b54f0dbSXin Li      "Target operating system \"${CMAKE_SYSTEM_NAME}\" is not supported in cpuinfo. "
84*2b54f0dbSXin Li      "cpuinfo will compile, but cpuinfo_initialize() will always fail.")
85*2b54f0dbSXin Li    SET(CPUINFO_SUPPORTED_PLATFORM FALSE)
86*2b54f0dbSXin Li  ENDIF()
87*2b54f0dbSXin LiENDIF()
88*2b54f0dbSXin Li
89*2b54f0dbSXin Li# ---[ Download deps
90*2b54f0dbSXin LiSET(CONFU_DEPENDENCIES_SOURCE_DIR ${CMAKE_SOURCE_DIR}/deps
91*2b54f0dbSXin Li  CACHE PATH "Confu-style dependencies source directory")
92*2b54f0dbSXin LiSET(CONFU_DEPENDENCIES_BINARY_DIR ${CMAKE_BINARY_DIR}/deps
93*2b54f0dbSXin Li  CACHE PATH "Confu-style dependencies binary directory")
94*2b54f0dbSXin Li
95*2b54f0dbSXin LiIF(CPUINFO_BUILD_MOCK_TESTS OR CPUINFO_BUILD_UNIT_TESTS)
96*2b54f0dbSXin Li  IF(CPUINFO_SUPPORTED_PLATFORM AND NOT DEFINED GOOGLETEST_SOURCE_DIR)
97*2b54f0dbSXin Li    MESSAGE(STATUS "Downloading Google Test to ${CONFU_DEPENDENCIES_SOURCE_DIR}/googletest (define GOOGLETEST_SOURCE_DIR to avoid it)")
98*2b54f0dbSXin Li    CONFIGURE_FILE(cmake/DownloadGoogleTest.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest-download/CMakeLists.txt")
99*2b54f0dbSXin Li    EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
100*2b54f0dbSXin Li      WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest-download")
101*2b54f0dbSXin Li    EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" --build .
102*2b54f0dbSXin Li      WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest-download")
103*2b54f0dbSXin Li    SET(GOOGLETEST_SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/googletest" CACHE STRING "Google Test source directory")
104*2b54f0dbSXin Li  ENDIF()
105*2b54f0dbSXin LiENDIF()
106*2b54f0dbSXin Li
107*2b54f0dbSXin LiIF(CPUINFO_BUILD_BENCHMARKS)
108*2b54f0dbSXin Li  IF(CPUINFO_SUPPORTED_PLATFORM AND NOT DEFINED GOOGLEBENCHMARK_SOURCE_DIR)
109*2b54f0dbSXin Li    MESSAGE(STATUS "Downloading Google Benchmark to ${CONFU_DEPENDENCIES_SOURCE_DIR}/googlebenchmark (define GOOGLEBENCHMARK_SOURCE_DIR to avoid it)")
110*2b54f0dbSXin Li    CONFIGURE_FILE(cmake/DownloadGoogleBenchmark.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/googlebenchmark-download/CMakeLists.txt")
111*2b54f0dbSXin Li    EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
112*2b54f0dbSXin Li      WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/googlebenchmark-download")
113*2b54f0dbSXin Li    EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" --build .
114*2b54f0dbSXin Li      WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/googlebenchmark-download")
115*2b54f0dbSXin Li    SET(GOOGLEBENCHMARK_SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/googlebenchmark" CACHE STRING "Google Benchmark source directory")
116*2b54f0dbSXin Li  ENDIF()
117*2b54f0dbSXin LiENDIF()
118*2b54f0dbSXin Li
119*2b54f0dbSXin Li# ---[ cpuinfo library
120*2b54f0dbSXin LiSET(CPUINFO_SRCS
121*2b54f0dbSXin Li  src/init.c
122*2b54f0dbSXin Li  src/api.c
123*2b54f0dbSXin Li  src/cache.c)
124*2b54f0dbSXin Li
125*2b54f0dbSXin LiIF(CPUINFO_SUPPORTED_PLATFORM)
126*2b54f0dbSXin Li  IF(NOT CMAKE_SYSTEM_NAME STREQUAL "Emscripten" AND (CPUINFO_TARGET_PROCESSOR MATCHES "^(i[3-6]86|AMD64|x86(_64)?)$" OR IOS_ARCH MATCHES "^(i386|x86_64)$"))
127*2b54f0dbSXin Li    LIST(APPEND CPUINFO_SRCS
128*2b54f0dbSXin Li      src/x86/init.c
129*2b54f0dbSXin Li      src/x86/info.c
130*2b54f0dbSXin Li      src/x86/vendor.c
131*2b54f0dbSXin Li      src/x86/uarch.c
132*2b54f0dbSXin Li      src/x86/name.c
133*2b54f0dbSXin Li      src/x86/topology.c
134*2b54f0dbSXin Li      src/x86/isa.c
135*2b54f0dbSXin Li      src/x86/cache/init.c
136*2b54f0dbSXin Li      src/x86/cache/descriptor.c
137*2b54f0dbSXin Li      src/x86/cache/deterministic.c)
138*2b54f0dbSXin Li    IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android")
139*2b54f0dbSXin Li      LIST(APPEND CPUINFO_SRCS
140*2b54f0dbSXin Li        src/x86/linux/init.c
141*2b54f0dbSXin Li        src/x86/linux/cpuinfo.c)
142*2b54f0dbSXin Li    ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR CMAKE_SYSTEM_NAME STREQUAL "iOS")
143*2b54f0dbSXin Li      LIST(APPEND CPUINFO_SRCS src/x86/mach/init.c)
144*2b54f0dbSXin Li    ELSEIF(CMAKE_SYSTEM_NAME MATCHES "^(Windows|CYGWIN|MSYS)$")
145*2b54f0dbSXin Li      LIST(APPEND CPUINFO_SRCS src/x86/windows/init.c)
146*2b54f0dbSXin Li    ENDIF()
147*2b54f0dbSXin Li  ELSEIF(CPUINFO_TARGET_PROCESSOR MATCHES "^(armv[5-8].*|aarch64|arm64)$" OR IOS_ARCH MATCHES "^(armv7.*|arm64.*)$")
148*2b54f0dbSXin Li    LIST(APPEND CPUINFO_SRCS
149*2b54f0dbSXin Li      src/arm/uarch.c
150*2b54f0dbSXin Li      src/arm/cache.c)
151*2b54f0dbSXin Li    IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android")
152*2b54f0dbSXin Li      LIST(APPEND CPUINFO_SRCS
153*2b54f0dbSXin Li        src/arm/linux/init.c
154*2b54f0dbSXin Li        src/arm/linux/cpuinfo.c
155*2b54f0dbSXin Li        src/arm/linux/clusters.c
156*2b54f0dbSXin Li        src/arm/linux/chipset.c
157*2b54f0dbSXin Li        src/arm/linux/midr.c
158*2b54f0dbSXin Li        src/arm/linux/hwcap.c)
159*2b54f0dbSXin Li      IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^armv[5-8]")
160*2b54f0dbSXin Li        LIST(APPEND CPUINFO_SRCS src/arm/linux/aarch32-isa.c)
161*2b54f0dbSXin Li        IF(CMAKE_SYSTEM_NAME STREQUAL "Android" AND ANDROID_ABI STREQUAL "armeabi")
162*2b54f0dbSXin Li          SET_SOURCE_FILES_PROPERTIES(src/arm/linux/aarch32-isa.c PROPERTIES COMPILE_FLAGS -marm)
163*2b54f0dbSXin Li        ENDIF()
164*2b54f0dbSXin Li      ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64)$")
165*2b54f0dbSXin Li        LIST(APPEND CPUINFO_SRCS src/arm/linux/aarch64-isa.c)
166*2b54f0dbSXin Li      ENDIF()
167*2b54f0dbSXin Li    ELSEIF(IOS OR (CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND CPUINFO_TARGET_PROCESSOR STREQUAL "arm64"))
168*2b54f0dbSXin Li      LIST(APPEND CPUINFO_SRCS src/arm/mach/init.c)
169*2b54f0dbSXin Li    ENDIF()
170*2b54f0dbSXin Li    IF(CMAKE_SYSTEM_NAME STREQUAL "Android")
171*2b54f0dbSXin Li      LIST(APPEND CPUINFO_SRCS
172*2b54f0dbSXin Li        src/arm/android/properties.c)
173*2b54f0dbSXin Li    ENDIF()
174*2b54f0dbSXin Li  ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "Windows" AND CPUINFO_TARGET_PROCESSOR STREQUAL "ARM64")
175*2b54f0dbSXin Li    LIST(APPEND CPUINFO_SRCS src/arm/windows/init-by-logical-sys-info.c)
176*2b54f0dbSXin Li    LIST(APPEND CPUINFO_SRCS src/arm/windows/init.c)
177*2b54f0dbSXin Li  ENDIF()
178*2b54f0dbSXin Li
179*2b54f0dbSXin Li  IF(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
180*2b54f0dbSXin Li    LIST(APPEND CPUINFO_SRCS
181*2b54f0dbSXin Li      src/emscripten/init.c)
182*2b54f0dbSXin Li  ENDIF()
183*2b54f0dbSXin Li
184*2b54f0dbSXin Li  IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android")
185*2b54f0dbSXin Li    LIST(APPEND CPUINFO_SRCS
186*2b54f0dbSXin Li      src/linux/smallfile.c
187*2b54f0dbSXin Li      src/linux/multiline.c
188*2b54f0dbSXin Li      src/linux/cpulist.c
189*2b54f0dbSXin Li      src/linux/processors.c)
190*2b54f0dbSXin Li  ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR CMAKE_SYSTEM_NAME STREQUAL "iOS")
191*2b54f0dbSXin Li    LIST(APPEND CPUINFO_SRCS src/mach/topology.c)
192*2b54f0dbSXin Li  ENDIF()
193*2b54f0dbSXin Li
194*2b54f0dbSXin Li  IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android")
195*2b54f0dbSXin Li    SET(CMAKE_THREAD_PREFER_PTHREAD TRUE)
196*2b54f0dbSXin Li    SET(THREADS_PREFER_PTHREAD_FLAG TRUE)
197*2b54f0dbSXin Li    FIND_PACKAGE(Threads REQUIRED)
198*2b54f0dbSXin Li  ENDIF()
199*2b54f0dbSXin LiENDIF()
200*2b54f0dbSXin Li
201*2b54f0dbSXin LiIF(CPUINFO_LIBRARY_TYPE STREQUAL "default")
202*2b54f0dbSXin Li  ADD_LIBRARY(cpuinfo ${CPUINFO_SRCS})
203*2b54f0dbSXin LiELSEIF(CPUINFO_LIBRARY_TYPE STREQUAL "shared")
204*2b54f0dbSXin Li  ADD_LIBRARY(cpuinfo SHARED ${CPUINFO_SRCS})
205*2b54f0dbSXin LiELSEIF(CPUINFO_LIBRARY_TYPE STREQUAL "static")
206*2b54f0dbSXin Li  ADD_LIBRARY(cpuinfo STATIC ${CPUINFO_SRCS})
207*2b54f0dbSXin LiELSE()
208*2b54f0dbSXin Li  MESSAGE(FATAL_ERROR "Unsupported library type ${CPUINFO_LIBRARY_TYPE}")
209*2b54f0dbSXin LiENDIF()
210*2b54f0dbSXin LiADD_LIBRARY(cpuinfo_internals STATIC ${CPUINFO_SRCS})
211*2b54f0dbSXin LiCPUINFO_TARGET_ENABLE_C99(cpuinfo)
212*2b54f0dbSXin LiCPUINFO_TARGET_ENABLE_C99(cpuinfo_internals)
213*2b54f0dbSXin LiCPUINFO_TARGET_RUNTIME_LIBRARY(cpuinfo)
214*2b54f0dbSXin LiIF(CMAKE_SYSTEM_NAME MATCHES "^(Windows|CYGWIN|MSYS)$")
215*2b54f0dbSXin Li  # Target Windows 7+ API
216*2b54f0dbSXin Li  TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE _WIN32_WINNT=0x0601)
217*2b54f0dbSXin Li  TARGET_COMPILE_DEFINITIONS(cpuinfo_internals PRIVATE _WIN32_WINNT=0x0601)
218*2b54f0dbSXin LiENDIF()
219*2b54f0dbSXin LiSET_TARGET_PROPERTIES(cpuinfo PROPERTIES PUBLIC_HEADER include/cpuinfo.h)
220*2b54f0dbSXin LiTARGET_INCLUDE_DIRECTORIES(cpuinfo BEFORE PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
221*2b54f0dbSXin LiTARGET_INCLUDE_DIRECTORIES(cpuinfo BEFORE PRIVATE src)
222*2b54f0dbSXin LiTARGET_INCLUDE_DIRECTORIES(cpuinfo_internals BEFORE PUBLIC include src)
223*2b54f0dbSXin LiIF(CPUINFO_LOG_LEVEL STREQUAL "default")
224*2b54f0dbSXin Li  # default logging level: error (subject to change)
225*2b54f0dbSXin Li  TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE CPUINFO_LOG_LEVEL=2)
226*2b54f0dbSXin LiELSEIF(CPUINFO_LOG_LEVEL STREQUAL "debug")
227*2b54f0dbSXin Li  TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE CPUINFO_LOG_LEVEL=5)
228*2b54f0dbSXin LiELSEIF(CPUINFO_LOG_LEVEL STREQUAL "info")
229*2b54f0dbSXin Li  TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE CPUINFO_LOG_LEVEL=4)
230*2b54f0dbSXin LiELSEIF(CPUINFO_LOG_LEVEL STREQUAL "warning")
231*2b54f0dbSXin Li  TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE CPUINFO_LOG_LEVEL=3)
232*2b54f0dbSXin LiELSEIF(CPUINFO_LOG_LEVEL STREQUAL "error")
233*2b54f0dbSXin Li  TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE CPUINFO_LOG_LEVEL=2)
234*2b54f0dbSXin LiELSEIF(CPUINFO_LOG_LEVEL STREQUAL "fatal")
235*2b54f0dbSXin Li  TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE CPUINFO_LOG_LEVEL=1)
236*2b54f0dbSXin LiELSEIF(CPUINFO_LOG_LEVEL STREQUAL "none")
237*2b54f0dbSXin Li  TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE CPUINFO_LOG_LEVEL=0)
238*2b54f0dbSXin LiELSE()
239*2b54f0dbSXin Li  MESSAGE(FATAL_ERROR "Unsupported logging level ${CPUINFO_LOG_LEVEL}")
240*2b54f0dbSXin LiENDIF()
241*2b54f0dbSXin LiTARGET_COMPILE_DEFINITIONS(cpuinfo_internals PRIVATE CPUINFO_LOG_LEVEL=0)
242*2b54f0dbSXin Li
243*2b54f0dbSXin LiIF(CPUINFO_SUPPORTED_PLATFORM)
244*2b54f0dbSXin Li  TARGET_COMPILE_DEFINITIONS(cpuinfo INTERFACE CPUINFO_SUPPORTED_PLATFORM=1)
245*2b54f0dbSXin Li  IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android")
246*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(cpuinfo PUBLIC ${CMAKE_THREAD_LIBS_INIT})
247*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(cpuinfo_internals PUBLIC ${CMAKE_THREAD_LIBS_INIT})
248*2b54f0dbSXin Li    TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE _GNU_SOURCE=1)
249*2b54f0dbSXin Li    TARGET_COMPILE_DEFINITIONS(cpuinfo_internals PRIVATE _GNU_SOURCE=1)
250*2b54f0dbSXin Li  ENDIF()
251*2b54f0dbSXin LiELSE()
252*2b54f0dbSXin Li  TARGET_COMPILE_DEFINITIONS(cpuinfo INTERFACE CPUINFO_SUPPORTED_PLATFORM=0)
253*2b54f0dbSXin LiENDIF()
254*2b54f0dbSXin Li
255*2b54f0dbSXin Li# ---[ cpuinfo dependencies: clog
256*2b54f0dbSXin LiIF(NOT DEFINED CLOG_SOURCE_DIR)
257*2b54f0dbSXin Li  SET(CLOG_SOURCE_DIR "${PROJECT_SOURCE_DIR}/deps/clog")
258*2b54f0dbSXin LiENDIF()
259*2b54f0dbSXin LiIF(NOT TARGET clog)
260*2b54f0dbSXin Li  SET(CLOG_BUILD_TESTS OFF CACHE BOOL "")
261*2b54f0dbSXin Li  SET(CLOG_RUNTIME_TYPE "${CPUINFO_RUNTIME_TYPE}" CACHE STRING "")
262*2b54f0dbSXin Li  ADD_SUBDIRECTORY(
263*2b54f0dbSXin Li    "${CLOG_SOURCE_DIR}")
264*2b54f0dbSXin Li  # We build static version of clog but a dynamic library may indirectly depend on it
265*2b54f0dbSXin Li  SET_PROPERTY(TARGET clog PROPERTY POSITION_INDEPENDENT_CODE ON)
266*2b54f0dbSXin LiENDIF()
267*2b54f0dbSXin LiTARGET_LINK_LIBRARIES(cpuinfo PRIVATE clog)
268*2b54f0dbSXin LiTARGET_LINK_LIBRARIES(cpuinfo_internals PRIVATE clog)
269*2b54f0dbSXin Li
270*2b54f0dbSXin LiADD_LIBRARY(${PROJECT_NAME}::cpuinfo ALIAS cpuinfo)
271*2b54f0dbSXin Li
272*2b54f0dbSXin Li# support find_package(cpuinfo CONFIG)
273*2b54f0dbSXin LiINCLUDE(CMakePackageConfigHelpers)
274*2b54f0dbSXin LiGET_FILENAME_COMPONENT(CONFIG_FILE_PATH ${CMAKE_CURRENT_BINARY_DIR}/cpuinfo-config.cmake ABSOLUTE)
275*2b54f0dbSXin LiCONFIGURE_PACKAGE_CONFIG_FILE(
276*2b54f0dbSXin Li  cmake/cpuinfo-config.cmake.in ${CONFIG_FILE_PATH}
277*2b54f0dbSXin Li  INSTALL_DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME})
278*2b54f0dbSXin LiINSTALL(FILES ${CONFIG_FILE_PATH}
279*2b54f0dbSXin Li  DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}) # cpuinfo_DIR ${prefix}/share/cpuinfo
280*2b54f0dbSXin Li
281*2b54f0dbSXin LiINSTALL(TARGETS cpuinfo
282*2b54f0dbSXin Li  EXPORT cpuinfo-targets
283*2b54f0dbSXin Li  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
284*2b54f0dbSXin Li  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
285*2b54f0dbSXin Li  PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
286*2b54f0dbSXin Li
287*2b54f0dbSXin LiINSTALL(EXPORT cpuinfo-targets
288*2b54f0dbSXin Li  NAMESPACE ${PROJECT_NAME}:: # IMPORTED cpuinfo::cpuinfo, cpuinfo::clog
289*2b54f0dbSXin Li  DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME})
290*2b54f0dbSXin Li
291*2b54f0dbSXin Li# ---[ cpuinfo micro-benchmarks
292*2b54f0dbSXin LiIF(CPUINFO_SUPPORTED_PLATFORM AND CPUINFO_BUILD_BENCHMARKS)
293*2b54f0dbSXin Li  # ---[ Build google benchmark
294*2b54f0dbSXin Li  IF(NOT TARGET benchmark)
295*2b54f0dbSXin Li    SET(BENCHMARK_ENABLE_TESTING OFF CACHE BOOL "")
296*2b54f0dbSXin Li    ADD_SUBDIRECTORY(
297*2b54f0dbSXin Li      "${GOOGLEBENCHMARK_SOURCE_DIR}"
298*2b54f0dbSXin Li      "${CONFU_DEPENDENCIES_BINARY_DIR}/googlebenchmark")
299*2b54f0dbSXin Li  ENDIF()
300*2b54f0dbSXin Li
301*2b54f0dbSXin Li  IF(CMAKE_SYSTEM_NAME MATCHES "^(Linux|Android)$")
302*2b54f0dbSXin Li    ADD_EXECUTABLE(get-current-bench bench/get-current.cc)
303*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(get-current-bench cpuinfo benchmark)
304*2b54f0dbSXin Li  ENDIF()
305*2b54f0dbSXin Li
306*2b54f0dbSXin Li  ADD_EXECUTABLE(init-bench bench/init.cc)
307*2b54f0dbSXin Li  TARGET_LINK_LIBRARIES(init-bench cpuinfo benchmark)
308*2b54f0dbSXin LiENDIF()
309*2b54f0dbSXin Li
310*2b54f0dbSXin LiIF(CPUINFO_SUPPORTED_PLATFORM)
311*2b54f0dbSXin Li  IF(CPUINFO_BUILD_MOCK_TESTS OR CPUINFO_BUILD_UNIT_TESTS)
312*2b54f0dbSXin Li    # ---[ Build google test
313*2b54f0dbSXin Li    IF(NOT TARGET gtest)
314*2b54f0dbSXin Li      IF(MSVC AND NOT CPUINFO_RUNTIME_TYPE STREQUAL "static")
315*2b54f0dbSXin Li        SET(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
316*2b54f0dbSXin Li      ENDIF()
317*2b54f0dbSXin Li      ADD_SUBDIRECTORY(
318*2b54f0dbSXin Li        "${GOOGLETEST_SOURCE_DIR}"
319*2b54f0dbSXin Li        "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest")
320*2b54f0dbSXin Li    ENDIF()
321*2b54f0dbSXin Li  ENDIF()
322*2b54f0dbSXin LiENDIF()
323*2b54f0dbSXin Li
324*2b54f0dbSXin Li# ---[ cpuinfo mock library and mock tests
325*2b54f0dbSXin LiIF(CPUINFO_SUPPORTED_PLATFORM AND CPUINFO_BUILD_MOCK_TESTS)
326*2b54f0dbSXin Li  SET(CPUINFO_MOCK_SRCS "${CPUINFO_SRCS}")
327*2b54f0dbSXin Li  IF(CPUINFO_TARGET_PROCESSOR MATCHES "^(i[3-6]86|AMD64|x86(_64)?)$")
328*2b54f0dbSXin Li    LIST(APPEND CPUINFO_MOCK_SRCS src/x86/mockcpuid.c)
329*2b54f0dbSXin Li  ENDIF()
330*2b54f0dbSXin Li  IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android")
331*2b54f0dbSXin Li    LIST(APPEND CPUINFO_MOCK_SRCS src/linux/mockfile.c)
332*2b54f0dbSXin Li  ENDIF()
333*2b54f0dbSXin Li
334*2b54f0dbSXin Li  ADD_LIBRARY(cpuinfo_mock STATIC ${CPUINFO_MOCK_SRCS})
335*2b54f0dbSXin Li  CPUINFO_TARGET_ENABLE_C99(cpuinfo_mock)
336*2b54f0dbSXin Li  CPUINFO_TARGET_RUNTIME_LIBRARY(cpuinfo_mock)
337*2b54f0dbSXin Li  SET_TARGET_PROPERTIES(cpuinfo_mock PROPERTIES PUBLIC_HEADER include/cpuinfo.h)
338*2b54f0dbSXin Li  TARGET_INCLUDE_DIRECTORIES(cpuinfo_mock BEFORE PUBLIC include)
339*2b54f0dbSXin Li  TARGET_INCLUDE_DIRECTORIES(cpuinfo_mock BEFORE PRIVATE src)
340*2b54f0dbSXin Li  TARGET_COMPILE_DEFINITIONS(cpuinfo_mock PUBLIC CPUINFO_MOCK=1)
341*2b54f0dbSXin Li  TARGET_COMPILE_DEFINITIONS(cpuinfo_mock PRIVATE CLOG_LOG_TO_STDIO=1)
342*2b54f0dbSXin Li  IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android")
343*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(cpuinfo_mock PUBLIC ${CMAKE_THREAD_LIBS_INIT})
344*2b54f0dbSXin Li    TARGET_COMPILE_DEFINITIONS(cpuinfo_mock PRIVATE _GNU_SOURCE=1)
345*2b54f0dbSXin Li  ENDIF()
346*2b54f0dbSXin Li  TARGET_LINK_LIBRARIES(cpuinfo_mock PRIVATE clog)
347*2b54f0dbSXin Li
348*2b54f0dbSXin Li  IF(CMAKE_SYSTEM_NAME STREQUAL "Android" AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv5te|armv7-a)$")
349*2b54f0dbSXin Li    ADD_EXECUTABLE(atm7029b-tablet-test test/mock/atm7029b-tablet.cc)
350*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(atm7029b-tablet-test BEFORE PRIVATE test/mock)
351*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(atm7029b-tablet-test PRIVATE cpuinfo_mock gtest)
352*2b54f0dbSXin Li    ADD_TEST(NAME atm7029b-tablet-test COMMAND atm7029b-tablet-test)
353*2b54f0dbSXin Li
354*2b54f0dbSXin Li    ADD_EXECUTABLE(blu-r1-hd-test test/mock/blu-r1-hd.cc)
355*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(blu-r1-hd-test BEFORE PRIVATE test/mock)
356*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(blu-r1-hd-test PRIVATE cpuinfo_mock gtest)
357*2b54f0dbSXin Li    ADD_TEST(NAME blu-r1-hd-test COMMAND blu-r1-hd-test)
358*2b54f0dbSXin Li
359*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-a3-2016-eu-test test/mock/galaxy-a3-2016-eu.cc)
360*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-a3-2016-eu-test BEFORE PRIVATE test/mock)
361*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-a3-2016-eu-test PRIVATE cpuinfo_mock gtest)
362*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-a3-2016-eu-test COMMAND galaxy-a3-2016-eu-test)
363*2b54f0dbSXin Li
364*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-a8-2016-duos-test test/mock/galaxy-a8-2016-duos.cc)
365*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-a8-2016-duos-test BEFORE PRIVATE test/mock)
366*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-a8-2016-duos-test PRIVATE cpuinfo_mock gtest)
367*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-a8-2016-duos-test COMMAND galaxy-a8-2016-duos-test)
368*2b54f0dbSXin Li
369*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-grand-prime-value-edition-test test/mock/galaxy-grand-prime-value-edition.cc)
370*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-grand-prime-value-edition-test BEFORE PRIVATE test/mock)
371*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-grand-prime-value-edition-test PRIVATE cpuinfo_mock gtest)
372*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-grand-prime-value-edition-test COMMAND galaxy-grand-prime-value-edition-test)
373*2b54f0dbSXin Li
374*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-j1-2016-test test/mock/galaxy-j1-2016.cc)
375*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-j1-2016-test BEFORE PRIVATE test/mock)
376*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-j1-2016-test PRIVATE cpuinfo_mock gtest)
377*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-j1-2016-test COMMAND galaxy-j1-2016-test)
378*2b54f0dbSXin Li
379*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-j5-test test/mock/galaxy-j5.cc)
380*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-j5-test BEFORE PRIVATE test/mock)
381*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-j5-test PRIVATE cpuinfo_mock gtest)
382*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-j5-test COMMAND galaxy-j5-test)
383*2b54f0dbSXin Li
384*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-j7-prime-test test/mock/galaxy-j7-prime.cc)
385*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-j7-prime-test BEFORE PRIVATE test/mock)
386*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-j7-prime-test PRIVATE cpuinfo_mock gtest)
387*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-j7-prime-test COMMAND galaxy-j7-prime-test)
388*2b54f0dbSXin Li
389*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-j7-tmobile-test test/mock/galaxy-j7-tmobile.cc)
390*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-j7-tmobile-test BEFORE PRIVATE test/mock)
391*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-j7-tmobile-test PRIVATE cpuinfo_mock gtest)
392*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-j7-tmobile-test COMMAND galaxy-j7-tmobile-test)
393*2b54f0dbSXin Li
394*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-j7-uae-test test/mock/galaxy-j7-uae.cc)
395*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-j7-uae-test BEFORE PRIVATE test/mock)
396*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-j7-uae-test PRIVATE cpuinfo_mock gtest)
397*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-j7-uae-test COMMAND galaxy-j7-uae-test)
398*2b54f0dbSXin Li
399*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-s3-us-test test/mock/galaxy-s3-us.cc)
400*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-s3-us-test BEFORE PRIVATE test/mock)
401*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-s3-us-test PRIVATE cpuinfo_mock gtest)
402*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-s3-us-test COMMAND galaxy-s3-us-test)
403*2b54f0dbSXin Li
404*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-s4-us-test test/mock/galaxy-s4-us.cc)
405*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-s4-us-test BEFORE PRIVATE test/mock)
406*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-s4-us-test PRIVATE cpuinfo_mock gtest)
407*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-s4-us-test COMMAND galaxy-s4-us-test)
408*2b54f0dbSXin Li
409*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-s5-global-test test/mock/galaxy-s5-global.cc)
410*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-s5-global-test BEFORE PRIVATE test/mock)
411*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-s5-global-test PRIVATE cpuinfo_mock gtest)
412*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-s5-global-test COMMAND galaxy-s5-global-test)
413*2b54f0dbSXin Li
414*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-s5-us-test test/mock/galaxy-s5-us.cc)
415*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-s5-us-test BEFORE PRIVATE test/mock)
416*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-s5-us-test PRIVATE cpuinfo_mock gtest)
417*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-s5-us-test COMMAND galaxy-s5-us-test)
418*2b54f0dbSXin Li
419*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-tab-3-7.0-test test/mock/galaxy-tab-3-7.0.cc)
420*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-tab-3-7.0-test BEFORE PRIVATE test/mock)
421*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-tab-3-7.0-test PRIVATE cpuinfo_mock gtest)
422*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-tab-3-7.0-test COMMAND galaxy-tab-3-7.0-test)
423*2b54f0dbSXin Li
424*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-tab-3-lite-test test/mock/galaxy-tab-3-lite.cc)
425*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-tab-3-lite-test BEFORE PRIVATE test/mock)
426*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-tab-3-lite-test PRIVATE cpuinfo_mock gtest)
427*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-tab-3-lite-test COMMAND galaxy-tab-3-lite-test)
428*2b54f0dbSXin Li
429*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-win-duos-test test/mock/galaxy-win-duos.cc)
430*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-win-duos-test BEFORE PRIVATE test/mock)
431*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-win-duos-test PRIVATE cpuinfo_mock gtest)
432*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-win-duos-test COMMAND galaxy-win-duos-test)
433*2b54f0dbSXin Li
434*2b54f0dbSXin Li    ADD_EXECUTABLE(huawei-ascend-p7-test test/mock/huawei-ascend-p7.cc)
435*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(huawei-ascend-p7-test BEFORE PRIVATE test/mock)
436*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(huawei-ascend-p7-test PRIVATE cpuinfo_mock gtest)
437*2b54f0dbSXin Li    ADD_TEST(NAME huawei-ascend-p7-test COMMAND huawei-ascend-p7-test)
438*2b54f0dbSXin Li
439*2b54f0dbSXin Li    ADD_EXECUTABLE(huawei-honor-6-test test/mock/huawei-honor-6.cc)
440*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(huawei-honor-6-test BEFORE PRIVATE test/mock)
441*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(huawei-honor-6-test PRIVATE cpuinfo_mock gtest)
442*2b54f0dbSXin Li    ADD_TEST(NAME huawei-honor-6-test COMMAND huawei-honor-6-test)
443*2b54f0dbSXin Li
444*2b54f0dbSXin Li    ADD_EXECUTABLE(lenovo-a6600-plus-test test/mock/lenovo-a6600-plus.cc)
445*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(lenovo-a6600-plus-test BEFORE PRIVATE test/mock)
446*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(lenovo-a6600-plus-test PRIVATE cpuinfo_mock gtest)
447*2b54f0dbSXin Li    ADD_TEST(NAME lenovo-a6600-plus-test COMMAND lenovo-a6600-plus-test)
448*2b54f0dbSXin Li
449*2b54f0dbSXin Li    ADD_EXECUTABLE(lenovo-vibe-x2-test test/mock/lenovo-vibe-x2.cc)
450*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(lenovo-vibe-x2-test BEFORE PRIVATE test/mock)
451*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(lenovo-vibe-x2-test PRIVATE cpuinfo_mock gtest)
452*2b54f0dbSXin Li    ADD_TEST(NAME lenovo-vibe-x2-test COMMAND lenovo-vibe-x2-test)
453*2b54f0dbSXin Li
454*2b54f0dbSXin Li    ADD_EXECUTABLE(lg-k10-eu-test test/mock/lg-k10-eu.cc)
455*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(lg-k10-eu-test BEFORE PRIVATE test/mock)
456*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(lg-k10-eu-test PRIVATE cpuinfo_mock gtest)
457*2b54f0dbSXin Li    ADD_TEST(NAME lg-k10-eu-test COMMAND lg-k10-eu-test)
458*2b54f0dbSXin Li
459*2b54f0dbSXin Li    ADD_EXECUTABLE(lg-optimus-g-pro-test test/mock/lg-optimus-g-pro.cc)
460*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(lg-optimus-g-pro-test BEFORE PRIVATE test/mock)
461*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(lg-optimus-g-pro-test PRIVATE cpuinfo_mock gtest)
462*2b54f0dbSXin Li    ADD_TEST(NAME lg-optimus-g-pro-test COMMAND lg-optimus-g-pro-test)
463*2b54f0dbSXin Li
464*2b54f0dbSXin Li    ADD_EXECUTABLE(moto-e-gen1-test test/mock/moto-e-gen1.cc)
465*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(moto-e-gen1-test BEFORE PRIVATE test/mock)
466*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(moto-e-gen1-test PRIVATE cpuinfo_mock gtest)
467*2b54f0dbSXin Li    ADD_TEST(NAME moto-e-gen1-test COMMAND moto-e-gen1-test)
468*2b54f0dbSXin Li
469*2b54f0dbSXin Li    ADD_EXECUTABLE(moto-g-gen1-test test/mock/moto-g-gen1.cc)
470*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(moto-g-gen1-test BEFORE PRIVATE test/mock)
471*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(moto-g-gen1-test PRIVATE cpuinfo_mock gtest)
472*2b54f0dbSXin Li    ADD_TEST(NAME moto-g-gen1-test COMMAND moto-g-gen1-test)
473*2b54f0dbSXin Li
474*2b54f0dbSXin Li    ADD_EXECUTABLE(moto-g-gen2-test test/mock/moto-g-gen2.cc)
475*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(moto-g-gen2-test BEFORE PRIVATE test/mock)
476*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(moto-g-gen2-test PRIVATE cpuinfo_mock gtest)
477*2b54f0dbSXin Li    ADD_TEST(NAME moto-g-gen2-test COMMAND moto-g-gen2-test)
478*2b54f0dbSXin Li
479*2b54f0dbSXin Li    ADD_EXECUTABLE(moto-g-gen3-test test/mock/moto-g-gen3.cc)
480*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(moto-g-gen3-test BEFORE PRIVATE test/mock)
481*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(moto-g-gen3-test PRIVATE cpuinfo_mock gtest)
482*2b54f0dbSXin Li    ADD_TEST(NAME moto-g-gen3-test COMMAND moto-g-gen3-test)
483*2b54f0dbSXin Li
484*2b54f0dbSXin Li    ADD_EXECUTABLE(moto-g-gen4-test test/mock/moto-g-gen4.cc)
485*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(moto-g-gen4-test BEFORE PRIVATE test/mock)
486*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(moto-g-gen4-test PRIVATE cpuinfo_mock gtest)
487*2b54f0dbSXin Li    ADD_TEST(NAME moto-g-gen4-test COMMAND moto-g-gen4-test)
488*2b54f0dbSXin Li
489*2b54f0dbSXin Li    ADD_EXECUTABLE(moto-g-gen5-test test/mock/moto-g-gen5.cc)
490*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(moto-g-gen5-test BEFORE PRIVATE test/mock)
491*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(moto-g-gen5-test PRIVATE cpuinfo_mock gtest)
492*2b54f0dbSXin Li    ADD_TEST(NAME moto-g-gen5-test COMMAND moto-g-gen5-test)
493*2b54f0dbSXin Li
494*2b54f0dbSXin Li    ADD_EXECUTABLE(nexus-s-test test/mock/nexus-s.cc)
495*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(nexus-s-test BEFORE PRIVATE test/mock)
496*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(nexus-s-test PRIVATE cpuinfo_mock gtest)
497*2b54f0dbSXin Li    ADD_TEST(NAME nexus-s-test COMMAND nexus-s-test)
498*2b54f0dbSXin Li
499*2b54f0dbSXin Li    ADD_EXECUTABLE(nexus4-test test/mock/nexus4.cc)
500*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(nexus4-test BEFORE PRIVATE test/mock)
501*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(nexus4-test PRIVATE cpuinfo_mock gtest)
502*2b54f0dbSXin Li    ADD_TEST(NAME nexus4-test COMMAND nexus4-test)
503*2b54f0dbSXin Li
504*2b54f0dbSXin Li    ADD_EXECUTABLE(nexus6-test test/mock/nexus6.cc)
505*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(nexus6-test BEFORE PRIVATE test/mock)
506*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(nexus6-test PRIVATE cpuinfo_mock gtest)
507*2b54f0dbSXin Li    ADD_TEST(NAME nexus6-test COMMAND nexus6-test)
508*2b54f0dbSXin Li
509*2b54f0dbSXin Li    ADD_EXECUTABLE(nexus10-test test/mock/nexus10.cc)
510*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(nexus10-test BEFORE PRIVATE test/mock)
511*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(nexus10-test PRIVATE cpuinfo_mock gtest)
512*2b54f0dbSXin Li    ADD_TEST(NAME nexus10-test COMMAND nexus10-test)
513*2b54f0dbSXin Li
514*2b54f0dbSXin Li    ADD_EXECUTABLE(padcod-10.1-test test/mock/padcod-10.1.cc)
515*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(padcod-10.1-test BEFORE PRIVATE test/mock)
516*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(padcod-10.1-test PRIVATE cpuinfo_mock gtest)
517*2b54f0dbSXin Li    ADD_TEST(NAME padcod-10.1-test COMMAND padcod-10.1-test)
518*2b54f0dbSXin Li
519*2b54f0dbSXin Li    ADD_EXECUTABLE(xiaomi-redmi-2a-test test/mock/xiaomi-redmi-2a.cc)
520*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(xiaomi-redmi-2a-test BEFORE PRIVATE test/mock)
521*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(xiaomi-redmi-2a-test PRIVATE cpuinfo_mock gtest)
522*2b54f0dbSXin Li    ADD_TEST(NAME xiaomi-redmi-2a-test COMMAND xiaomi-redmi-2a-test)
523*2b54f0dbSXin Li
524*2b54f0dbSXin Li    ADD_EXECUTABLE(xperia-sl-test test/mock/xperia-sl.cc)
525*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(xperia-sl-test BEFORE PRIVATE test/mock)
526*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(xperia-sl-test PRIVATE cpuinfo_mock gtest)
527*2b54f0dbSXin Li    ADD_TEST(NAME xperia-sl-test COMMAND xperia-sl-test)
528*2b54f0dbSXin Li  ENDIF()
529*2b54f0dbSXin Li
530*2b54f0dbSXin Li  IF(CMAKE_SYSTEM_NAME STREQUAL "Android" AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv5te|armv7-a|aarch64)$")
531*2b54f0dbSXin Li    ADD_EXECUTABLE(alcatel-revvl-test test/mock/alcatel-revvl.cc)
532*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(alcatel-revvl-test BEFORE PRIVATE test/mock)
533*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(alcatel-revvl-test PRIVATE cpuinfo_mock gtest)
534*2b54f0dbSXin Li    ADD_TEST(NAME alcatel-revvl-test COMMAND alcatel-revvl-test)
535*2b54f0dbSXin Li
536*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-a8-2018-test test/mock/galaxy-a8-2018.cc)
537*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-a8-2018-test BEFORE PRIVATE test/mock)
538*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-a8-2018-test PRIVATE cpuinfo_mock gtest)
539*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-a8-2018-test COMMAND galaxy-a8-2018-test)
540*2b54f0dbSXin Li
541*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-c9-pro-test test/mock/galaxy-c9-pro.cc)
542*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-c9-pro-test BEFORE PRIVATE test/mock)
543*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-c9-pro-test PRIVATE cpuinfo_mock gtest)
544*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-c9-pro-test COMMAND galaxy-c9-pro-test)
545*2b54f0dbSXin Li
546*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-s6-test test/mock/galaxy-s6.cc)
547*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-s6-test BEFORE PRIVATE test/mock)
548*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-s6-test PRIVATE cpuinfo_mock gtest)
549*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-s6-test COMMAND galaxy-s6-test)
550*2b54f0dbSXin Li
551*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-s7-us-test test/mock/galaxy-s7-us.cc)
552*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-s7-us-test BEFORE PRIVATE test/mock)
553*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-s7-us-test PRIVATE cpuinfo_mock gtest)
554*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-s7-us-test COMMAND galaxy-s7-us-test)
555*2b54f0dbSXin Li
556*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-s7-global-test test/mock/galaxy-s7-global.cc)
557*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-s7-global-test BEFORE PRIVATE test/mock)
558*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-s7-global-test PRIVATE cpuinfo_mock gtest)
559*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-s7-global-test COMMAND galaxy-s7-global-test)
560*2b54f0dbSXin Li
561*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-s8-us-test test/mock/galaxy-s8-us.cc)
562*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-s8-us-test BEFORE PRIVATE test/mock)
563*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-s8-us-test PRIVATE cpuinfo_mock gtest)
564*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-s8-us-test COMMAND galaxy-s8-us-test)
565*2b54f0dbSXin Li
566*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-s8-global-test test/mock/galaxy-s8-global.cc)
567*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-s8-global-test BEFORE PRIVATE test/mock)
568*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-s8-global-test PRIVATE cpuinfo_mock gtest)
569*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-s8-global-test COMMAND galaxy-s8-global-test)
570*2b54f0dbSXin Li
571*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-s9-us-test test/mock/galaxy-s9-us.cc)
572*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-s9-us-test BEFORE PRIVATE test/mock)
573*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-s9-us-test PRIVATE cpuinfo_mock gtest)
574*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-s9-us-test COMMAND galaxy-s9-us-test)
575*2b54f0dbSXin Li
576*2b54f0dbSXin Li    ADD_EXECUTABLE(galaxy-s9-global-test test/mock/galaxy-s9-global.cc)
577*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(galaxy-s9-global-test BEFORE PRIVATE test/mock)
578*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(galaxy-s9-global-test PRIVATE cpuinfo_mock gtest)
579*2b54f0dbSXin Li    ADD_TEST(NAME galaxy-s9-global-test COMMAND galaxy-s9-global-test)
580*2b54f0dbSXin Li
581*2b54f0dbSXin Li    ADD_EXECUTABLE(huawei-mate-8-test test/mock/huawei-mate-8.cc)
582*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(huawei-mate-8-test BEFORE PRIVATE test/mock)
583*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(huawei-mate-8-test PRIVATE cpuinfo_mock gtest)
584*2b54f0dbSXin Li    ADD_TEST(NAME huawei-mate-8-test COMMAND huawei-mate-8-test)
585*2b54f0dbSXin Li
586*2b54f0dbSXin Li    ADD_EXECUTABLE(huawei-mate-9-test test/mock/huawei-mate-9.cc)
587*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(huawei-mate-9-test BEFORE PRIVATE test/mock)
588*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(huawei-mate-9-test PRIVATE cpuinfo_mock gtest)
589*2b54f0dbSXin Li    ADD_TEST(NAME huawei-mate-9-test COMMAND huawei-mate-9-test)
590*2b54f0dbSXin Li
591*2b54f0dbSXin Li    ADD_EXECUTABLE(huawei-mate-10-test test/mock/huawei-mate-10.cc)
592*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(huawei-mate-10-test BEFORE PRIVATE test/mock)
593*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(huawei-mate-10-test PRIVATE cpuinfo_mock gtest)
594*2b54f0dbSXin Li    ADD_TEST(NAME huawei-mate-10-test COMMAND huawei-mate-10-test)
595*2b54f0dbSXin Li
596*2b54f0dbSXin Li    ADD_EXECUTABLE(huawei-mate-20-test test/mock/huawei-mate-20.cc)
597*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(huawei-mate-20-test BEFORE PRIVATE test/mock)
598*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(huawei-mate-20-test PRIVATE cpuinfo_mock gtest)
599*2b54f0dbSXin Li    ADD_TEST(NAME huawei-mate-20-test COMMAND huawei-mate-20-test)
600*2b54f0dbSXin Li
601*2b54f0dbSXin Li    ADD_EXECUTABLE(huawei-p8-lite-test test/mock/huawei-p8-lite.cc)
602*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(huawei-p8-lite-test BEFORE PRIVATE test/mock)
603*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(huawei-p8-lite-test PRIVATE cpuinfo_mock gtest)
604*2b54f0dbSXin Li    ADD_TEST(NAME huawei-p8-lite-test COMMAND huawei-p8-lite-test)
605*2b54f0dbSXin Li
606*2b54f0dbSXin Li    ADD_EXECUTABLE(huawei-p9-lite-test test/mock/huawei-p9-lite.cc)
607*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(huawei-p9-lite-test BEFORE PRIVATE test/mock)
608*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(huawei-p9-lite-test PRIVATE cpuinfo_mock gtest)
609*2b54f0dbSXin Li    ADD_TEST(NAME huawei-p9-lite-test COMMAND huawei-p9-lite-test)
610*2b54f0dbSXin Li
611*2b54f0dbSXin Li    ADD_EXECUTABLE(huawei-p20-pro-test test/mock/huawei-p20-pro.cc)
612*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(huawei-p20-pro-test BEFORE PRIVATE test/mock)
613*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(huawei-p20-pro-test PRIVATE cpuinfo_mock gtest)
614*2b54f0dbSXin Li    ADD_TEST(NAME huawei-p20-pro-test COMMAND huawei-p20-pro-test)
615*2b54f0dbSXin Li
616*2b54f0dbSXin Li    ADD_EXECUTABLE(iconia-one-10-test test/mock/iconia-one-10.cc)
617*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(iconia-one-10-test BEFORE PRIVATE test/mock)
618*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(iconia-one-10-test PRIVATE cpuinfo_mock gtest)
619*2b54f0dbSXin Li    ADD_TEST(NAME iconia-one-10-test COMMAND iconia-one-10-test)
620*2b54f0dbSXin Li
621*2b54f0dbSXin Li    ADD_EXECUTABLE(meizu-pro-6-test test/mock/meizu-pro-6.cc)
622*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(meizu-pro-6-test BEFORE PRIVATE test/mock)
623*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(meizu-pro-6-test PRIVATE cpuinfo_mock gtest)
624*2b54f0dbSXin Li    ADD_TEST(NAME meizu-pro-6-test COMMAND meizu-pro-6-test)
625*2b54f0dbSXin Li
626*2b54f0dbSXin Li    ADD_EXECUTABLE(meizu-pro-6s-test test/mock/meizu-pro-6s.cc)
627*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(meizu-pro-6s-test BEFORE PRIVATE test/mock)
628*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(meizu-pro-6s-test PRIVATE cpuinfo_mock gtest)
629*2b54f0dbSXin Li    ADD_TEST(NAME meizu-pro-6s-test COMMAND meizu-pro-6s-test)
630*2b54f0dbSXin Li
631*2b54f0dbSXin Li    ADD_EXECUTABLE(meizu-pro-7-plus-test test/mock/meizu-pro-7-plus.cc)
632*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(meizu-pro-7-plus-test BEFORE PRIVATE test/mock)
633*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(meizu-pro-7-plus-test PRIVATE cpuinfo_mock gtest)
634*2b54f0dbSXin Li    ADD_TEST(NAME meizu-pro-7-plus-test COMMAND meizu-pro-7-plus-test)
635*2b54f0dbSXin Li
636*2b54f0dbSXin Li    ADD_EXECUTABLE(nexus5x-test test/mock/nexus5x.cc)
637*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(nexus5x-test BEFORE PRIVATE test/mock)
638*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(nexus5x-test PRIVATE cpuinfo_mock gtest)
639*2b54f0dbSXin Li    ADD_TEST(NAME nexus5x-test COMMAND nexus5x-test)
640*2b54f0dbSXin Li
641*2b54f0dbSXin Li    ADD_EXECUTABLE(nexus6p-test test/mock/nexus6p.cc)
642*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(nexus6p-test BEFORE PRIVATE test/mock)
643*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(nexus6p-test PRIVATE cpuinfo_mock gtest)
644*2b54f0dbSXin Li    ADD_TEST(NAME nexus6p-test COMMAND nexus6p-test)
645*2b54f0dbSXin Li
646*2b54f0dbSXin Li    ADD_EXECUTABLE(nexus9-test test/mock/nexus9.cc)
647*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(nexus9-test BEFORE PRIVATE test/mock)
648*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(nexus9-test PRIVATE cpuinfo_mock gtest)
649*2b54f0dbSXin Li    ADD_TEST(NAME nexus9-test COMMAND nexus9-test)
650*2b54f0dbSXin Li
651*2b54f0dbSXin Li    ADD_EXECUTABLE(oneplus-3t-test test/mock/oneplus-3t.cc)
652*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(oneplus-3t-test BEFORE PRIVATE test/mock)
653*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(oneplus-3t-test PRIVATE cpuinfo_mock gtest)
654*2b54f0dbSXin Li    ADD_TEST(NAME oneplus-3t-test COMMAND oneplus-3t-test)
655*2b54f0dbSXin Li
656*2b54f0dbSXin Li    ADD_EXECUTABLE(oneplus-5-test test/mock/oneplus-5.cc)
657*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(oneplus-5-test BEFORE PRIVATE test/mock)
658*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(oneplus-5-test PRIVATE cpuinfo_mock gtest)
659*2b54f0dbSXin Li    ADD_TEST(NAME oneplus-5-test COMMAND oneplus-5-test)
660*2b54f0dbSXin Li
661*2b54f0dbSXin Li    ADD_EXECUTABLE(oneplus-5t-test test/mock/oneplus-5t.cc)
662*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(oneplus-5t-test BEFORE PRIVATE test/mock)
663*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(oneplus-5t-test PRIVATE cpuinfo_mock gtest)
664*2b54f0dbSXin Li    ADD_TEST(NAME oneplus-5t-test COMMAND oneplus-5t-test)
665*2b54f0dbSXin Li
666*2b54f0dbSXin Li    ADD_EXECUTABLE(oppo-a37-test test/mock/oppo-a37.cc)
667*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(oppo-a37-test BEFORE PRIVATE test/mock)
668*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(oppo-a37-test PRIVATE cpuinfo_mock gtest)
669*2b54f0dbSXin Li    ADD_TEST(NAME oppo-a37-test COMMAND oppo-a37-test)
670*2b54f0dbSXin Li
671*2b54f0dbSXin Li    ADD_EXECUTABLE(oppo-r9-test test/mock/oppo-r9.cc)
672*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(oppo-r9-test BEFORE PRIVATE test/mock)
673*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(oppo-r9-test PRIVATE cpuinfo_mock gtest)
674*2b54f0dbSXin Li    ADD_TEST(NAME oppo-r9-test COMMAND oppo-r9-test)
675*2b54f0dbSXin Li
676*2b54f0dbSXin Li    ADD_EXECUTABLE(oppo-r15-test test/mock/oppo-r15.cc)
677*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(oppo-r15-test BEFORE PRIVATE test/mock)
678*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(oppo-r15-test PRIVATE cpuinfo_mock gtest)
679*2b54f0dbSXin Li    ADD_TEST(NAME oppo-r15-test COMMAND oppo-r15-test)
680*2b54f0dbSXin Li
681*2b54f0dbSXin Li    ADD_EXECUTABLE(pixel-test test/mock/pixel.cc)
682*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(pixel-test BEFORE PRIVATE test/mock)
683*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(pixel-test PRIVATE cpuinfo_mock gtest)
684*2b54f0dbSXin Li    ADD_TEST(NAME pixel-test COMMAND pixel-test)
685*2b54f0dbSXin Li
686*2b54f0dbSXin Li    ADD_EXECUTABLE(pixel-c-test test/mock/pixel-c.cc)
687*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(pixel-c-test BEFORE PRIVATE test/mock)
688*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(pixel-c-test PRIVATE cpuinfo_mock gtest)
689*2b54f0dbSXin Li    ADD_TEST(NAME pixel-c-test COMMAND pixel-c-test)
690*2b54f0dbSXin Li
691*2b54f0dbSXin Li    ADD_EXECUTABLE(pixel-xl-test test/mock/pixel-xl.cc)
692*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(pixel-xl-test BEFORE PRIVATE test/mock)
693*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(pixel-xl-test PRIVATE cpuinfo_mock gtest)
694*2b54f0dbSXin Li    ADD_TEST(NAME pixel-xl-test COMMAND pixel-xl-test)
695*2b54f0dbSXin Li
696*2b54f0dbSXin Li    ADD_EXECUTABLE(pixel-2-xl-test test/mock/pixel-2-xl.cc)
697*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(pixel-2-xl-test BEFORE PRIVATE test/mock)
698*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(pixel-2-xl-test PRIVATE cpuinfo_mock gtest)
699*2b54f0dbSXin Li    ADD_TEST(NAME pixel-2-xl-test COMMAND pixel-2-xl-test)
700*2b54f0dbSXin Li
701*2b54f0dbSXin Li    ADD_EXECUTABLE(xiaomi-mi-5c-test test/mock/xiaomi-mi-5c.cc)
702*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(xiaomi-mi-5c-test BEFORE PRIVATE test/mock)
703*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(xiaomi-mi-5c-test PRIVATE cpuinfo_mock gtest)
704*2b54f0dbSXin Li    ADD_TEST(NAME xiaomi-mi-5c-test COMMAND xiaomi-mi-5c-test)
705*2b54f0dbSXin Li
706*2b54f0dbSXin Li    ADD_EXECUTABLE(xiaomi-redmi-note-3-test test/mock/xiaomi-redmi-note-3.cc)
707*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(xiaomi-redmi-note-3-test BEFORE PRIVATE test/mock)
708*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(xiaomi-redmi-note-3-test PRIVATE cpuinfo_mock gtest)
709*2b54f0dbSXin Li    ADD_TEST(NAME xiaomi-redmi-note-3-test COMMAND xiaomi-redmi-note-3-test)
710*2b54f0dbSXin Li
711*2b54f0dbSXin Li    ADD_EXECUTABLE(xiaomi-redmi-note-4-test test/mock/xiaomi-redmi-note-4.cc)
712*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(xiaomi-redmi-note-4-test BEFORE PRIVATE test/mock)
713*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(xiaomi-redmi-note-4-test PRIVATE cpuinfo_mock gtest)
714*2b54f0dbSXin Li    ADD_TEST(NAME xiaomi-redmi-note-4-test COMMAND xiaomi-redmi-note-4-test)
715*2b54f0dbSXin Li
716*2b54f0dbSXin Li    ADD_EXECUTABLE(xperia-c4-dual-test test/mock/xperia-c4-dual.cc)
717*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(xperia-c4-dual-test BEFORE PRIVATE test/mock)
718*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(xperia-c4-dual-test PRIVATE cpuinfo_mock gtest)
719*2b54f0dbSXin Li    ADD_TEST(NAME xperia-c4-dual-test COMMAND xperia-c4-dual-test)
720*2b54f0dbSXin Li  ENDIF()
721*2b54f0dbSXin Li
722*2b54f0dbSXin Li  IF(CMAKE_SYSTEM_NAME STREQUAL "Android" AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(i686|x86_64)$")
723*2b54f0dbSXin Li    ADD_EXECUTABLE(alldocube-iwork8-test test/mock/alldocube-iwork8.cc)
724*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(alldocube-iwork8-test BEFORE PRIVATE test/mock)
725*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(alldocube-iwork8-test PRIVATE cpuinfo_mock gtest)
726*2b54f0dbSXin Li    ADD_TEST(NAME alldocube-iwork8-test COMMAND alldocube-iwork8-test)
727*2b54f0dbSXin Li
728*2b54f0dbSXin Li    ADD_EXECUTABLE(leagoo-t5c-test test/mock/leagoo-t5c.cc)
729*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(leagoo-t5c-test BEFORE PRIVATE test/mock)
730*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(leagoo-t5c-test PRIVATE cpuinfo_mock gtest)
731*2b54f0dbSXin Li    ADD_TEST(NAME leagoo-t5c-test COMMAND leagoo-t5c-test)
732*2b54f0dbSXin Li
733*2b54f0dbSXin Li    ADD_EXECUTABLE(memo-pad-7-test test/mock/memo-pad-7.cc)
734*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(memo-pad-7-test BEFORE PRIVATE test/mock)
735*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(memo-pad-7-test PRIVATE cpuinfo_mock gtest)
736*2b54f0dbSXin Li    ADD_TEST(NAME memo-pad-7-test COMMAND memo-pad-7-test)
737*2b54f0dbSXin Li
738*2b54f0dbSXin Li    ADD_EXECUTABLE(zenfone-c-test test/mock/zenfone-c.cc)
739*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(zenfone-c-test BEFORE PRIVATE test/mock)
740*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(zenfone-c-test PRIVATE cpuinfo_mock gtest)
741*2b54f0dbSXin Li    ADD_TEST(NAME zenfone-c-test COMMAND zenfone-c-test)
742*2b54f0dbSXin Li
743*2b54f0dbSXin Li    ADD_EXECUTABLE(zenfone-2-test test/mock/zenfone-2.cc)
744*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(zenfone-2-test BEFORE PRIVATE test/mock)
745*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(zenfone-2-test PRIVATE cpuinfo_mock gtest)
746*2b54f0dbSXin Li    ADD_TEST(NAME zenfone-2-test COMMAND zenfone-2-test)
747*2b54f0dbSXin Li
748*2b54f0dbSXin Li    ADD_EXECUTABLE(zenfone-2e-test test/mock/zenfone-2e.cc)
749*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(zenfone-2e-test BEFORE PRIVATE test/mock)
750*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(zenfone-2e-test PRIVATE cpuinfo_mock gtest)
751*2b54f0dbSXin Li    ADD_TEST(NAME zenfone-2e-test COMMAND zenfone-2e-test)
752*2b54f0dbSXin Li  ENDIF()
753*2b54f0dbSXin LiENDIF()
754*2b54f0dbSXin Li
755*2b54f0dbSXin Li# ---[ cpuinfo unit tests
756*2b54f0dbSXin LiIF(CPUINFO_SUPPORTED_PLATFORM AND CPUINFO_BUILD_UNIT_TESTS)
757*2b54f0dbSXin Li  ADD_EXECUTABLE(init-test test/init.cc)
758*2b54f0dbSXin Li  CPUINFO_TARGET_ENABLE_CXX11(init-test)
759*2b54f0dbSXin Li  CPUINFO_TARGET_RUNTIME_LIBRARY(init-test)
760*2b54f0dbSXin Li  TARGET_LINK_LIBRARIES(init-test PRIVATE cpuinfo gtest gtest_main)
761*2b54f0dbSXin Li  ADD_TEST(NAME init-test COMMAND init-test)
762*2b54f0dbSXin Li
763*2b54f0dbSXin Li  IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android")
764*2b54f0dbSXin Li    ADD_EXECUTABLE(get-current-test test/get-current.cc)
765*2b54f0dbSXin Li    CPUINFO_TARGET_ENABLE_CXX11(get-current-test)
766*2b54f0dbSXin Li    CPUINFO_TARGET_RUNTIME_LIBRARY(get-current-test)
767*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(get-current-test PRIVATE cpuinfo gtest gtest_main)
768*2b54f0dbSXin Li    ADD_TEST(NAME get-current-test COMMAND get-current-test)
769*2b54f0dbSXin Li  ENDIF()
770*2b54f0dbSXin Li
771*2b54f0dbSXin Li  IF(CPUINFO_TARGET_PROCESSOR MATCHES "^(i[3-6]86|AMD64|x86(_64)?)$")
772*2b54f0dbSXin Li    ADD_EXECUTABLE(brand-string-test test/name/brand-string.cc)
773*2b54f0dbSXin Li    CPUINFO_TARGET_ENABLE_CXX11(brand-string-test)
774*2b54f0dbSXin Li    CPUINFO_TARGET_RUNTIME_LIBRARY(brand-string-test)
775*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(brand-string-test PRIVATE cpuinfo_internals gtest gtest_main)
776*2b54f0dbSXin Li    ADD_TEST(NAME brand-string-test COMMAND brand-string-test)
777*2b54f0dbSXin Li  ENDIF()
778*2b54f0dbSXin Li
779*2b54f0dbSXin Li  IF(CMAKE_SYSTEM_NAME STREQUAL "Android" AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv[5-8].*|aarch64)$")
780*2b54f0dbSXin Li    ADD_LIBRARY(android_properties_interface STATIC test/name/android-properties-interface.c)
781*2b54f0dbSXin Li    CPUINFO_TARGET_ENABLE_C99(android_properties_interface)
782*2b54f0dbSXin Li    CPUINFO_TARGET_RUNTIME_LIBRARY(android_properties_interface)
783*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(android_properties_interface PRIVATE cpuinfo_internals)
784*2b54f0dbSXin Li
785*2b54f0dbSXin Li    ADD_EXECUTABLE(chipset-test
786*2b54f0dbSXin Li      test/name/proc-cpuinfo-hardware.cc
787*2b54f0dbSXin Li      test/name/ro-product-board.cc
788*2b54f0dbSXin Li      test/name/ro-board-platform.cc
789*2b54f0dbSXin Li      test/name/ro-mediatek-platform.cc
790*2b54f0dbSXin Li      test/name/ro-arch.cc
791*2b54f0dbSXin Li      test/name/ro-chipname.cc
792*2b54f0dbSXin Li      test/name/android-properties.cc)
793*2b54f0dbSXin Li    CPUINFO_TARGET_ENABLE_CXX11(chipset-test)
794*2b54f0dbSXin Li    CPUINFO_TARGET_RUNTIME_LIBRARY(chipset-test)
795*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(chipset-test PRIVATE android_properties_interface gtest gtest_main)
796*2b54f0dbSXin Li    ADD_TEST(NAME chipset-test COMMAND chipset-test)
797*2b54f0dbSXin Li
798*2b54f0dbSXin Li    ADD_EXECUTABLE(cache-test test/arm-cache.cc)
799*2b54f0dbSXin Li    CPUINFO_TARGET_ENABLE_CXX11(cache-test)
800*2b54f0dbSXin Li    CPUINFO_TARGET_RUNTIME_LIBRARY(cache-test)
801*2b54f0dbSXin Li    TARGET_COMPILE_DEFINITIONS(cache-test PRIVATE __STDC_LIMIT_MACROS=1 __STDC_CONSTANT_MACROS=1)
802*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(cache-test PRIVATE cpuinfo_internals gtest gtest_main)
803*2b54f0dbSXin Li    ADD_TEST(NAME cache-test COMMAND cache-test)
804*2b54f0dbSXin Li  ENDIF()
805*2b54f0dbSXin LiENDIF()
806*2b54f0dbSXin Li
807*2b54f0dbSXin Li# ---[ Helper and debug tools
808*2b54f0dbSXin LiIF(CPUINFO_SUPPORTED_PLATFORM AND CPUINFO_BUILD_TOOLS)
809*2b54f0dbSXin Li  ADD_EXECUTABLE(isa-info tools/isa-info.c)
810*2b54f0dbSXin Li  CPUINFO_TARGET_ENABLE_C99(isa-info)
811*2b54f0dbSXin Li  CPUINFO_TARGET_RUNTIME_LIBRARY(isa-info)
812*2b54f0dbSXin Li  TARGET_LINK_LIBRARIES(isa-info PRIVATE cpuinfo)
813*2b54f0dbSXin Li  INSTALL(TARGETS isa-info RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
814*2b54f0dbSXin Li
815*2b54f0dbSXin Li  ADD_EXECUTABLE(cpu-info tools/cpu-info.c)
816*2b54f0dbSXin Li  CPUINFO_TARGET_ENABLE_C99(cpu-info)
817*2b54f0dbSXin Li  CPUINFO_TARGET_RUNTIME_LIBRARY(cpu-info)
818*2b54f0dbSXin Li  TARGET_LINK_LIBRARIES(cpu-info PRIVATE cpuinfo)
819*2b54f0dbSXin Li  INSTALL(TARGETS cpu-info RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
820*2b54f0dbSXin Li
821*2b54f0dbSXin Li  ADD_EXECUTABLE(cache-info tools/cache-info.c)
822*2b54f0dbSXin Li  CPUINFO_TARGET_ENABLE_C99(cache-info)
823*2b54f0dbSXin Li  CPUINFO_TARGET_RUNTIME_LIBRARY(cache-info)
824*2b54f0dbSXin Li  TARGET_LINK_LIBRARIES(cache-info PRIVATE cpuinfo)
825*2b54f0dbSXin Li  INSTALL(TARGETS cache-info RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
826*2b54f0dbSXin Li
827*2b54f0dbSXin Li  IF(CMAKE_SYSTEM_NAME MATCHES "^(Android|Linux)$" AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv[5-8].*|aarch64)$")
828*2b54f0dbSXin Li    ADD_EXECUTABLE(auxv-dump tools/auxv-dump.c)
829*2b54f0dbSXin Li    CPUINFO_TARGET_ENABLE_C99(auxv-dump)
830*2b54f0dbSXin Li    CPUINFO_TARGET_RUNTIME_LIBRARY(auxv-dump)
831*2b54f0dbSXin Li    TARGET_LINK_LIBRARIES(auxv-dump PRIVATE ${CMAKE_DL_LIBS} cpuinfo)
832*2b54f0dbSXin Li
833*2b54f0dbSXin Li    ADD_EXECUTABLE(cpuinfo-dump tools/cpuinfo-dump.c)
834*2b54f0dbSXin Li    CPUINFO_TARGET_ENABLE_C99(cpuinfo-dump)
835*2b54f0dbSXin Li    CPUINFO_TARGET_RUNTIME_LIBRARY(cpuinfo-dump)
836*2b54f0dbSXin Li  ENDIF()
837*2b54f0dbSXin Li
838*2b54f0dbSXin Li  IF(CPUINFO_TARGET_PROCESSOR MATCHES "^(i[3-6]86|AMD64|x86(_64)?)$")
839*2b54f0dbSXin Li    ADD_EXECUTABLE(cpuid-dump tools/cpuid-dump.c)
840*2b54f0dbSXin Li    CPUINFO_TARGET_ENABLE_C99(cpuid-dump)
841*2b54f0dbSXin Li    CPUINFO_TARGET_RUNTIME_LIBRARY(cpuid-dump)
842*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(cpuid-dump BEFORE PRIVATE src)
843*2b54f0dbSXin Li    TARGET_INCLUDE_DIRECTORIES(cpuid-dump BEFORE PRIVATE include)
844*2b54f0dbSXin Li    INSTALL(TARGETS cpuid-dump RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
845*2b54f0dbSXin Li  ENDIF()
846*2b54f0dbSXin LiENDIF()
847*2b54f0dbSXin Li
848*2b54f0dbSXin Li# ---[ pkg-config manifest. This is mostly from JsonCpp...
849*2b54f0dbSXin LiIF(CPUINFO_BUILD_PKG_CONFIG)
850*2b54f0dbSXin Li
851*2b54f0dbSXin Li  FUNCTION(JOIN_PATHS joined_path first_path_segment)
852*2b54f0dbSXin Li    SET(temp_path "${first_path_segment}")
853*2b54f0dbSXin Li    FOREACH(current_segment IN LISTS ARGN)
854*2b54f0dbSXin Li      IF(NOT ("${current_segment}" STREQUAL ""))
855*2b54f0dbSXin Li        IF(IS_ABSOLUTE "${current_segment}")
856*2b54f0dbSXin Li          SET(temp_path "${current_segment}")
857*2b54f0dbSXin Li        ELSE()
858*2b54f0dbSXin Li          SET(temp_path "${temp_path}/${current_segment}")
859*2b54f0dbSXin Li        ENDIF()
860*2b54f0dbSXin Li      ENDIF()
861*2b54f0dbSXin Li    ENDFOREACH()
862*2b54f0dbSXin Li    SET(${joined_path} "${temp_path}" PARENT_SCOPE)
863*2b54f0dbSXin Li  ENDFUNCTION()
864*2b54f0dbSXin Li
865*2b54f0dbSXin Li  JOIN_PATHS(libdir_for_pc_file "\${exec_prefix}" "${CMAKE_INSTALL_LIBDIR}")
866*2b54f0dbSXin Li  JOIN_PATHS(includedir_for_pc_file "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")
867*2b54f0dbSXin Li
868*2b54f0dbSXin Li  CONFIGURE_FILE(
869*2b54f0dbSXin Li    "libcpuinfo.pc.in"
870*2b54f0dbSXin Li    "libcpuinfo.pc"
871*2b54f0dbSXin Li    @ONLY)
872*2b54f0dbSXin Li
873*2b54f0dbSXin Li  INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/libcpuinfo.pc"
874*2b54f0dbSXin Li  DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
875*2b54f0dbSXin Li
876*2b54f0dbSXin LiENDIF()
877