CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!
CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!
Path: blob/master/ext/cmake/cpu_features/CMakeLists.txt
Views: 1401
cmake_minimum_required(VERSION 3.13)12# option() honors normal variables.3# see: https://cmake.org/cmake/help/git-stage/policy/CMP0077.html4if(POLICY CMP0077)5cmake_policy(SET CMP0077 NEW)6endif()78project(CpuFeatures VERSION 0.7.0 LANGUAGES C)910set(CMAKE_C_STANDARD 99)1112# Default Build Type to be Release13if(NOT CMAKE_BUILD_TYPE)14set(CMAKE_BUILD_TYPE "Release" CACHE STRING15"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel."16FORCE)17endif(NOT CMAKE_BUILD_TYPE)1819# BUILD_SHARED_LIBS is a standard CMake variable, but we declare it here to make20# it prominent in the GUI.21# cpu_features uses bit-fields which are - to some extends - implementation-defined (see https://en.cppreference.com/w/c/language/bit_field).22# As a consequence it is discouraged to use cpu_features as a shared library because different compilers may interpret the code in different ways.23# Prefer static linking from source whenever possible.24option(BUILD_SHARED_LIBS "Build library as shared." OFF)2526# Force PIC on unix when building shared libs27# see: https://en.wikipedia.org/wiki/Position-independent_code28if(BUILD_SHARED_LIBS AND UNIX)29option(CMAKE_POSITION_INDEPENDENT_CODE "Build with Position Independant Code." ON)30endif()3132include(CheckIncludeFile)33include(CheckSymbolExists)34include(GNUInstallDirs)3536macro(setup_include_and_definitions TARGET_NAME)37target_include_directories(${TARGET_NAME}38PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/../../cpu_features/include>39PRIVATE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/../../cpu_features/include/internal>40)41target_compile_definitions(${TARGET_NAME}42PUBLIC STACK_LINE_READER_BUFFER_SIZE=102443)44endmacro()4546set(PROCESSOR_IS_MIPS FALSE)47set(PROCESSOR_IS_ARM FALSE)48set(PROCESSOR_IS_AARCH64 FALSE)49set(PROCESSOR_IS_X86 FALSE)50set(PROCESSOR_IS_POWER FALSE)51set(PROCESSOR_IS_S390X FALSE)52set(PROCESSOR_IS_RISCV FALSE)53set(PROCESSOR_IS_LOONGARCH FALSE)5455if(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips")56set(PROCESSOR_IS_MIPS TRUE)57elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(^aarch64)|(^arm64)|(^ARM64)")58set(PROCESSOR_IS_AARCH64 TRUE)59elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")60set(PROCESSOR_IS_ARM TRUE)61elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(x86_64)|(AMD64|amd64)|(^i.86$)")62set(PROCESSOR_IS_X86 TRUE)63elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)")64set(PROCESSOR_IS_POWER TRUE)65elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(s390x)")66set(PROCESSOR_IS_S390X TRUE)67elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^riscv")68set(PROCESSOR_IS_RISCV TRUE)69elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^loongarch")70set(PROCESSOR_IS_LOONGARCH TRUE)71endif()7273macro(add_cpu_features_headers_and_sources HDRS_LIST_NAME SRCS_LIST_NAME)74list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/cpu_features_macros.h)75list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/cpu_features_cache_info.h)76file(GLOB IMPL_SOURCES CONFIGURE_DEPENDS "${PROJECT_SOURCE_DIR}/../../cpu_features/src/impl_*.c")77list(APPEND ${SRCS_LIST_NAME} ${IMPL_SOURCES})78if(PROCESSOR_IS_MIPS)79list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/cpuinfo_mips.h)80elseif(PROCESSOR_IS_ARM)81list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/cpuinfo_arm.h)82elseif(PROCESSOR_IS_AARCH64)83list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/cpuinfo_aarch64.h)84list(APPEND ${SRCS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/internal/windows_utils.h)85elseif(PROCESSOR_IS_X86)86list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/cpuinfo_x86.h)87list(APPEND ${SRCS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/internal/cpuid_x86.h)88list(APPEND ${SRCS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/internal/windows_utils.h)89elseif(PROCESSOR_IS_POWER)90list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/cpuinfo_ppc.h)91elseif(PROCESSOR_IS_S390X)92list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/cpuinfo_s390x.h)93elseif(PROCESSOR_IS_RISCV)94list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/cpuinfo_riscv.h)95elseif(PROCESSOR_IS_LOONGARCH)96list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/../../cpu_features/include/cpuinfo_loongarch.h)97else()98message(FATAL_ERROR "Unsupported architectures ${CMAKE_SYSTEM_PROCESSOR}")99endif()100endmacro()101102#103# library : utils104#105106add_library(utils OBJECT107${PROJECT_SOURCE_DIR}/../../cpu_features/include/internal/bit_utils.h108${PROJECT_SOURCE_DIR}/../../cpu_features/include/internal/filesystem.h109${PROJECT_SOURCE_DIR}/../../cpu_features/include/internal/stack_line_reader.h110${PROJECT_SOURCE_DIR}/../../cpu_features/include/internal/string_view.h111${PROJECT_SOURCE_DIR}/../../cpu_features/src/filesystem.c112${PROJECT_SOURCE_DIR}/../../cpu_features/src/stack_line_reader.c113${PROJECT_SOURCE_DIR}/../../cpu_features/src/string_view.c114)115setup_include_and_definitions(utils)116117#118# library : unix_based_hardware_detection119#120121if(UNIX)122add_library(unix_based_hardware_detection OBJECT123${PROJECT_SOURCE_DIR}/../../cpu_features/include/internal/hwcaps.h124${PROJECT_SOURCE_DIR}/../../cpu_features/src/hwcaps.c125)126setup_include_and_definitions(unix_based_hardware_detection)127check_include_file(dlfcn.h HAVE_DLFCN_H)128if(HAVE_DLFCN_H)129target_compile_definitions(unix_based_hardware_detection PRIVATE HAVE_DLFCN_H)130endif()131check_symbol_exists(getauxval "sys/auxv.h" HAVE_STRONG_GETAUXVAL)132if(HAVE_STRONG_GETAUXVAL)133target_compile_definitions(unix_based_hardware_detection PRIVATE HAVE_STRONG_GETAUXVAL)134endif()135endif()136137#138# library : cpu_features139#140set (CPU_FEATURES_HDRS)141set (CPU_FEATURES_SRCS)142add_cpu_features_headers_and_sources(CPU_FEATURES_HDRS CPU_FEATURES_SRCS)143list(APPEND CPU_FEATURES_SRCS $<TARGET_OBJECTS:utils>)144if(NOT PROCESSOR_IS_X86 AND UNIX)145list(APPEND CPU_FEATURES_SRCS $<TARGET_OBJECTS:unix_based_hardware_detection>)146endif()147add_library(cpu_features ${CPU_FEATURES_HDRS} ${CPU_FEATURES_SRCS})148set_target_properties(cpu_features PROPERTIES PUBLIC_HEADER "${CPU_FEATURES_HDRS}")149setup_include_and_definitions(cpu_features)150if(NOT USE_LIBNX)151target_link_libraries(cpu_features PUBLIC ${CMAKE_DL_LIBS})152endif()153target_include_directories(cpu_features154PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/cpu_features>155)156if(APPLE)157target_compile_definitions(cpu_features PRIVATE HAVE_SYSCTLBYNAME)158endif()159add_library(CpuFeature::cpu_features ALIAS cpu_features)160161#162# Install cpu_features and list_cpu_features163#164165include(GNUInstallDirs)166install(TARGETS cpu_features167EXPORT CpuFeaturesTargets168PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/cpu_features169ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}170LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}171RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}172BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR}173)174install(EXPORT CpuFeaturesTargets175NAMESPACE CpuFeatures::176DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/CpuFeatures177COMPONENT Devel178)179include(CMakePackageConfigHelpers)180configure_package_config_file(../../cpu_features/cmake/CpuFeaturesConfig.cmake.in181"${PROJECT_BINARY_DIR}/CpuFeaturesConfig.cmake"182INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/CpuFeatures"183NO_SET_AND_CHECK_MACRO184NO_CHECK_REQUIRED_COMPONENTS_MACRO185)186write_basic_package_version_file(187"${PROJECT_BINARY_DIR}/CpuFeaturesConfigVersion.cmake"188COMPATIBILITY SameMajorVersion189)190install(191FILES192"${PROJECT_BINARY_DIR}/CpuFeaturesConfig.cmake"193"${PROJECT_BINARY_DIR}/CpuFeaturesConfigVersion.cmake"194DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/CpuFeatures"195COMPONENT Devel196)197198199