cmake: Add a finder for SIMD Everywhere

This commit is contained in:
tytan652
2025-08-21 15:22:08 -04:00
committed by Ryan Foster
parent c1a65901f5
commit 570f2641f4
+100
View File
@@ -0,0 +1,100 @@
#[=======================================================================[.rst
FindSIMDe
---------
FindModule for SIMD Everywhere
Imported Targets
^^^^^^^^^^^^^^^^
.. versionadded:: 3.0
This module defines the :prop_tgt:`IMPORTED` target ``SIMDe::SIMDe``.
Result Variables
^^^^^^^^^^^^^^^^
This module sets the following variables:
``SIMDe_FOUND``
True, if headers were found.
``SIMDe_VERSION``
Detected version of found SIMDe Everywhere.
Cache variables
^^^^^^^^^^^^^^^
The following cache variables may also be set:
``SIMDe_INCLUDE_DIR``
Directory containing ``simde/simde-common.h``.
#]=======================================================================]
include(FindPackageHandleStandardArgs)
find_package(PkgConfig QUIET)
if(PKG_CONFIG_FOUND)
pkg_search_module(PC_SIMDe QUIET simde)
endif()
find_path(
SIMDe_INCLUDE_DIR
NAMES simde/simde-common.h
HINTS ${PC_SIMDe_INCLUDE_DIRS}
PATHS /usr/include /usr/local/include
DOC "SIMD Everywhere include directory"
)
if(EXISTS "${SIMDe_INCLUDE_DIR}/simde/simde-common.h")
file(
STRINGS
"${SIMDe_INCLUDE_DIR}/simde/simde-common.h"
_version_string
REGEX "^.*VERSION_(MAJOR|MINOR|MICRO)[ \t]+[0-9]+[ \t]*$"
)
string(REGEX REPLACE ".*VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" _version_major "${_version_string}")
string(REGEX REPLACE ".*VERSION_MINOR[ \t]+([0-9]+).*" "\\1" _version_minor "${_version_string}")
string(REGEX REPLACE ".*VERSION_MICRO[ \t]+([0-9]+).*" "\\1" _version_release "${_version_string}")
set(SIMDe_VERSION "${_version_major}.${_version_minor}.${_version_release}")
unset(_version_major)
unset(_version_minor)
unset(_version_release)
else()
if(NOT SIMDe_FIND_QUIETLY)
message(AUTHOR_WARNING "Failed to find SIMD Everywhere version.")
endif()
set(SIMDe_VERSION 0.0.0)
endif()
if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin|Windows")
set(SIMDe_ERROR_REASON "Ensure that obs-deps is provided as part of CMAKE_PREFIX_PATH.")
elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD")
set(SIMDe_ERROR_REASON "Ensure SIMD Everywhere is available in local library paths.")
endif()
find_package_handle_standard_args(
SIMDe
REQUIRED_VARS SIMDe_INCLUDE_DIR
VERSION_VAR SIMDe_VERSION
REASON_FAILURE_MESSAGE "${SIMDe_ERROR_REASON}"
)
mark_as_advanced(SIMDe_INCLUDE_DIR)
unset(SIMDe_ERROR_REASON)
if(SIMDe_FOUND)
if(NOT TARGET SIMDe::SIMDe)
add_library(SIMDe::SIMDe INTERFACE IMPORTED)
set_target_properties(SIMDe::SIMDe PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${SIMDe_INCLUDE_DIR}")
endif()
endif()
include(FeatureSummary)
set_package_properties(
SIMDe
PROPERTIES
URL "https://github.com/simd-everywhere/simde"
DESCRIPTION "Implementations of SIMD instruction sets for systems which don't natively support them."
)