From e2e8193495d0569d9b174fb0df9785cd38449cc7 Mon Sep 17 00:00:00 2001
From: Koichiro Iwao
Date: Tue, 14 Jan 2025 22:58:20 +0900
Subject: [PATCH] Improve the usage of cpu_features
- Add USE_SYSTEM_CPU_FEATURES flag to use system's cpu_features
instead of the bundled one
- Allow the use of cpu_features for more architectures on Linux [1]
[1] https://github.com/google/cpu_features/tree/v0.9.0?tab=readme-ov-file#whats-supported
---
src/CMakeLists.txt | 3 +++
src/Mayaqua/CMakeLists.txt | 13 ++++++++++++-
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index c49a3c78..8f9f9843 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -127,6 +127,9 @@ if(UNIX)
if(SE_PIDDIR)
add_definitions(-DSE_PIDDIR="${SE_PIDDIR}")
endif()
+
+ # Use system libraries instead of bundled
+ set(USE_SYSTEM_CPU_FEATURES false CACHE BOOL "Use system cpu_features")
endif()
# Cedar communication module
diff --git a/src/Mayaqua/CMakeLists.txt b/src/Mayaqua/CMakeLists.txt
index 51acec0b..8544e45d 100644
--- a/src/Mayaqua/CMakeLists.txt
+++ b/src/Mayaqua/CMakeLists.txt
@@ -109,8 +109,19 @@ if(UNIX)
$<$:${LIB_RT}>
)
- if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv7l|aarch64|s390x)$" OR NOT HAVE_SYS_AUXV OR SKIP_CPU_FEATURES)
+ if (NOT HAVE_SYS_AUXV OR SKIP_CPU_FEATURES)
add_definitions(-DSKIP_CPU_FEATURES)
+ elseif(${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD" AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^(amd64|i386)")
+ message("cpu_features is not available on FreeBSD/${CMAKE_SYSTEM_PROCESSOR}")
+ add_definitions(-DSKIP_CPU_FEATURES)
+ elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" AND NOT CMAKE_SYSTEM_NAME MATCHES "^(arm64|x86_64)")
+ # macOS runs only on Intel or ARM architecrues, should not reach here
+ add_definitions(-DSKIP_CPU_FEATURES)
+ elseif(${CMAKE_SYSTEM_NAME} STREQUAL "SunOS" OR ${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD")
+ message("cpu_features is not available on ${CMAKE_SYSTEM_NAME}")
+ add_definitions(-DSKIP_CPU_FEATURES)
+ elseif(USE_SYSTEM_CPU_FEATURES)
+ target_link_libraries(mayaqua PRIVATE cpu_features)
else()
add_subdirectory(3rdparty/cpu_features)
set_property(TARGET cpu_features PROPERTY POSITION_INDEPENDENT_CODE ON)