mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2026-06-08 21:52:13 +00:00
e82624d981
Refactor Python detection Improve imported target handling Improve version detection Improve naming consistency
166 lines
5.2 KiB
CMake
166 lines
5.2 KiB
CMake
# GNSS-SDR is a Global Navigation Satellite System software-defined receiver.
|
|
# This file is part of GNSS-SDR.
|
|
#
|
|
# SPDX-FileCopyrightText: 2021-2026 C. Fernandez-Prades cfernandez(at)cttc.es
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
set(FPHSA_NAME_MISMATCHED ON)
|
|
|
|
########################################################################
|
|
# Find cpu_features
|
|
#
|
|
# Provides the following imported target:
|
|
# CpuFeature::cpu_features
|
|
########################################################################
|
|
|
|
if(NOT DEFINED GNSSSDR_LIB_PATHS)
|
|
include(GnsssdrFindPaths)
|
|
endif()
|
|
|
|
|
|
########################################################################
|
|
# Build candidate root list
|
|
########################################################################
|
|
set(_CPUFEATURES_ROOT_HINTS)
|
|
|
|
if(CPUFEATURES_DIR)
|
|
list(APPEND _CPUFEATURES_ROOT_HINTS "${CPUFEATURES_DIR}")
|
|
endif()
|
|
|
|
if(DEFINED ENV{CPUFEATURES_DIR} AND NOT "$ENV{CPUFEATURES_DIR}" STREQUAL "")
|
|
list(APPEND _CPUFEATURES_ROOT_HINTS "$ENV{CPUFEATURES_DIR}")
|
|
endif()
|
|
|
|
if(CMAKE_INSTALL_PREFIX)
|
|
list(APPEND _CPUFEATURES_ROOT_HINTS "${CMAKE_INSTALL_PREFIX}")
|
|
endif()
|
|
if(DEFINED _CPUFEATURES_ROOT_HINTS)
|
|
list(REMOVE_DUPLICATES _CPUFEATURES_ROOT_HINTS)
|
|
endif()
|
|
|
|
|
|
########################################################################
|
|
# Search paths for headers and libraries
|
|
########################################################################
|
|
set(_CPUFEATURES_INCLUDE_HINTS)
|
|
set(_CPUFEATURES_LIBRARY_HINTS)
|
|
|
|
foreach(_cpufeatures_prefix ${_CPUFEATURES_ROOT_HINTS})
|
|
list(APPEND _CPUFEATURES_INCLUDE_HINTS
|
|
"${_cpufeatures_prefix}"
|
|
"${_cpufeatures_prefix}/include"
|
|
)
|
|
list(APPEND _CPUFEATURES_LIBRARY_HINTS
|
|
"${_cpufeatures_prefix}/lib"
|
|
"${_cpufeatures_prefix}/lib64"
|
|
)
|
|
endforeach()
|
|
|
|
list(APPEND _CPUFEATURES_INCLUDE_HINTS ${GNSSSDR_INCLUDE_PATHS})
|
|
list(APPEND _CPUFEATURES_LIBRARY_HINTS ${GNSSSDR_LIB_PATHS})
|
|
|
|
list(REMOVE_DUPLICATES _CPUFEATURES_INCLUDE_HINTS)
|
|
list(REMOVE_DUPLICATES _CPUFEATURES_LIBRARY_HINTS)
|
|
|
|
|
|
########################################################################
|
|
# Find headers and library
|
|
########################################################################
|
|
find_library(CPUFEATURES_LIBRARY
|
|
NAMES cpu_features
|
|
PATHS ${_CPUFEATURES_LIBRARY_HINTS}
|
|
)
|
|
|
|
find_path(CPUFEATURES_INCLUDE_DIR
|
|
NAMES cpu_features_macros.h
|
|
PATHS ${_CPUFEATURES_INCLUDE_HINTS}
|
|
PATH_SUFFIXES cpu_features
|
|
)
|
|
|
|
|
|
########################################################################
|
|
# Standard result handling
|
|
########################################################################
|
|
include(FindPackageHandleStandardArgs)
|
|
find_package_handle_standard_args(CPUFEATURES
|
|
DEFAULT_MSG
|
|
CPUFEATURES_LIBRARY
|
|
CPUFEATURES_INCLUDE_DIR
|
|
)
|
|
|
|
|
|
########################################################################
|
|
# Determine version
|
|
########################################################################
|
|
if(CPUFEATURES_FOUND)
|
|
get_filename_component(_CPUFEATURES_LIBRARY_PATH
|
|
"${CPUFEATURES_LIBRARY}" DIRECTORY
|
|
)
|
|
if(EXISTS "${_CPUFEATURES_LIBRARY_PATH}/cmake/CpuFeatures/CpuFeaturesConfigVersion.cmake")
|
|
if(DEFINED PACKAGE_VERSION)
|
|
set(_CPUFEATURES_PACKAGE_VERSION_WAS_DEFINED TRUE)
|
|
set(_CPUFEATURES_OLD_PACKAGE_VERSION "${PACKAGE_VERSION}")
|
|
else()
|
|
set(_CPUFEATURES_PACKAGE_VERSION_WAS_DEFINED FALSE)
|
|
endif()
|
|
|
|
unset(PACKAGE_VERSION)
|
|
include(
|
|
"${_CPUFEATURES_LIBRARY_PATH}/cmake/CpuFeatures/CpuFeaturesConfigVersion.cmake"
|
|
)
|
|
|
|
if(PACKAGE_VERSION)
|
|
set(CPUFEATURES_VERSION "${PACKAGE_VERSION}")
|
|
else()
|
|
set(CPUFEATURES_VERSION "Unknown")
|
|
endif()
|
|
|
|
unset(PACKAGE_VERSION)
|
|
|
|
if(_CPUFEATURES_PACKAGE_VERSION_WAS_DEFINED)
|
|
set(PACKAGE_VERSION "${_CPUFEATURES_OLD_PACKAGE_VERSION}")
|
|
else()
|
|
unset(PACKAGE_VERSION)
|
|
endif()
|
|
|
|
unset(_CPUFEATURES_PACKAGE_VERSION_WAS_DEFINED)
|
|
unset(_CPUFEATURES_OLD_PACKAGE_VERSION)
|
|
else()
|
|
set(CPUFEATURES_VERSION "Unknown")
|
|
endif()
|
|
endif()
|
|
|
|
|
|
########################################################################
|
|
# Compatibility variables
|
|
########################################################################
|
|
set(CPUFEATURES_LIBRARIES "${CPUFEATURES_LIBRARY}")
|
|
|
|
mark_as_advanced(
|
|
CPUFEATURES_LIBRARY
|
|
CPUFEATURES_LIBRARIES
|
|
CPUFEATURES_INCLUDE_DIR
|
|
CPUFEATURES_VERSION
|
|
)
|
|
|
|
|
|
########################################################################
|
|
# Define imported target
|
|
########################################################################
|
|
if(CPUFEATURES_FOUND AND NOT TARGET CpuFeature::cpu_features)
|
|
add_library(CpuFeature::cpu_features UNKNOWN IMPORTED)
|
|
set_target_properties(CpuFeature::cpu_features PROPERTIES
|
|
IMPORTED_LOCATION "${CPUFEATURES_LIBRARY}"
|
|
INTERFACE_INCLUDE_DIRECTORIES "${CPUFEATURES_INCLUDE_DIR}"
|
|
)
|
|
endif()
|
|
|
|
|
|
########################################################################
|
|
# Cleanup internal variables
|
|
########################################################################
|
|
unset(_CPUFEATURES_ROOT_HINTS)
|
|
unset(_CPUFEATURES_INCLUDE_HINTS)
|
|
unset(_CPUFEATURES_LIBRARY_HINTS)
|
|
unset(_CPUFEATURES_LIBRARY_PATH)
|
|
unset(_cpufeatures_prefix) |