blob: 45b1b3458b24275006a26d3d68301f77045956cd [file] [log] [blame]
Marat Dukhan3645b922017-10-13 17:03:35 -04001CMAKE_MINIMUM_REQUIRED(VERSION 3.0 FATAL_ERROR)
2
3INCLUDE(GNUInstallDirs)
4
5# ---[ Project and semantic versioning.
Marat Dukhanbfff3482017-10-15 22:24:32 +00006PROJECT(cpuinfo VERSION 1.0 LANGUAGES C CXX)
Marat Dukhan3645b922017-10-13 17:03:35 -04007
8# ---[ Options.
9OPTION(BUILD_TOOLS "Build command-line tools" ON)
10OPTION(BUILD_UNIT_TESTS "Build C++ unit tests (need googletest)" ON)
11OPTION(BUILD_MOCK_TESTS "Build C++ mock tests (need googletest)" ON)
12
13# ---[ Build flags
Marat Dukhan3645b922017-10-13 17:03:35 -040014IF(NOT MSVC)
Marat Dukhan7b738882017-10-18 16:59:28 -070015 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
16 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
Marat Dukhan3645b922017-10-13 17:03:35 -040017ENDIF()
18
19IF(NOT CMAKE_SYSTEM_PROCESSOR)
20 MESSAGE(FATAL_ERROR "CMAKE_SYSTEM_PROCESSOR not defined")
Marat Dukhan7b738882017-10-18 16:59:28 -070021ELSEIF(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^(i686|x86_64|armv5te|armv7|armv7f|armv7s|armv7k|armv7-a|armv7l|arm64|aarch64)$")
Marat Dukhan3645b922017-10-13 17:03:35 -040022 MESSAGE(FATAL_ERROR "Unrecognized CMAKE_SYSTEM_PROCESSOR = ${CMAKE_SYSTEM_PROCESSOR}")
23ENDIF()
24
25IF(NOT CMAKE_SYSTEM_NAME)
26 MESSAGE(FATAL_ERROR "CMAKE_SYSTEM_NAME not defined")
27ELSEIF(NOT CMAKE_SYSTEM_NAME MATCHES "^(Darwin|Linux|Android)$")
28 MESSAGE(FATAL_ERROR "Unrecognized CMAKE_SYSTEM_NAME = ${CMAKE_SYSTEM_NAME}")
29ENDIF()
30
31INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
32
33# ---[ cpuinfo library
34SET(CPUINFO_SRCS
35 src/init.c
36 src/api.c
37 src/log.c)
38
39IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(i686|x86_64)$")
40 LIST(APPEND CPUINFO_SRCS
41 src/x86/init.c
42 src/x86/info.c
43 src/x86/vendor.c
44 src/x86/uarch.c
45 src/x86/name.c
46 src/x86/topology.c
47 src/x86/isa.c
48 src/x86/cache/init.c
49 src/x86/cache/descriptor.c
50 src/x86/cache/deterministic.c)
51 IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android")
52 LIST(APPEND CPUINFO_SRCS
53 src/x86/linux/init.c
54 src/x86/linux/cpuinfo.c)
55 ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
56 LIST(APPEND CPUINFO_SRCS src/x86/mach/init.c)
57 ENDIF()
Marat Dukhan7b738882017-10-18 16:59:28 -070058ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv5te|armv7|armv7f|armv7s|armv7k|armv7-a|armv7l|arm64|aarch64)$")
Marat Dukhan3645b922017-10-13 17:03:35 -040059 LIST(APPEND CPUINFO_SRCS
60 src/arm/uarch.c
61 src/arm/cache.c)
62 IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android")
63 LIST(APPEND CPUINFO_SRCS
64 src/arm/linux/init.c
65 src/arm/linux/cpuinfo.c
66 src/arm/linux/clusters.c
Marat Dukhaned272132017-10-15 21:55:45 +000067 src/arm/linux/chipset.c
Marat Dukhan3645b922017-10-13 17:03:35 -040068 src/arm/linux/midr.c)
Marat Dukhan7b738882017-10-18 16:59:28 -070069 IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv5te|armv7l|armv7-a)$")
70 LIST(APPEND CPUINFO_SRCS src/arm/linux/arm32-isa.c)
71 IF(CMAKE_SYSTEM_NAME STREQUAL "Android" AND ANDROID_ABI STREQUAL "armeabi")
72 SET_SOURCE_FILES_PROPERTIES(src/arm/linux/arm32-isa.c PROPERTIES COMPILE_FLAGS -marm)
73 ENDIF()
74 ELSEIF(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
75 LIST(APPEND CPUINFO_SRCS src/arm/linux/arm64-isa.c)
76 ENDIF()
77 ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
78 LIST(APPEND CPUINFO_SRCS src/arm/mach/init.c)
Marat Dukhan3645b922017-10-13 17:03:35 -040079 ENDIF()
80 IF(CMAKE_SYSTEM_NAME STREQUAL "Android")
81 LIST(APPEND CPUINFO_SRCS
Marat Dukhan3645b922017-10-13 17:03:35 -040082 src/arm/Android/properties.c)
83 ENDIF()
Marat Dukhan3645b922017-10-13 17:03:35 -040084ENDIF()
85
86IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android")
87 LIST(APPEND CPUINFO_SRCS
88 src/linux/smallfile.c
89 src/linux/multiline.c
90 src/linux/current.c
91 src/linux/cpulist.c
92 src/linux/processors.c)
93 IF(CMAKE_SYSTEM_NAME STREQUAL "Android")
94 LIST(APPEND CPUINFO_SRCS src/gpu/gles2.c)
95 ENDIF()
96ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
97 LIST(APPEND CPUINFO_SRCS src/mach/topology.c)
98ENDIF()
99
Marat Dukhanbfff3482017-10-15 22:24:32 +0000100IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android")
101 SET(CMAKE_THREAD_PREFER_PTHREAD TRUE)
102 SET(THREADS_PREFER_PTHREAD_FLAG TRUE)
103 FIND_PACKAGE(Threads REQUIRED)
104ENDIF()
105
Marat Dukhan3645b922017-10-13 17:03:35 -0400106ADD_LIBRARY(cpuinfo ${CPUINFO_SRCS})
107SET_TARGET_PROPERTIES(cpuinfo PROPERTIES VERSION ${PROJECT_VERSION})
108SET_TARGET_PROPERTIES(cpuinfo PROPERTIES PUBLIC_HEADER include/cpuinfo.h)
109TARGET_INCLUDE_DIRECTORIES(cpuinfo PRIVATE include)
110TARGET_INCLUDE_DIRECTORIES(cpuinfo PRIVATE src)
Marat Dukhanbfff3482017-10-15 22:24:32 +0000111IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android")
112 TARGET_LINK_LIBRARIES(cpuinfo PUBLIC ${CMAKE_THREAD_LIBS_INIT})
113ENDIF()
Marat Dukhan3645b922017-10-13 17:03:35 -0400114
115INSTALL(TARGETS cpuinfo
116 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
117 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
118 PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
119
Marat Dukhanb8a83372017-10-13 21:07:44 -0400120# ---[ cpuinfo mock library
121IF(BUILD_MOCK_TESTS)
122 SET(CPUINFO_MOCK_SRCS "${CPUINFO_SRCS}")
123 IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android")
124 LIST(APPEND CPUINFO_MOCK_SRCS src/linux/mockfile.c)
125 ENDIF()
126
127 ADD_LIBRARY(cpuinfo_mock ${CPUINFO_MOCK_SRCS})
128 SET_TARGET_PROPERTIES(cpuinfo_mock PROPERTIES VERSION ${PROJECT_VERSION})
129 SET_TARGET_PROPERTIES(cpuinfo_mock PROPERTIES PUBLIC_HEADER include/cpuinfo.h)
130 TARGET_INCLUDE_DIRECTORIES(cpuinfo_mock PRIVATE include)
131 TARGET_INCLUDE_DIRECTORIES(cpuinfo_mock PRIVATE src)
132 TARGET_COMPILE_DEFINITIONS(cpuinfo_mock PRIVATE "-DCPUINFO_MOCK=1")
Marat Dukhanbfff3482017-10-15 22:24:32 +0000133 IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android")
134 TARGET_LINK_LIBRARIES(cpuinfo_mock PUBLIC ${CMAKE_THREAD_LIBS_INIT})
135 ENDIF()
Marat Dukhanb8a83372017-10-13 21:07:44 -0400136ENDIF()
137
Marat Dukhan3645b922017-10-13 17:03:35 -0400138# ---[ Helper and debug tools
139IF(BUILD_TOOLS)
140 ADD_EXECUTABLE(isa-info tools/isa-info.c)
141 TARGET_LINK_LIBRARIES(isa-info PRIVATE cpuinfo)
142
143 ADD_EXECUTABLE(cpu-info tools/cpu-info.c)
144 TARGET_LINK_LIBRARIES(cpu-info PRIVATE cpuinfo)
145
146 ADD_EXECUTABLE(cache-info tools/cache-info.c)
147 TARGET_LINK_LIBRARIES(cache-info PRIVATE cpuinfo)
148
149 IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(i686|x86_64)$")
150 ADD_EXECUTABLE(cpuid-dump tools/cpuid-dump.c)
151 TARGET_INCLUDE_DIRECTORIES(cpuid-dump PRIVATE src)
152 TARGET_INCLUDE_DIRECTORIES(cpuid-dump PRIVATE include)
153 ENDIF()
154ENDIF()