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