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