CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
hrydgard

CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!

GitHub Repository: hrydgard/ppsspp
Path: blob/master/ext/cmake/cpu_features/CMakeLists.txt
Views: 1401
1
cmake_minimum_required(VERSION 3.13)
2
3
# option() honors normal variables.
4
# see: https://cmake.org/cmake/help/git-stage/policy/CMP0077.html
5
if(POLICY CMP0077)
6
cmake_policy(SET CMP0077 NEW)
7
endif()
8
9
project(CpuFeatures VERSION 0.7.0 LANGUAGES C)
10
11
set(CMAKE_C_STANDARD 99)
12
13
# Default Build Type to be Release
14
if(NOT CMAKE_BUILD_TYPE)
15
set(CMAKE_BUILD_TYPE "Release" CACHE STRING
16
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel."
17
FORCE)
18
endif(NOT CMAKE_BUILD_TYPE)
19
20
# BUILD_SHARED_LIBS is a standard CMake variable, but we declare it here to make
21
# it prominent in the GUI.
22
# cpu_features uses bit-fields which are - to some extends - implementation-defined (see https://en.cppreference.com/w/c/language/bit_field).
23
# As a consequence it is discouraged to use cpu_features as a shared library because different compilers may interpret the code in different ways.
24
# Prefer static linking from source whenever possible.
25
option(BUILD_SHARED_LIBS "Build library as shared." OFF)
26
27
# Force PIC on unix when building shared libs
28
# see: https://en.wikipedia.org/wiki/Position-independent_code
29
if(BUILD_SHARED_LIBS AND UNIX)
30
option(CMAKE_POSITION_INDEPENDENT_CODE "Build with Position Independant Code." ON)
31
endif()
32
33
include(CheckIncludeFile)
34
include(CheckSymbolExists)
35
include(GNUInstallDirs)
36
37
macro(setup_include_and_definitions TARGET_NAME)
38
target_include_directories(${TARGET_NAME}
39
PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/../../cpu_features/include>
40
PRIVATE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/../../cpu_features/include/internal>
41
)
42
target_compile_definitions(${TARGET_NAME}
43
PUBLIC STACK_LINE_READER_BUFFER_SIZE=1024
44
)
45
endmacro()
46
47
set(PROCESSOR_IS_MIPS FALSE)
48
set(PROCESSOR_IS_ARM FALSE)
49
set(PROCESSOR_IS_AARCH64 FALSE)
50
set(PROCESSOR_IS_X86 FALSE)
51
set(PROCESSOR_IS_POWER FALSE)
52
set(PROCESSOR_IS_S390X FALSE)
53
set(PROCESSOR_IS_RISCV FALSE)
54
set(PROCESSOR_IS_LOONGARCH FALSE)
55
56
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips")
57
set(PROCESSOR_IS_MIPS TRUE)
58
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(^aarch64)|(^arm64)|(^ARM64)")
59
set(PROCESSOR_IS_AARCH64 TRUE)
60
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
61
set(PROCESSOR_IS_ARM TRUE)
62
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(x86_64)|(AMD64|amd64)|(^i.86$)")
63
set(PROCESSOR_IS_X86 TRUE)
64
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)")
65
set(PROCESSOR_IS_POWER TRUE)
66
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(s390x)")
67
set(PROCESSOR_IS_S390X TRUE)
68
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^riscv")
69
set(PROCESSOR_IS_RISCV TRUE)
70
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^loongarch")
71
set(PROCESSOR_IS_LOONGARCH TRUE)
72
endif()
73
74
macro(add_cpu_features_headers_and_sources HDRS_LIST_NAME SRCS_LIST_NAME)
75
list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/cpu_features_macros.h)
76
list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/cpu_features_cache_info.h)
77
file(GLOB IMPL_SOURCES CONFIGURE_DEPENDS "${PROJECT_SOURCE_DIR}/../../cpu_features/src/impl_*.c")
78
list(APPEND ${SRCS_LIST_NAME} ${IMPL_SOURCES})
79
if(PROCESSOR_IS_MIPS)
80
list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/cpuinfo_mips.h)
81
elseif(PROCESSOR_IS_ARM)
82
list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/cpuinfo_arm.h)
83
elseif(PROCESSOR_IS_AARCH64)
84
list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/cpuinfo_aarch64.h)
85
list(APPEND ${SRCS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/internal/windows_utils.h)
86
elseif(PROCESSOR_IS_X86)
87
list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/cpuinfo_x86.h)
88
list(APPEND ${SRCS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/internal/cpuid_x86.h)
89
list(APPEND ${SRCS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/internal/windows_utils.h)
90
elseif(PROCESSOR_IS_POWER)
91
list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/cpuinfo_ppc.h)
92
elseif(PROCESSOR_IS_S390X)
93
list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/cpuinfo_s390x.h)
94
elseif(PROCESSOR_IS_RISCV)
95
list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/cpuinfo_riscv.h)
96
elseif(PROCESSOR_IS_LOONGARCH)
97
list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/cpuinfo_loongarch.h)
98
else()
99
message(FATAL_ERROR "Unsupported architectures ${CMAKE_SYSTEM_PROCESSOR}")
100
endif()
101
endmacro()
102
103
#
104
# library : utils
105
#
106
107
add_library(utils OBJECT
108
${PROJECT_SOURCE_DIR}/../../cpu_features/include/internal/bit_utils.h
109
${PROJECT_SOURCE_DIR}/../../cpu_features/include/internal/filesystem.h
110
${PROJECT_SOURCE_DIR}/../../cpu_features/include/internal/stack_line_reader.h
111
${PROJECT_SOURCE_DIR}/../../cpu_features/include/internal/string_view.h
112
${PROJECT_SOURCE_DIR}/../../cpu_features/src/filesystem.c
113
${PROJECT_SOURCE_DIR}/../../cpu_features/src/stack_line_reader.c
114
${PROJECT_SOURCE_DIR}/../../cpu_features/src/string_view.c
115
)
116
setup_include_and_definitions(utils)
117
118
#
119
# library : unix_based_hardware_detection
120
#
121
122
if(UNIX)
123
add_library(unix_based_hardware_detection OBJECT
124
${PROJECT_SOURCE_DIR}/../../cpu_features/include/internal/hwcaps.h
125
${PROJECT_SOURCE_DIR}/../../cpu_features/src/hwcaps.c
126
)
127
setup_include_and_definitions(unix_based_hardware_detection)
128
check_include_file(dlfcn.h HAVE_DLFCN_H)
129
if(HAVE_DLFCN_H)
130
target_compile_definitions(unix_based_hardware_detection PRIVATE HAVE_DLFCN_H)
131
endif()
132
check_symbol_exists(getauxval "sys/auxv.h" HAVE_STRONG_GETAUXVAL)
133
if(HAVE_STRONG_GETAUXVAL)
134
target_compile_definitions(unix_based_hardware_detection PRIVATE HAVE_STRONG_GETAUXVAL)
135
endif()
136
endif()
137
138
#
139
# library : cpu_features
140
#
141
set (CPU_FEATURES_HDRS)
142
set (CPU_FEATURES_SRCS)
143
add_cpu_features_headers_and_sources(CPU_FEATURES_HDRS CPU_FEATURES_SRCS)
144
list(APPEND CPU_FEATURES_SRCS $<TARGET_OBJECTS:utils>)
145
if(NOT PROCESSOR_IS_X86 AND UNIX)
146
list(APPEND CPU_FEATURES_SRCS $<TARGET_OBJECTS:unix_based_hardware_detection>)
147
endif()
148
add_library(cpu_features ${CPU_FEATURES_HDRS} ${CPU_FEATURES_SRCS})
149
set_target_properties(cpu_features PROPERTIES PUBLIC_HEADER "${CPU_FEATURES_HDRS}")
150
setup_include_and_definitions(cpu_features)
151
if(NOT USE_LIBNX)
152
target_link_libraries(cpu_features PUBLIC ${CMAKE_DL_LIBS})
153
endif()
154
target_include_directories(cpu_features
155
PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/cpu_features>
156
)
157
if(APPLE)
158
target_compile_definitions(cpu_features PRIVATE HAVE_SYSCTLBYNAME)
159
endif()
160
add_library(CpuFeature::cpu_features ALIAS cpu_features)
161
162
#
163
# Install cpu_features and list_cpu_features
164
#
165
166
include(GNUInstallDirs)
167
install(TARGETS cpu_features
168
EXPORT CpuFeaturesTargets
169
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/cpu_features
170
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
171
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
172
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
173
BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR}
174
)
175
install(EXPORT CpuFeaturesTargets
176
NAMESPACE CpuFeatures::
177
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/CpuFeatures
178
COMPONENT Devel
179
)
180
include(CMakePackageConfigHelpers)
181
configure_package_config_file(../../cpu_features/cmake/CpuFeaturesConfig.cmake.in
182
"${PROJECT_BINARY_DIR}/CpuFeaturesConfig.cmake"
183
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/CpuFeatures"
184
NO_SET_AND_CHECK_MACRO
185
NO_CHECK_REQUIRED_COMPONENTS_MACRO
186
)
187
write_basic_package_version_file(
188
"${PROJECT_BINARY_DIR}/CpuFeaturesConfigVersion.cmake"
189
COMPATIBILITY SameMajorVersion
190
)
191
install(
192
FILES
193
"${PROJECT_BINARY_DIR}/CpuFeaturesConfig.cmake"
194
"${PROJECT_BINARY_DIR}/CpuFeaturesConfigVersion.cmake"
195
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/CpuFeatures"
196
COMPONENT Devel
197
)
198
199