diff --git a/.gitmodules b/.gitmodules index cebde5699d844f297ad5474725e5b5774a69ea83..df7b945dce45f9f368b1f57cd00da0ff3245ae68 100644 --- a/.gitmodules +++ b/.gitmodules @@ -154,3 +154,6 @@ [submodule "contrib/msgpack-c"] path = contrib/msgpack-c url = https://github.com/msgpack/msgpack-c +[submodule "contrib/libcpuid"] + path = contrib/libcpuid + url = https://github.com/anrieff/libcpuid.git diff --git a/CMakeLists.txt b/CMakeLists.txt index c1451990bdb47a188c75ebaa11e88a4061e17d5f..0c170acf860039abedad57ce7bd85d71a9bc351e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -192,16 +192,16 @@ endif () option(WITH_COVERAGE "Build with coverage." 0) -if(WITH_COVERAGE AND COMPILER_CLANG) - set(COMPILER_FLAGS "${COMPILER_FLAGS} -fprofile-instr-generate -fcoverage-mapping") - # If we want to disable coverage for specific translation units - set(WITHOUT_COVERAGE "-fno-profile-instr-generate -fno-coverage-mapping") +if (WITH_COVERAGE AND COMPILER_CLANG) + set(COMPILER_FLAGS "${COMPILER_FLAGS} -fprofile-instr-generate -fcoverage-mapping") + # If we want to disable coverage for specific translation units + set(WITHOUT_COVERAGE "-fno-profile-instr-generate -fno-coverage-mapping") endif() -if(WITH_COVERAGE AND COMPILER_GCC) - set(COMPILER_FLAGS "${COMPILER_FLAGS} -fprofile-arcs -ftest-coverage") - set(COVERAGE_OPTION "-lgcov") - set(WITHOUT_COVERAGE "-fno-profile-arcs -fno-test-coverage") +if (WITH_COVERAGE AND COMPILER_GCC) + set(COMPILER_FLAGS "${COMPILER_FLAGS} -fprofile-arcs -ftest-coverage") + set(COVERAGE_OPTION "-lgcov") + set(WITHOUT_COVERAGE "-fno-profile-arcs -fno-test-coverage") endif() set (CMAKE_BUILD_COLOR_MAKEFILE ON) @@ -338,7 +338,7 @@ endif () message (STATUS "Building for: ${CMAKE_SYSTEM} ${CMAKE_SYSTEM_PROCESSOR} ${CMAKE_LIBRARY_ARCHITECTURE} ; USE_STATIC_LIBRARIES=${USE_STATIC_LIBRARIES} MAKE_STATIC_LIBRARIES=${MAKE_STATIC_LIBRARIES} SPLIT_SHARED=${SPLIT_SHARED_LIBRARIES} UNBUNDLED=${UNBUNDLED} CCACHE=${CCACHE_FOUND} ${CCACHE_VERSION}") -include(GNUInstallDirs) +include (GNUInstallDirs) include (cmake/contrib_finder.cmake) include (cmake/lib_name.cmake) @@ -350,9 +350,7 @@ include (cmake/find/zlib.cmake) include (cmake/find/zstd.cmake) include (cmake/find/ltdl.cmake) # for odbc include (cmake/find/termcap.cmake) -include (cmake/find/odbc.cmake) -# openssl, zlib, odbc before poco -include (cmake/find/poco.cmake) +# openssl, zlib before poco include (cmake/find/lz4.cmake) include (cmake/find/xxhash.cmake) include (cmake/find/sparsehash.cmake) @@ -362,10 +360,6 @@ include (cmake/find/rdkafka.cmake) include (cmake/find/capnp.cmake) include (cmake/find/llvm.cmake) include (cmake/find/h3.cmake) -include (cmake/find/cpuid.cmake) # Freebsd, bundled -if (NOT USE_CPUID) - include (cmake/find/cpuinfo.cmake) # Debian -endif() include (cmake/find/libxml2.cmake) include (cmake/find/brotli.cmake) include (cmake/find/protobuf.cmake) diff --git a/base/common/CMakeLists.txt b/base/common/CMakeLists.txt index 8f5887d0f384df281c7e3fafa70c4f56e24a7e53..710ba3e2567df11fac1b44d6f4fd2b26a099cfdd 100644 --- a/base/common/CMakeLists.txt +++ b/base/common/CMakeLists.txt @@ -1,5 +1,3 @@ -configure_file (config_common.h.in config_common.h) - set (SRCS argsToConfig.cpp coverage.cpp @@ -13,7 +11,7 @@ set (SRCS LineReader.cpp mremap.cpp phdr_cache.cpp - preciseExp10.c + preciseExp10.cpp setTerminalEcho.cpp shift10.cpp sleep.cpp @@ -49,11 +47,7 @@ if (NOT USE_INTERNAL_BOOST_LIBRARY) target_include_directories (common SYSTEM BEFORE PUBLIC ${Boost_INCLUDE_DIRS}) endif () -if(NOT USE_INTERNAL_POCO_LIBRARY) - target_include_directories (common SYSTEM BEFORE PUBLIC ${Poco_Foundation_INCLUDE_DIR}) -endif() - -# allow explicitly fallback to readline +# Allow explicit fallback to readline if (NOT ENABLE_REPLXX AND ENABLE_READLINE) message (STATUS "Attempt to fallback to readline explicitly") set (READLINE_PATHS "/usr/local/opt/readline/lib") @@ -77,12 +71,12 @@ endif () target_link_libraries (common PUBLIC - ${Poco_Net_LIBRARY} - ${Poco_Util_LIBRARY} - ${Poco_Foundation_LIBRARY} ${CITYHASH_LIBRARIES} ${Boost_SYSTEM_LIBRARY} FastMemcpy + Poco::Net + Poco::Net::SSL + Poco::Util replxx PRIVATE diff --git a/base/common/argsToConfig.cpp b/base/common/argsToConfig.cpp index 36801bea7a8f49d5beedb2ef85ead427aed1c79f..d7983779d2da2252c09ebc08717c47253a0a7ded 100644 --- a/base/common/argsToConfig.cpp +++ b/base/common/argsToConfig.cpp @@ -1,6 +1,5 @@ #include "argsToConfig.h" -#include #include #include diff --git a/base/common/config_common.h.in b/base/common/config_common.h.in deleted file mode 100644 index 29d487c3ab5c1c6ef7352d05c27e9120cd76059c..0000000000000000000000000000000000000000 --- a/base/common/config_common.h.in +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once - -// .h autogenerated by cmake ! - -#cmakedefine01 UNBUNDLED diff --git a/base/common/memory.h b/base/common/memory.h index e2bd8d618da28dd485613c8147d33e3227d01ba0..e82c019ceabaaff038e830ec10d58f315a11eb88 100644 --- a/base/common/memory.h +++ b/base/common/memory.h @@ -3,20 +3,12 @@ #include #include "defines.h" -#if __has_include() -#include -#endif - #if USE_JEMALLOC -#include - -#if JEMALLOC_VERSION_MAJOR < 4 - #undef USE_JEMALLOC - #define USE_JEMALLOC 0 - #include +# include #endif -#else -#include + +#if !USE_JEMALLOC || JEMALLOC_VERSION_MAJOR < 4 +# include #endif @@ -43,7 +35,7 @@ inline ALWAYS_INLINE void deleteImpl(void * ptr) noexcept free(ptr); } -#if USE_JEMALLOC +#if USE_JEMALLOC && JEMALLOC_VERSION_MAJOR >= 4 inline ALWAYS_INLINE void deleteSized(void * ptr, std::size_t size) noexcept { diff --git a/base/common/preciseExp10.c b/base/common/preciseExp10.cpp similarity index 99% rename from base/common/preciseExp10.c rename to base/common/preciseExp10.cpp index 49c87217e2064c4dbc0b877d00badc2484875ce2..a034ae2357bfe974bc56406f638c6ebbdc2f0be3 100644 --- a/base/common/preciseExp10.c +++ b/base/common/preciseExp10.cpp @@ -223,5 +223,5 @@ double preciseExp10(double x) if (n < -323) return 0; // Using lookup table based formula to get accurate results for integer arguments. - return exp2(3.32192809488736234787031942948939 * y) * p10[(int)n + 323]; + return exp2(3.32192809488736234787031942948939 * y) * p10[static_cast(n) + 323]; } diff --git a/base/common/preciseExp10.h b/base/common/preciseExp10.h index 137205c484cd24393a59ab1a7aaf27af48b8a78e..26a88318172bee06ac411bc71b42a7d9ebec07e3 100644 --- a/base/common/preciseExp10.h +++ b/base/common/preciseExp10.h @@ -8,9 +8,4 @@ * Note: the function names are different to avoid confusion with symbols from the system libm. */ -extern "C" -{ - double preciseExp10(double x); - -} diff --git a/base/common/ya.make b/base/common/ya.make index 31a66893330f2d2d65066ea4cb02ebe77603cc64..0f771cb91037c34a725cc17eb5d6aa047ca5ab8b 100644 --- a/base/common/ya.make +++ b/base/common/ya.make @@ -7,6 +7,9 @@ ADDINCL( CFLAGS (GLOBAL -DARCADIA_BUILD) +CFLAGS (GLOBAL -DUSE_CPUID=1) +CFLAGS (GLOBAL -DUSE_JEMALLOC=0) + IF (OS_DARWIN) CFLAGS (GLOBAL -DOS_DARWIN) ELSEIF (OS_FREEBSD) @@ -37,7 +40,7 @@ SRCS( LineReader.cpp mremap.cpp phdr_cache.cpp - preciseExp10.c + preciseExp10.cpp setTerminalEcho.cpp shift10.cpp sleep.cpp diff --git a/base/daemon/CMakeLists.txt b/base/daemon/CMakeLists.txt index e541d7633ef807de40ec160ce296527fdcd26d0c..5d9a37dc75e86edc398db2b32890b05292a5ca96 100644 --- a/base/daemon/CMakeLists.txt +++ b/base/daemon/CMakeLists.txt @@ -4,4 +4,4 @@ add_library (daemon ) target_include_directories (daemon PUBLIC ..) -target_link_libraries (daemon PUBLIC loggers PRIVATE clickhouse_common_io clickhouse_common_config common ${Poco_Net_LIBRARY} ${Poco_Util_LIBRARY} ${EXECINFO_LIBRARIES}) +target_link_libraries (daemon PUBLIC loggers PRIVATE clickhouse_common_io clickhouse_common_config common ${EXECINFO_LIBRARIES}) diff --git a/base/loggers/CMakeLists.txt b/base/loggers/CMakeLists.txt index bada5a2fe1d26e7dbdfb793716c531f4f2186c06..48868cf1e0ddc2a65f57dd16e9a5e0cf0b50ea1f 100644 --- a/base/loggers/CMakeLists.txt +++ b/base/loggers/CMakeLists.txt @@ -1,5 +1,5 @@ include(${ClickHouse_SOURCE_DIR}/cmake/dbms_glob_sources.cmake) add_headers_and_sources(loggers .) add_library(loggers ${loggers_sources} ${loggers_headers}) -target_link_libraries(loggers PRIVATE dbms clickhouse_common_io ${Poco_Foundation_LIBRARY}) +target_link_libraries(loggers PRIVATE dbms clickhouse_common_io) target_include_directories(loggers PUBLIC ..) diff --git a/base/mysqlxx/CMakeLists.txt b/base/mysqlxx/CMakeLists.txt index 6263de79be90f662058cd58b7f26acd93d4a5dd5..702e0197ffbd5080897d30ae150a9b58ee47eede 100644 --- a/base/mysqlxx/CMakeLists.txt +++ b/base/mysqlxx/CMakeLists.txt @@ -32,7 +32,7 @@ else () endif () endif () -target_link_libraries(mysqlxx PUBLIC common ${Poco_Util_LIBRARY} ${Poco_Foundation_LIBRARY} PRIVATE ${MYSQLCLIENT_LIBRARIES} PUBLIC ${Boost_SYSTEM_LIBRARY} PRIVATE ${ZLIB_LIBRARIES}) +target_link_libraries(mysqlxx PUBLIC common PRIVATE ${MYSQLCLIENT_LIBRARIES} PUBLIC ${Boost_SYSTEM_LIBRARY} PRIVATE ${ZLIB_LIBRARIES}) if(OPENSSL_LIBRARIES) target_link_libraries(mysqlxx PRIVATE ${OPENSSL_LIBRARIES}) endif() diff --git a/cmake/Modules/FindODBC.cmake b/cmake/Modules/FindODBC.cmake deleted file mode 100644 index 9e209c157775579a6712e0f2543fa5bd78218d08..0000000000000000000000000000000000000000 --- a/cmake/Modules/FindODBC.cmake +++ /dev/null @@ -1,147 +0,0 @@ -# Distributed under the OSI-approved BSD 3-Clause License. See accompanying -# file Copyright.txt or https://cmake.org/licensing for details. - -#.rst: -# FindMySQL -# ------- -# -# Find ODBC Runtime -# -# This will define the following variables:: -# -# ODBC_FOUND - True if the system has the libraries -# ODBC_INCLUDE_DIRS - where to find the headers -# ODBC_LIBRARIES - where to find the libraries -# ODBC_DEFINITIONS - compile definitons -# -# Hints: -# Set ``ODBC_ROOT_DIR`` to the root directory of an installation. -# -include(FindPackageHandleStandardArgs) - -find_package(PkgConfig QUIET) -pkg_check_modules(PC_ODBC QUIET odbc) - -if(WIN32) - get_filename_component(kit_dir "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots;KitsRoot]" REALPATH) - get_filename_component(kit81_dir "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots;KitsRoot81]" REALPATH) -endif() - -find_path(ODBC_INCLUDE_DIR - NAMES sql.h - HINTS - ${ODBC_ROOT_DIR}/include - ${ODBC_ROOT_INCLUDE_DIRS} - PATHS - ${PC_ODBC_INCLUDE_DIRS} - /usr/include - /usr/local/include - /usr/local/odbc/include - /usr/local/iodbc/include - "C:/Program Files/ODBC/include" - "C:/Program Files/Microsoft SDKs/Windows/v7.0/include" - "C:/Program Files/Microsoft SDKs/Windows/v6.0a/include" - "C:/ODBC/include" - "${kit_dir}/Include/um" - "${kit81_dir}/Include/um" - PATH_SUFFIXES - odbc - iodbc - DOC "Specify the directory containing sql.h." -) - -if(NOT ODBC_INCLUDE_DIR AND WIN32) - set(ODBC_INCLUDE_DIR "") -else() - set(REQUIRED_INCLUDE_DIR ODBC_INCLUDE_DIR) -endif() - -if(WIN32 AND CMAKE_SIZEOF_VOID_P EQUAL 8) - set(WIN_ARCH x64) -elseif(WIN32 AND CMAKE_SIZEOF_VOID_P EQUAL 4) - set(WIN_ARCH x86) -endif() - -find_library(ODBC_LIBRARY - NAMES unixodbc iodbc odbc odbc32 - HINTS - ${ODBC_ROOT_DIR}/lib - ${ODBC_ROOT_LIBRARY_DIRS} - PATHS - ${PC_ODBC_LIBRARY_DIRS} - /usr/lib - /usr/local/lib - /usr/local/odbc/lib - /usr/local/iodbc/lib - "C:/Program Files/ODBC/lib" - "C:/ODBC/lib/debug" - "C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Lib" - "${kit81_dir}/Lib/winv6.3/um" - "${kit_dir}/Lib/win8/um" - PATH_SUFIXES - odbc - ${WIN_ARCH} - DOC "Specify the ODBC driver manager library here." -) - -if(NOT ODBC_LIBRARY AND WIN32) - # List names of ODBC libraries on Windows - set(ODBC_LIBRARY odbc32.lib) -endif() - -# List additional libraries required to use ODBC library -if(WIN32 AND MSVC OR CMAKE_CXX_COMPILER_ID MATCHES "Intel") - set(_odbc_required_libs_names odbccp32;ws2_32) -endif() -foreach(_lib_name IN LISTS _odbc_required_libs_names) - find_library(_lib_path - NAMES ${_lib_name} - HINTS - ${ODBC_ROOT_DIR}/lib - ${ODBC_ROOT_LIBRARY_DIRS} - PATHS - ${PC_ODBC_LIBRARY_DIRS} - /usr/lib - /usr/local/lib - /usr/local/odbc/lib - /usr/local/iodbc/lib - "C:/Program Files/ODBC/lib" - "C:/ODBC/lib/debug" - "C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Lib" - PATH_SUFFIXES - odbc - ) - if (_lib_path) - list(APPEND _odbc_required_libs_paths ${_lib_path}) - endif() - unset(_lib_path CACHE) -endforeach() -unset(_odbc_lib_paths) -unset(_odbc_required_libs_names) - - -find_package_handle_standard_args(ODBC - FOUND_VAR ODBC_FOUND - REQUIRED_VARS - ODBC_LIBRARY - ${REQUIRED_INCLUDE_DIR} - VERSION_VAR ODBC_VERSION -) - -if(ODBC_FOUND) - set(ODBC_LIBRARIES ${ODBC_LIBRARY} ${_odbc_required_libs_paths} ${LTDL_LIBRARY}) - set(ODBC_INCLUDE_DIRS ${ODBC_INCLUDE_DIR}) - set(ODBC_DEFINITIONS ${PC_ODBC_CFLAGS_OTHER}) -endif() - -if(ODBC_FOUND AND NOT TARGET ODBC::ODBC) - add_library(ODBC::ODBC UNKNOWN IMPORTED) - set_target_properties(ODBC::ODBC PROPERTIES - IMPORTED_LOCATION "${ODBC_LIBRARY}" - INTERFACE_LINK_LIBRARIES "${_odbc_required_libs_paths}" - INTERFACE_COMPILE_OPTIONS "${PC_ODBC_CFLAGS_OTHER}" - INTERFACE_INCLUDE_DIRECTORIES "${ODBC_INCLUDE_DIR}" - ) -endif() - -mark_as_advanced(ODBC_LIBRARY ODBC_INCLUDE_DIR) diff --git a/cmake/Modules/FindPoco.cmake b/cmake/Modules/FindPoco.cmake deleted file mode 100644 index cad7e9afc8fc882853e32fd25cebc6030c2b0e91..0000000000000000000000000000000000000000 --- a/cmake/Modules/FindPoco.cmake +++ /dev/null @@ -1,247 +0,0 @@ -# https://github.com/astahl/poco-cmake/blob/master/cmake/FindPoco.cmake - -# - finds the Poco C++ libraries -# This module finds the Applied Informatics Poco libraries. -# It supports the following components: -# -# Util (loaded by default) -# Foundation (loaded by default) -# XML -# Zip -# Crypto -# Data -# Net -# NetSSL -# OSP -# -# Usage: -# set(ENV{Poco_DIR} path/to/poco/sdk) -# find_package(Poco REQUIRED OSP Data Crypto) -# -# On completion, the script defines the following variables: -# -# - Compound variables: -# Poco_FOUND -# - true if all requested components were found. -# Poco_LIBRARIES -# - contains release (and debug if available) libraries for all requested components. -# It has the form "optimized LIB1 debug LIBd1 optimized LIB2 ...", ready for use with the target_link_libraries command. -# Poco_INCLUDE_DIRS -# - Contains include directories for all requested components. -# -# - Component variables: -# Poco_Xxx_FOUND -# - Where Xxx is the properly cased component name (eg. 'Util', 'OSP'). -# True if a component's library or debug library was found successfully. -# Poco_Xxx_LIBRARY -# - Library for component Xxx. -# Poco_Xxx_LIBRARY_DEBUG -# - debug library for component Xxx -# Poco_Xxx_INCLUDE_DIR -# - include directory for component Xxx -# -# - OSP BundleCreator variables: (i.e. bundle.exe on windows, bundle on unix-likes) -# (is only discovered if OSP is a requested component) -# Poco_OSP_Bundle_EXECUTABLE_FOUND -# - true if the bundle-creator executable was found. -# Poco_OSP_Bundle_EXECUTABLE -# - the path to the bundle-creator executable. -# -# Author: Andreas Stahl andreas.stahl@tu-dresden.de - -set(Poco_HINTS - /usr/local - /usr/local/include/Poco - C:/AppliedInformatics - ${Poco_DIR} - $ENV{Poco_DIR} -) - -if(NOT Poco_ROOT_DIR) - # look for the root directory, first for the source-tree variant - find_path(Poco_ROOT_DIR - NAMES Foundation/include/Poco/Poco.h - HINTS ${Poco_HINTS} - ) - if(NOT Poco_ROOT_DIR) - # this means poco may have a different directory structure, maybe it was installed, let's check for that - message(STATUS "Looking for Poco install directory structure.") - find_path(Poco_ROOT_DIR - NAMES include/Poco/Poco.h - HINTS ${Poco_HINTS} - ) - if(NOT Poco_ROOT_DIR) - # poco was still not found -> Fail - if(Poco_FIND_REQUIRED) - message(FATAL_ERROR "Poco: Could not find Poco install directory") - endif() - if(NOT Poco_FIND_QUIETLY) - message(STATUS "Poco: Could not find Poco install directory") - endif() - return() - else() - # poco was found with the make install directory structure - message(STATUS "Assuming Poco install directory structure at ${Poco_ROOT_DIR}.") - set(Poco_INSTALLED true) - endif() - endif() -endif() - -# add dynamic library directory -if(WIN32) - find_path(Poco_RUNTIME_LIBRARY_DIRS - NAMES PocoFoundation.dll - HINTS ${Poco_ROOT_DIR} - PATH_SUFFIXES - bin - lib - ) -endif() - -# if installed directory structure, set full include dir -if(Poco_INSTALLED) - set(Poco_INCLUDE_DIRS ${Poco_ROOT_DIR}/include/ CACHE PATH "The global include path for Poco") -endif() - -# append the default minimum components to the list to find -list(APPEND components - ${Poco_FIND_COMPONENTS} - # default components: - "Util" - "Foundation" -) -list(REMOVE_DUPLICATES components) # remove duplicate defaults - -foreach( component ${components} ) - #if(NOT Poco_${component}_FOUND) - - # include directory for the component - if(NOT Poco_${component}_INCLUDE_DIR) - set (component_alt "${component}") - set (component_root "${component}") - if (${component} STREQUAL "DataODBC") - set (component_top "Data") - set (component_in "ODBC") - set (component_root "Data/ODBC") - endif () - if (${component} STREQUAL "SQLODBC") - set (component_top "SQL") - set (component_in "ODBC") - set (component_root "SQL/ODBC") - endif () - if (${component} STREQUAL "NetSSL") - set (component_alt "Net") - set (component_root "NetSSL_OpenSSL") - endif () - find_path(Poco_${component}_INCLUDE_DIR - NAMES - Poco/${component}.h # e.g. Foundation.h - Poco/${component}/${component}.h # e.g. OSP/OSP.h Util/Util.h - Poco/${component_alt}/${component}.h # e.g. Net/NetSSL.h - Poco/${component_top}/${component_in}/${component_in}.h # e.g. Data/ODBC/ODBC.h - HINTS - ${Poco_ROOT_DIR} - PATH_SUFFIXES - include - ${component_root}/include - ) - # message(STATUS "poco include debug: {component}: ${Poco_${component}_INCLUDE_DIR}") - endif() - if(NOT Poco_${component}_INCLUDE_DIR) - message(WARNING "Poco_${component}_INCLUDE_DIR NOT FOUND") - else() - list(APPEND Poco_INCLUDE_DIRS ${Poco_${component}_INCLUDE_DIR}) - endif() - - # release library - if(NOT Poco_${component}_LIBRARY) - find_library( - Poco_${component}_LIBRARY - NAMES Poco${component} - HINTS ${Poco_ROOT_DIR} - PATH_SUFFIXES - lib - bin - ) - if(Poco_${component}_LIBRARY) - message(STATUS "Found Poco ${component}: ${Poco_${component}_LIBRARY}") - endif() - endif() - if(Poco_${component}_LIBRARY) - list(APPEND Poco_LIBRARIES "optimized" ${Poco_${component}_LIBRARY} ) - mark_as_advanced(Poco_${component}_LIBRARY) - endif() - - # debug library - if(NOT Poco_${component}_LIBRARY_DEBUG) - find_library( - Poco_${component}_LIBRARY_DEBUG - Names Poco${component}d - HINTS ${Poco_ROOT_DIR} - PATH_SUFFIXES - lib - bin - ) - if(Poco_${component}_LIBRARY_DEBUG) - message(STATUS "Found Poco ${component} (debug): ${Poco_${component}_LIBRARY_DEBUG}") - endif() - endif(NOT Poco_${component}_LIBRARY_DEBUG) - if(Poco_${component}_LIBRARY_DEBUG) - list(APPEND Poco_LIBRARIES "debug" ${Poco_${component}_LIBRARY_DEBUG}) - mark_as_advanced(Poco_${component}_LIBRARY_DEBUG) - endif() - - # mark component as found or handle not finding it - if(Poco_${component}_LIBRARY_DEBUG OR Poco_${component}_LIBRARY) - set(Poco_${component}_FOUND TRUE) - elseif(NOT Poco_FIND_QUIETLY) - message(WARNING "Could not find Poco component ${component}!") - endif() - - # message(STATUS "Poco component ${component}: Poco_${component}_LIBRARY : Poco_${component}_INCLUDE_DIR") -endforeach() - -if(Poco_DataODBC_LIBRARY) - list(APPEND Poco_DataODBC_LIBRARY ${ODBC_LIBRARIES} ${LTDL_LIBRARY}) - list(APPEND Poco_INCLUDE_DIRS ${ODBC_INCLUDE_DIRS}) -endif() - -if(Poco_SQLODBC_LIBRARY) - list(APPEND Poco_SQLODBC_LIBRARY ${ODBC_LIBRARIES} ${LTDL_LIBRARY}) - list(APPEND Poco_INCLUDE_DIRS ${ODBC_INCLUDE_DIRS}) -endif() - -if(Poco_NetSSL_LIBRARY) - list(APPEND Poco_NetSSL_LIBRARY ${OPENSSL_LIBRARIES}) - list(APPEND Poco_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR}) -endif() - -if(DEFINED Poco_LIBRARIES) - set(Poco_FOUND true) -endif() - -if(${Poco_OSP_FOUND}) - # find the osp bundle program - find_program( - Poco_OSP_Bundle_EXECUTABLE - NAMES bundle - HINTS - ${Poco_RUNTIME_LIBRARY_DIRS} - ${Poco_ROOT_DIR} - PATH_SUFFIXES - bin - OSP/BundleCreator/bin/Darwin/x86_64 - OSP/BundleCreator/bin/Darwin/i386 - DOC "The executable that bundles OSP packages according to a .bndlspec specification." - ) - if(Poco_OSP_Bundle_EXECUTABLE) - set(Poco_OSP_Bundle_EXECUTABLE_FOUND true) - endif() - # include bundle script file - find_file(Poco_OSP_Bundles_file NAMES PocoBundles.cmake HINTS ${CMAKE_MODULE_PATH}) - if(${Poco_OSP_Bundles_file}) - include(${Poco_OSP_Bundles_file}) - endif() -endif() - -message(STATUS "Found Poco: ${Poco_LIBRARIES}") diff --git a/cmake/find/cpuid.cmake b/cmake/find/cpuid.cmake deleted file mode 100644 index 552cf3fb3d9a9e80509032f149ca8ded87c224a3..0000000000000000000000000000000000000000 --- a/cmake/find/cpuid.cmake +++ /dev/null @@ -1,32 +0,0 @@ -# ARM: Cannot cpuid_get_raw_data: CPUID instruction is not supported -if (NOT ARCH_ARM) - option (USE_INTERNAL_CPUID_LIBRARY "Set to FALSE to use system cpuid library instead of bundled" ${NOT_UNBUNDLED}) -endif () - -if (USE_INTERNAL_CPUID_LIBRARY AND NOT EXISTS "${ClickHouse_SOURCE_DIR}/contrib/libcpuid/CMakeLists.txt") - message (WARNING "submodule contrib/libcpuid is missing. to fix try run: \n git submodule update --init --recursive") - set (USE_INTERNAL_CPUID_LIBRARY 0) - set (MISSING_INTERNAL_CPUID_LIBRARY 1) -endif () - -if (NOT USE_INTERNAL_CPUID_LIBRARY) - find_library (CPUID_LIBRARY cpuid) - find_path (CPUID_INCLUDE_DIR NAMES libcpuid/libcpuid.h PATHS ${CPUID_INCLUDE_PATHS}) -endif () - -if (CPUID_LIBRARY AND CPUID_INCLUDE_DIR) - if (OS_FREEBSD) - # need in /usr/local/include/libcpuid/libcpuid_types.h - # Freebsd: /usr/local/include/libcpuid/libcpuid_types.h:61:29: error: conflicting declaration 'typedef long long int int64_t' - add_definitions(-DHAVE_STDINT_H) - # TODO: make virtual target cpuid:cpuid with COMPILE_DEFINITIONS property - endif () - set (USE_CPUID 1) -elseif (NOT ARCH_ARM AND NOT MISSING_INTERNAL_CPUID_LIBRARY) - set (CPUID_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/contrib/libcpuid/include) - set (USE_INTERNAL_CPUID_LIBRARY 1) - set (CPUID_LIBRARY cpuid) - set (USE_CPUID 1) -endif () - -message (STATUS "Using cpuid=${USE_CPUID}: ${CPUID_INCLUDE_DIR} : ${CPUID_LIBRARY}") diff --git a/cmake/find/cpuinfo.cmake b/cmake/find/cpuinfo.cmake deleted file mode 100644 index 9553372109bee3bc199c96e11cd5acafe2a8ca1b..0000000000000000000000000000000000000000 --- a/cmake/find/cpuinfo.cmake +++ /dev/null @@ -1,24 +0,0 @@ -option(USE_INTERNAL_CPUINFO_LIBRARY "Set to FALSE to use system cpuinfo library instead of bundled" ${NOT_UNBUNDLED}) - -# Now we have no contrib/libcpuinfo, use from system. -if (NOT EXISTS "${ClickHouse_SOURCE_DIR}/contrib/libcpuinfo/include") - #message (WARNING "submodule contrib/libcpuinfo is missing. to fix try run: \n git submodule update --init --recursive") - set (USE_INTERNAL_CPUINFO_LIBRARY 0) - set (MISSING_INTERNAL_CPUINFO_LIBRARY 1) -endif () - -if(NOT USE_INTERNAL_CPUINFO_LIBRARY) - find_library(CPUINFO_LIBRARY cpuinfo) - find_path(CPUINFO_INCLUDE_DIR NAMES cpuinfo.h PATHS ${CPUINFO_INCLUDE_PATHS}) -endif() - -if(CPUINFO_LIBRARY AND CPUINFO_INCLUDE_DIR) - set(USE_CPUINFO 1) -elseif(NOT MISSING_INTERNAL_CPUINFO_LIBRARY) - set(CPUINFO_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/contrib/libcpuinfo/include) - set(USE_INTERNAL_CPUINFO_LIBRARY 1) - set(CPUINFO_LIBRARY cpuinfo) - set(USE_CPUINFO 1) -endif() - -message(STATUS "Using cpuinfo=${USE_CPUINFO}: ${CPUINFO_INCLUDE_DIR} : ${CPUINFO_LIBRARY}") diff --git a/cmake/find/odbc.cmake b/cmake/find/odbc.cmake deleted file mode 100644 index 65e09d5c96ded1b1e6d62a9408d91d96c4023e1f..0000000000000000000000000000000000000000 --- a/cmake/find/odbc.cmake +++ /dev/null @@ -1,37 +0,0 @@ -# This file copied from contrib/poco/cmake/FindODBC.cmake to allow build without submodules - -if(OS_LINUX) - option (ENABLE_ODBC "Enable ODBC" ${ENABLE_LIBRARIES}) -endif() - -if(ENABLE_ODBC) - if (OS_LINUX) - option(USE_INTERNAL_ODBC_LIBRARY "Set to FALSE to use system odbc library instead of bundled" ${NOT_UNBUNDLED}) - else () - option(USE_INTERNAL_ODBC_LIBRARY "Set to FALSE to use system odbc library instead of bundled" OFF) - endif() - - if(USE_INTERNAL_ODBC_LIBRARY AND NOT EXISTS "${ClickHouse_SOURCE_DIR}/contrib/unixodbc/README") - message(WARNING "submodule contrib/unixodbc is missing. to fix try run: \n git submodule update --init --recursive") - set(USE_INTERNAL_ODBC_LIBRARY 0) - set(MISSING_INTERNAL_ODBC_LIBRARY 1) - endif() - - set(ODBC_INCLUDE_DIRS ) # Include directories will be either used automatically by target_include_directories or set later. - if(USE_INTERNAL_ODBC_LIBRARY AND NOT MISSING_INTERNAL_ODBC_LIBRARY) - set(ODBC_LIBRARY unixodbc) - set(ODBC_LIBRARIES ${ODBC_LIBRARY}) - set(ODBC_INCLUDE_DIRS "${ClickHouse_SOURCE_DIR}/contrib/unixodbc/include") - set(ODBC_FOUND 1) - else() - find_package(ODBC) - endif () - - if(ODBC_FOUND) - set(USE_ODBC 1) - set(ODBC_INCLUDE_DIRECTORIES ${ODBC_INCLUDE_DIRS}) # for old poco - set(ODBC_INCLUDE_DIR ${ODBC_INCLUDE_DIRS}) # for old poco - endif() - - message(STATUS "Using odbc=${USE_ODBC}: ${ODBC_INCLUDE_DIRS} : ${ODBC_LIBRARIES}") -endif() diff --git a/cmake/find/poco.cmake b/cmake/find/poco.cmake deleted file mode 100644 index 0c676d374f11dde741a435a9638ffed9ae176f0f..0000000000000000000000000000000000000000 --- a/cmake/find/poco.cmake +++ /dev/null @@ -1,178 +0,0 @@ -option (USE_INTERNAL_POCO_LIBRARY "Set to FALSE to use system poco library instead of bundled" ${NOT_UNBUNDLED}) - -if (NOT EXISTS "${ClickHouse_SOURCE_DIR}/contrib/poco/CMakeLists.txt") - if (USE_INTERNAL_POCO_LIBRARY) - message (WARNING "submodule contrib/poco is missing. to fix try run: \n git submodule update --init --recursive") - endif () - set (USE_INTERNAL_POCO_LIBRARY 0) - set (MISSING_INTERNAL_POCO_LIBRARY 1) -endif () - -if (NOT ENABLE_LIBRARIES) - set (ENABLE_POCO_NETSSL ${ENABLE_LIBRARIES} CACHE BOOL "") - set (ENABLE_POCO_MONGODB ${ENABLE_LIBRARIES} CACHE BOOL "") - set (ENABLE_POCO_REDIS ${ENABLE_LIBRARIES} CACHE BOOL "") - set (ENABLE_POCO_ODBC ${ENABLE_LIBRARIES} CACHE BOOL "") - set (ENABLE_POCO_SQL ${ENABLE_LIBRARIES} CACHE BOOL "") - set (ENABLE_POCO_JSON ${ENABLE_LIBRARIES} CACHE BOOL "") -endif () - -set (POCO_COMPONENTS Net XML SQL Data) -if (NOT DEFINED ENABLE_POCO_NETSSL OR ENABLE_POCO_NETSSL) - list (APPEND POCO_COMPONENTS Crypto NetSSL) -endif () -if (NOT DEFINED ENABLE_POCO_MONGODB OR ENABLE_POCO_MONGODB) - set(ENABLE_POCO_MONGODB 1 CACHE BOOL "") - list (APPEND POCO_COMPONENTS MongoDB) -else () - set(ENABLE_POCO_MONGODB 0 CACHE BOOL "") -endif () -if (NOT DEFINED ENABLE_POCO_REDIS OR ENABLE_POCO_REDIS) - list (APPEND POCO_COMPONENTS Redis) -endif () -# TODO: after new poco release with SQL library rename ENABLE_POCO_ODBC -> ENABLE_POCO_SQLODBC -if (NOT DEFINED ENABLE_POCO_ODBC OR ENABLE_POCO_ODBC) - list (APPEND POCO_COMPONENTS DataODBC) - list (APPEND POCO_COMPONENTS SQLODBC) -endif () -if (NOT DEFINED ENABLE_POCO_JSON OR ENABLE_POCO_JSON) - list (APPEND POCO_COMPONENTS JSON) -endif () - -if (NOT USE_INTERNAL_POCO_LIBRARY) - find_package (Poco COMPONENTS ${POCO_COMPONENTS}) -endif () - -if (Poco_INCLUDE_DIRS AND Poco_Foundation_LIBRARY) -elseif (NOT MISSING_INTERNAL_POCO_LIBRARY) - set (USE_INTERNAL_POCO_LIBRARY 1) - - set (ENABLE_ZIP 0 CACHE BOOL "") - set (ENABLE_PAGECOMPILER 0 CACHE BOOL "") - set (ENABLE_PAGECOMPILER_FILE2PAGE 0 CACHE BOOL "") - set (ENABLE_DATA_SQLITE 0 CACHE BOOL "") - set (ENABLE_DATA_MYSQL 0 CACHE BOOL "") - set (ENABLE_DATA_POSTGRESQL 0 CACHE BOOL "") - set (ENABLE_ENCODINGS 0 CACHE BOOL "") - set (ENABLE_MONGODB ${ENABLE_POCO_MONGODB} CACHE BOOL "" FORCE) - - # new after 2.0.0: - set (POCO_ENABLE_ZIP 0 CACHE BOOL "") - set (POCO_ENABLE_PAGECOMPILER 0 CACHE BOOL "") - set (POCO_ENABLE_PAGECOMPILER_FILE2PAGE 0 CACHE BOOL "") - set (POCO_ENABLE_SQL_SQLITE 0 CACHE BOOL "") - set (POCO_ENABLE_SQL_MYSQL 0 CACHE BOOL "") - set (POCO_ENABLE_SQL_POSTGRESQL 0 CACHE BOOL "") - - set (POCO_UNBUNDLED 1 CACHE BOOL "") - set (POCO_UNBUNDLED_PCRE 0 CACHE BOOL "") - set (POCO_UNBUNDLED_EXPAT 0 CACHE BOOL "") - set (POCO_STATIC ${MAKE_STATIC_LIBRARIES} CACHE BOOL "") - set (POCO_VERBOSE_MESSAGES 1 CACHE BOOL "") - - - # used in internal compiler - list (APPEND Poco_INCLUDE_DIRS - "${ClickHouse_SOURCE_DIR}/contrib/poco/Foundation/include/" - "${ClickHouse_SOURCE_DIR}/contrib/poco/Util/include/" - ) - - if (ENABLE_POCO_MONGODB) - set (Poco_MongoDB_LIBRARY PocoMongoDB) - set (Poco_MongoDB_INCLUDE_DIR "${ClickHouse_SOURCE_DIR}/contrib/poco/MongoDB/include/") - endif () - - if (NOT DEFINED ENABLE_POCO_REDIS OR ENABLE_POCO_REDIS) - set (Poco_Redis_LIBRARY PocoRedis) - set (Poco_Redis_INCLUDE_DIR "${ClickHouse_SOURCE_DIR}/contrib/poco/Redis/include/") - endif () - - if (EXISTS "${ClickHouse_SOURCE_DIR}/contrib/poco/SQL/ODBC/include/") - set (Poco_SQL_FOUND 1) - set (Poco_SQL_LIBRARY PocoSQL) - set (Poco_SQL_INCLUDE_DIR - "${ClickHouse_SOURCE_DIR}/contrib/poco/SQL/include" - "${ClickHouse_SOURCE_DIR}/contrib/poco/Data/include" - ) - if ((NOT DEFINED POCO_ENABLE_SQL_ODBC OR POCO_ENABLE_SQL_ODBC) AND ODBC_FOUND) - set (Poco_SQLODBC_INCLUDE_DIR - "${ClickHouse_SOURCE_DIR}/contrib/poco/SQL/ODBC/include/" - "${ClickHouse_SOURCE_DIR}/contrib/poco/Data/ODBC/include/" - ${ODBC_INCLUDE_DIRS} - ) - set (Poco_SQLODBC_LIBRARY PocoSQLODBC ${ODBC_LIBRARIES} ${LTDL_LIBRARY}) - endif () - else () - set (Poco_Data_FOUND 1) - set (Poco_Data_INCLUDE_DIR "${ClickHouse_SOURCE_DIR}/contrib/poco/Data/include") - set (Poco_Data_LIBRARY PocoData) - if ((NOT DEFINED ENABLE_DATA_ODBC OR ENABLE_DATA_ODBC) AND ODBC_FOUND) - set (USE_POCO_DATAODBC 1) - set (Poco_DataODBC_INCLUDE_DIR - "${ClickHouse_SOURCE_DIR}/contrib/poco/Data/ODBC/include/" - ${ODBC_INCLUDE_DIRS} - ) - set (Poco_DataODBC_LIBRARY PocoDataODBC ${ODBC_LIBRARIES} ${LTDL_LIBRARY}) - endif () - endif () - - if (NOT DEFINED ENABLE_POCO_JSON OR ENABLE_POCO_JSON) - set (Poco_JSON_LIBRARY PocoJSON) - set (Poco_JSON_INCLUDE_DIR "${ClickHouse_SOURCE_DIR}/contrib/poco/JSON/include/") - endif () - - if (OPENSSL_FOUND AND (NOT DEFINED ENABLE_POCO_NETSSL OR ENABLE_POCO_NETSSL)) - set (Poco_NetSSL_LIBRARY PocoNetSSL ${OPENSSL_LIBRARIES}) - set (Poco_Crypto_LIBRARY PocoCrypto ${OPENSSL_LIBRARIES}) - endif () - - if (USE_STATIC_LIBRARIES AND USE_INTERNAL_ZLIB_LIBRARY) - list (APPEND Poco_INCLUDE_DIRS - "${ClickHouse_SOURCE_DIR}/contrib/${INTERNAL_ZLIB_NAME}/" - "${ClickHouse_BINARY_DIR}/contrib/${INTERNAL_ZLIB_NAME}/" - ) - endif () - - set (Poco_Foundation_LIBRARY PocoFoundation) - set (Poco_Util_LIBRARY PocoUtil) - set (Poco_Net_LIBRARY PocoNet) - set (Poco_XML_LIBRARY PocoXML) -endif () - -if (Poco_NetSSL_LIBRARY AND Poco_Crypto_LIBRARY) - set (USE_POCO_NETSSL 1) -endif () -if (Poco_MongoDB_LIBRARY) - set (USE_POCO_MONGODB 1) -endif () -if (Poco_Redis_LIBRARY) - set (USE_POCO_REDIS 1) -endif () -if (Poco_DataODBC_LIBRARY AND ODBC_FOUND) - set (USE_POCO_DATAODBC 1) -endif () -if (Poco_SQLODBC_LIBRARY AND ODBC_FOUND) - set (USE_POCO_SQLODBC 1) -endif () -if (Poco_JSON_LIBRARY) - set (USE_POCO_JSON 1) -endif () - -message(STATUS "Using Poco: ${Poco_INCLUDE_DIRS} : ${Poco_Foundation_LIBRARY},${Poco_Util_LIBRARY},${Poco_Net_LIBRARY},${Poco_NetSSL_LIBRARY},${Poco_Crypto_LIBRARY},${Poco_XML_LIBRARY},${Poco_Data_LIBRARY},${Poco_DataODBC_LIBRARY},${Poco_SQL_LIBRARY},${Poco_SQLODBC_LIBRARY},${Poco_MongoDB_LIBRARY},${Poco_Redis_LIBRARY},${Poco_JSON_LIBRARY}; MongoDB=${USE_POCO_MONGODB}, Redis=${USE_POCO_REDIS}, DataODBC=${USE_POCO_DATAODBC}, NetSSL=${USE_POCO_NETSSL}, JSON=${USE_POCO_JSON}") - -# How to make sutable poco: -# use branch: -# develop OR poco-1.7.9-release + 6a49c94d18c654d7a20b8c8ea47071b1fdd4813b -# and merge: -# ClickHouse-Extras/clickhouse_unbundled -# ClickHouse-Extras/clickhouse_unbundled_zlib -# ClickHouse-Extras/clickhouse_task -# ClickHouse-Extras/clickhouse_misc -# ClickHouse-Extras/clickhouse_anl -# ClickHouse-Extras/clickhouse_http_header https://github.com/pocoproject/poco/pull/1574 -# ClickHouse-Extras/clickhouse_socket -# ClickHouse-Extras/clickhouse_warning -# ClickHouse-Extras/clickhouse-purge-logs-on-no-space -# ClickHouse-Extras/clickhouse_freebsd -# ClickHouse-Extras/clikhouse_no_zlib -# ClickHouse-Extras/clickhouse-fix-atomic diff --git a/cmake/print_include_directories.cmake b/cmake/print_include_directories.cmake index fe5e9e8e6e9a1c19e706d39e0c46e44f1631a3fe..62ebd4343205ac07f466110559d669d79a288e4d 100644 --- a/cmake/print_include_directories.cmake +++ b/cmake/print_include_directories.cmake @@ -26,10 +26,6 @@ if (TARGET ${Boost_PROGRAM_OPTIONS_LIBRARY}) list(APPEND dirs ${dirs1}) endif () -if (USE_INTERNAL_POCO_LIBRARY) - list(APPEND dirs "./contrib/poco/Foundation/include") -endif () - list(REMOVE_DUPLICATES dirs) file (WRITE ${CMAKE_CURRENT_BINARY_DIR}/include_directories.txt "") foreach (dir ${dirs}) diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt index 01e9f14d241533dc149e71a3d9883350bfee2d7d..d98a854ace10a526e093bf8ce91415717518d734 100644 --- a/contrib/CMakeLists.txt +++ b/contrib/CMakeLists.txt @@ -16,6 +16,24 @@ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w") set_property(DIRECTORY PROPERTY EXCLUDE_FROM_ALL 1) +add_subdirectory (cctz-cmake) +add_subdirectory (consistent-hashing-sumbur) +add_subdirectory (consistent-hashing) +add_subdirectory (croaring) +add_subdirectory (FastMemcpy) +add_subdirectory (grpc-cmake) +add_subdirectory (jemalloc-cmake) +add_subdirectory (libcpuid-cmake) +add_subdirectory (murmurhash) +add_subdirectory (replxx-cmake) +add_subdirectory (ryu-cmake) +add_subdirectory (unixodbc-cmake) + +add_subdirectory (poco-cmake) + + +# TODO: refactor the contrib libraries below this comment. + if (USE_INTERNAL_BOOST_LIBRARY) add_subdirectory (boost-cmake) endif () @@ -38,8 +56,6 @@ if (USE_INTERNAL_DOUBLE_CONVERSION_LIBRARY) add_subdirectory (double-conversion-cmake) endif () -add_subdirectory (ryu-cmake) - if (USE_INTERNAL_CITYHASH_LIBRARY) add_subdirectory (cityhash102) endif () @@ -52,9 +68,6 @@ if (USE_INTERNAL_METROHASH_LIBRARY) add_subdirectory (libmetrohash) endif () -add_subdirectory (murmurhash) -add_subdirectory (croaring) - if (USE_INTERNAL_BTRIE_LIBRARY) add_subdirectory (libbtrie) endif () @@ -86,14 +99,6 @@ if (USE_INTERNAL_ZLIB_LIBRARY) endif () endif () -add_subdirectory (cctz-cmake) - -add_subdirectory (jemalloc-cmake) - -if (USE_INTERNAL_CPUID_LIBRARY) - add_subdirectory (libcpuid) -endif () - if (USE_INTERNAL_H3_LIBRARY) add_subdirectory(h3-cmake) endif () @@ -101,8 +106,6 @@ endif () if (USE_INTERNAL_SSL_LIBRARY) add_subdirectory (openssl-cmake) - # This is for Poco library - set (POCO_SKIP_OPENSSL_FIND 1) add_library(OpenSSL::Crypto ALIAS ${OPENSSL_CRYPTO_LIBRARY}) add_library(OpenSSL::SSL ALIAS ${OPENSSL_SSL_LIBRARY}) endif () @@ -142,11 +145,6 @@ if (USE_RDKAFKA) add_subdirectory (cppkafka-cmake) endif() -if (ENABLE_ODBC AND USE_INTERNAL_ODBC_LIBRARY) - add_subdirectory (unixodbc-cmake) - add_library(ODBC::ODBC ALIAS ${ODBC_LIBRARIES}) -endif () - if (ENABLE_ICU AND USE_INTERNAL_ICU_LIBRARY) add_subdirectory (icu-cmake) endif () @@ -221,29 +219,6 @@ if (USE_INTERNAL_AVRO_LIBRARY) add_subdirectory(avro-cmake) endif() -if (USE_INTERNAL_POCO_LIBRARY) - set (POCO_VERBOSE_MESSAGES 0 CACHE INTERNAL "") - set (save_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) - set (save_CMAKE_C_FLAGS ${CMAKE_C_FLAGS}) - set (_save ${ENABLE_TESTS}) - set (ENABLE_TESTS 0) - set (POCO_ENABLE_TESTS 0) - set (CMAKE_DISABLE_FIND_PACKAGE_ZLIB 1) - if (MSVC OR NOT USE_POCO_DATAODBC) - set (ENABLE_DATA_ODBC 0 CACHE INTERNAL "") # TODO (build fail) - endif () - add_subdirectory (poco) - unset (CMAKE_DISABLE_FIND_PACKAGE_ZLIB) - set (ENABLE_TESTS ${_save}) - set (CMAKE_CXX_FLAGS ${save_CMAKE_CXX_FLAGS}) - set (CMAKE_C_FLAGS ${save_CMAKE_C_FLAGS}) - - if (OPENSSL_FOUND AND TARGET Crypto AND (NOT DEFINED ENABLE_POCO_NETSSL OR ENABLE_POCO_NETSSL)) - # Bug in poco https://github.com/pocoproject/poco/pull/2100 found on macos - target_include_directories(Crypto SYSTEM PUBLIC ${OPENSSL_INCLUDE_DIR}) - endif () -endif () - if(USE_INTERNAL_GTEST_LIBRARY) # Google Test from sources add_subdirectory(${ClickHouse_SOURCE_DIR}/contrib/googletest/googletest ${CMAKE_CURRENT_BINARY_DIR}/googletest) @@ -338,10 +313,3 @@ endif() if (USE_FASTOPS) add_subdirectory (fastops-cmake) endif() - -add_subdirectory(grpc-cmake) - -add_subdirectory(replxx-cmake) -add_subdirectory(FastMemcpy) -add_subdirectory(consistent-hashing) -add_subdirectory(consistent-hashing-sumbur) diff --git a/contrib/libcpuid b/contrib/libcpuid new file mode 160000 index 0000000000000000000000000000000000000000..a6123e8139ce73e26b5711c3e119b5b2bc9c9378 --- /dev/null +++ b/contrib/libcpuid @@ -0,0 +1 @@ +Subproject commit a6123e8139ce73e26b5711c3e119b5b2bc9c9378 diff --git a/contrib/libcpuid-cmake/CMakeLists.txt b/contrib/libcpuid-cmake/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..420f0334ce6bfda1cb0c316066849b44c1a58019 --- /dev/null +++ b/contrib/libcpuid-cmake/CMakeLists.txt @@ -0,0 +1,35 @@ +option (ENABLE_CPUID "Enable libcpuid library (only internal)" ${ENABLE_LIBRARIES}) + +if (ARCH_ARM) + set (ENABLE_CPUID 0) +endif () + +if (ENABLE_CPUID) + set (LIBRARY_DIR ${ClickHouse_SOURCE_DIR}/contrib/libcpuid) + + set (SRCS + ${LIBRARY_DIR}/libcpuid/asm-bits.c + ${LIBRARY_DIR}/libcpuid/cpuid_main.c + ${LIBRARY_DIR}/libcpuid/libcpuid_util.c + ${LIBRARY_DIR}/libcpuid/msrdriver.c + ${LIBRARY_DIR}/libcpuid/rdmsr.c + ${LIBRARY_DIR}/libcpuid/rdtsc.c + ${LIBRARY_DIR}/libcpuid/recog_amd.c + ${LIBRARY_DIR}/libcpuid/recog_intel.c + ) + + add_library (cpuid ${SRCS}) + + target_include_directories (cpuid PUBLIC ${LIBRARY_DIR}) + target_compile_definitions (cpuid PUBLIC USE_CPUID=1) + target_compile_definitions (cpuid PRIVATE VERSION="v0.4.1") + if (COMPILER_CLANG) + target_compile_options (cpuid PUBLIC -Wno-reserved-id-macro) + endif () + + message (STATUS "Using cpuid") +else () + add_library (cpuid INTERFACE) + + target_compile_definitions (cpuid INTERFACE USE_CPUID=0) +endif () diff --git a/contrib/libcpuid/CMakeLists.txt b/contrib/libcpuid/CMakeLists.txt deleted file mode 100644 index cd3e7fa06fed04a6b77d8317aabe2acce24f2c95..0000000000000000000000000000000000000000 --- a/contrib/libcpuid/CMakeLists.txt +++ /dev/null @@ -1,20 +0,0 @@ -add_library(cpuid -include/libcpuid/asm-bits.c -include/libcpuid/cpuid_main.c -include/libcpuid/libcpuid_util.c -include/libcpuid/rdtsc.c -include/libcpuid/recog_amd.c -include/libcpuid/recog_intel.c - -include/libcpuid/asm-bits.h -include/libcpuid/config.h -include/libcpuid/libcpuid_constants.h -include/libcpuid/libcpuid.h -include/libcpuid/libcpuid_types.h -include/libcpuid/libcpuid_util.h -include/libcpuid/rdtsc.h -include/libcpuid/recog_amd.h -include/libcpuid/recog_intel.h -) - -target_include_directories (cpuid SYSTEM PUBLIC include) diff --git a/contrib/libcpuid/COPYING b/contrib/libcpuid/COPYING deleted file mode 100644 index bf4755c203f5acf2e862e862eefcc7b41e9bb414..0000000000000000000000000000000000000000 --- a/contrib/libcpuid/COPYING +++ /dev/null @@ -1,23 +0,0 @@ -Copyright 2008 Veselin Georgiev, -anrieffNOSPAM @ mgail_DOT.com (convert to gmail) - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/contrib/libcpuid/README.txt b/contrib/libcpuid/README.txt deleted file mode 100644 index a6817683f8baa3645d96b8eca7135e05daaa66bd..0000000000000000000000000000000000000000 --- a/contrib/libcpuid/README.txt +++ /dev/null @@ -1 +0,0 @@ -https://github.com/anrieff/libcpuid.git diff --git a/contrib/libcpuid/include/libcpuid/amd_code_t.h b/contrib/libcpuid/include/libcpuid/amd_code_t.h deleted file mode 100644 index 2472a3d61d5d0447cc981a8d8089bb497c400321..0000000000000000000000000000000000000000 --- a/contrib/libcpuid/include/libcpuid/amd_code_t.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2016 Veselin Georgiev, - * anrieffNOSPAM @ mgail_DOT.com (convert to gmail) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/* - * This file contains a list of internal codes we use in detection. It is - * of no external use and isn't a complete list of AMD products. - */ - CODE2(OPTERON_GENERIC, 1000), - CODE(OPTERON_800), - CODE(ATHLON_XP), - CODE(ATHLON_XP_M), - CODE(ATHLON_XP_M_LV), - CODE(ATHLON), - CODE(ATHLON_MP), - CODE(MOBILE_ATHLON64), - CODE(ATHLON_FX), - CODE(DURON), - CODE(DURON_MP), - CODE(MOBILE_DURON), - CODE(MOBILE_SEMPRON), - CODE(OPTERON_SINGLE), - CODE(OPTERON_DUALCORE), - CODE(OPTERON_800_DUALCORE), - CODE(MOBILE_TURION), - CODE(ATHLON_64), - CODE(ATHLON_64_FX), - CODE(TURION_64), - CODE(TURION_X2), - CODE(SEMPRON), - CODE(M_SEMPRON), - CODE(SEMPRON_DUALCORE), - CODE(PHENOM), - CODE(PHENOM2), - CODE(ATHLON_64_X2), - CODE(ATHLON_64_X3), - CODE(ATHLON_64_X4), - CODE(FUSION_C), - CODE(FUSION_E), - CODE(FUSION_EA), - CODE(FUSION_Z), - CODE(FUSION_A), - diff --git a/contrib/libcpuid/include/libcpuid/asm-bits.c b/contrib/libcpuid/include/libcpuid/asm-bits.c deleted file mode 100644 index b8e32284f57281f9d2db16e1e93429f1dd88823a..0000000000000000000000000000000000000000 --- a/contrib/libcpuid/include/libcpuid/asm-bits.c +++ /dev/null @@ -1,825 +0,0 @@ -/* - * Copyright 2008 Veselin Georgiev, - * anrieffNOSPAM @ mgail_DOT.com (convert to gmail) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "libcpuid.h" -#include "asm-bits.h" - -int cpuid_exists_by_eflags(void) -{ -#if defined(PLATFORM_X64) - return 1; /* CPUID is always present on the x86_64 */ -#elif defined(PLATFORM_X86) -# if defined(COMPILER_GCC) - int result; - __asm __volatile( - " pushfl\n" - " pop %%eax\n" - " mov %%eax, %%ecx\n" - " xor $0x200000, %%eax\n" - " push %%eax\n" - " popfl\n" - " pushfl\n" - " pop %%eax\n" - " xor %%ecx, %%eax\n" - " mov %%eax, %0\n" - " push %%ecx\n" - " popfl\n" - : "=m"(result) - : :"eax", "ecx", "memory"); - return (result != 0); -# elif defined(COMPILER_MICROSOFT) - int result; - __asm { - pushfd - pop eax - mov ecx, eax - xor eax, 0x200000 - push eax - popfd - pushfd - pop eax - xor eax, ecx - mov result, eax - push ecx - popfd - }; - return (result != 0); -# else - return 0; -# endif /* COMPILER_MICROSOFT */ -#else - return 0; -#endif /* PLATFORM_X86 */ -} - -#ifdef INLINE_ASM_SUPPORTED -/* - * with MSVC/AMD64, the exec_cpuid() and cpu_rdtsc() functions - * are implemented in separate .asm files. Otherwise, use inline assembly - */ -void exec_cpuid(uint32_t *regs) -{ -#ifdef COMPILER_GCC -# ifdef PLATFORM_X64 - __asm __volatile( - " mov %0, %%rdi\n" - - " push %%rbx\n" - " push %%rcx\n" - " push %%rdx\n" - - " mov (%%rdi), %%eax\n" - " mov 4(%%rdi), %%ebx\n" - " mov 8(%%rdi), %%ecx\n" - " mov 12(%%rdi), %%edx\n" - - " cpuid\n" - - " movl %%eax, (%%rdi)\n" - " movl %%ebx, 4(%%rdi)\n" - " movl %%ecx, 8(%%rdi)\n" - " movl %%edx, 12(%%rdi)\n" - " pop %%rdx\n" - " pop %%rcx\n" - " pop %%rbx\n" - : - :"m"(regs) - :"memory", "eax", "rdi" - ); -# else - __asm __volatile( - " mov %0, %%edi\n" - - " push %%ebx\n" - " push %%ecx\n" - " push %%edx\n" - - " mov (%%edi), %%eax\n" - " mov 4(%%edi), %%ebx\n" - " mov 8(%%edi), %%ecx\n" - " mov 12(%%edi), %%edx\n" - - " cpuid\n" - - " mov %%eax, (%%edi)\n" - " mov %%ebx, 4(%%edi)\n" - " mov %%ecx, 8(%%edi)\n" - " mov %%edx, 12(%%edi)\n" - " pop %%edx\n" - " pop %%ecx\n" - " pop %%ebx\n" - : - :"m"(regs) - :"memory", "eax", "edi" - ); -# endif /* COMPILER_GCC */ -#else -# ifdef COMPILER_MICROSOFT - __asm { - push ebx - push ecx - push edx - push edi - mov edi, regs - - mov eax, [edi] - mov ebx, [edi+4] - mov ecx, [edi+8] - mov edx, [edi+12] - - cpuid - - mov [edi], eax - mov [edi+4], ebx - mov [edi+8], ecx - mov [edi+12], edx - - pop edi - pop edx - pop ecx - pop ebx - } -# else -# error "Unsupported compiler" -# endif /* COMPILER_MICROSOFT */ -#endif -} -#endif /* INLINE_ASSEMBLY_SUPPORTED */ - -#ifdef INLINE_ASM_SUPPORTED -void cpu_rdtsc(uint64_t* result) -{ - uint32_t low_part, hi_part; -#ifdef COMPILER_GCC - __asm __volatile ( - " rdtsc\n" - " mov %%eax, %0\n" - " mov %%edx, %1\n" - :"=m"(low_part), "=m"(hi_part)::"memory", "eax", "edx" - ); -#else -# ifdef COMPILER_MICROSOFT - __asm { - rdtsc - mov low_part, eax - mov hi_part, edx - }; -# else -# error "Unsupported compiler" -# endif /* COMPILER_MICROSOFT */ -#endif /* COMPILER_GCC */ - *result = (uint64_t)low_part + (((uint64_t) hi_part) << 32); -} -#endif /* INLINE_ASM_SUPPORTED */ - -#ifdef INLINE_ASM_SUPPORTED -void busy_sse_loop(int cycles) -{ -#ifdef COMPILER_GCC -#ifndef __APPLE__ -# define XALIGN ".balign 16\n" -#else -# define XALIGN ".align 4\n" -#endif - __asm __volatile ( - " xorps %%xmm0, %%xmm0\n" - " xorps %%xmm1, %%xmm1\n" - " xorps %%xmm2, %%xmm2\n" - " xorps %%xmm3, %%xmm3\n" - " xorps %%xmm4, %%xmm4\n" - " xorps %%xmm5, %%xmm5\n" - " xorps %%xmm6, %%xmm6\n" - " xorps %%xmm7, %%xmm7\n" - XALIGN - /* ".bsLoop:\n" */ - "1:\n" - // 0: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - // 1: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - // 2: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - // 3: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - // 4: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - // 5: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - // 6: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - // 7: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - // 8: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - // 9: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - //10: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - //11: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - //12: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - //13: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - //14: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - //15: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - //16: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - //17: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - //18: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - //19: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - //20: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - //21: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - //22: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - //23: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - //24: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - //25: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - //26: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - //27: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - //28: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - //29: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - //30: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - //31: - " addps %%xmm1, %%xmm0\n" - " addps %%xmm2, %%xmm1\n" - " addps %%xmm3, %%xmm2\n" - " addps %%xmm4, %%xmm3\n" - " addps %%xmm5, %%xmm4\n" - " addps %%xmm6, %%xmm5\n" - " addps %%xmm7, %%xmm6\n" - " addps %%xmm0, %%xmm7\n" - - " dec %%eax\n" - /* "jnz .bsLoop\n" */ - " jnz 1b\n" - ::"a"(cycles) - ); -#else -# ifdef COMPILER_MICROSOFT - __asm { - mov eax, cycles - xorps xmm0, xmm0 - xorps xmm1, xmm1 - xorps xmm2, xmm2 - xorps xmm3, xmm3 - xorps xmm4, xmm4 - xorps xmm5, xmm5 - xorps xmm6, xmm6 - xorps xmm7, xmm7 - //-- - align 16 -bsLoop: - // 0: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 1: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 2: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 3: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 4: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 5: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 6: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 7: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 8: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 9: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 10: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 11: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 12: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 13: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 14: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 15: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 16: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 17: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 18: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 19: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 20: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 21: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 22: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 23: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 24: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 25: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 26: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 27: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 28: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 29: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 30: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - // 31: - addps xmm0, xmm1 - addps xmm1, xmm2 - addps xmm2, xmm3 - addps xmm3, xmm4 - addps xmm4, xmm5 - addps xmm5, xmm6 - addps xmm6, xmm7 - addps xmm7, xmm0 - //---------------------- - dec eax - jnz bsLoop - } -# else -# error "Unsupported compiler" -# endif /* COMPILER_MICROSOFT */ -#endif /* COMPILER_GCC */ -} -#endif /* INLINE_ASSEMBLY_SUPPORTED */ diff --git a/contrib/libcpuid/include/libcpuid/asm-bits.h b/contrib/libcpuid/include/libcpuid/asm-bits.h deleted file mode 100644 index 3a03e11ce8c8ee8ce236833492c3d8a548a89157..0000000000000000000000000000000000000000 --- a/contrib/libcpuid/include/libcpuid/asm-bits.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2008 Veselin Georgiev, - * anrieffNOSPAM @ mgail_DOT.com (convert to gmail) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __ASM_BITS_H__ -#define __ASM_BITS_H__ -#include "libcpuid.h" - -/* Determine Compiler: */ -#if defined(_MSC_VER) -# define COMPILER_MICROSOFT -#elif defined(__GNUC__) -# define COMPILER_GCC -#endif - -/* Determine Platform */ -#if defined(__x86_64__) || defined(_M_AMD64) -# define PLATFORM_X64 -#elif defined(__i386__) || defined(_M_IX86) -# define PLATFORM_X86 -#endif - -/* Under Windows/AMD64 with MSVC, inline assembly isn't supported */ -#if (defined(COMPILER_GCC) && defined(PLATFORM_X64)) || defined(PLATFORM_X86) -# define INLINE_ASM_SUPPORTED -#endif - -int cpuid_exists_by_eflags(void); -void exec_cpuid(uint32_t *regs); -void busy_sse_loop(int cycles); - -#endif /* __ASM_BITS_H__ */ diff --git a/contrib/libcpuid/include/libcpuid/config.h b/contrib/libcpuid/include/libcpuid/config.h deleted file mode 100644 index 2326cfeede545215e130d92a3455312bb4299dfb..0000000000000000000000000000000000000000 --- a/contrib/libcpuid/include/libcpuid/config.h +++ /dev/null @@ -1,2 +0,0 @@ -/* Version number of package */ -#define VERSION "0.4.0" diff --git a/contrib/libcpuid/include/libcpuid/cpuid_main.c b/contrib/libcpuid/include/libcpuid/cpuid_main.c deleted file mode 100644 index 34457e297caf2028d9d75ac20b49d2d084840f0d..0000000000000000000000000000000000000000 --- a/contrib/libcpuid/include/libcpuid/cpuid_main.c +++ /dev/null @@ -1,771 +0,0 @@ -/* - * Copyright 2008 Veselin Georgiev, - * anrieffNOSPAM @ mgail_DOT.com (convert to gmail) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "libcpuid.h" -#include "libcpuid_internal.h" -#include "recog_intel.h" -#include "recog_amd.h" -#include "asm-bits.h" -#include "libcpuid_util.h" -//#ifdef HAVE_CONFIG_H // CLICKHOUSE PATCH -#include "config.h" -//#endif // CLICKHOUSE PATCH -#include -#include -#include - -/* Implementation: */ - -_Thread_local int _libcpiud_errno = ERR_OK; - -int set_error(cpu_error_t err) -{ - _libcpiud_errno = (int) err; - return (int) err; -} - -static void raw_data_t_constructor(struct cpu_raw_data_t* raw) -{ - memset(raw, 0, sizeof(struct cpu_raw_data_t)); -} - -static void cpu_id_t_constructor(struct cpu_id_t* id) -{ - memset(id, 0, sizeof(struct cpu_id_t)); - id->l1_data_cache = id->l1_instruction_cache = id->l2_cache = id->l3_cache = id->l4_cache = -1; - id->l1_assoc = id->l2_assoc = id->l3_assoc = id->l4_assoc = -1; - id->l1_cacheline = id->l2_cacheline = id->l3_cacheline = id->l4_cacheline = -1; - id->sse_size = -1; -} - -static int parse_token(const char* expected_token, const char *token, - const char *value, uint32_t array[][4], int limit, int *recognized) -{ - char format[32]; - int veax, vebx, vecx, vedx; - int index; - - if (*recognized) return 1; /* already recognized */ - if (strncmp(token, expected_token, strlen(expected_token))) return 1; /* not what we search for */ - sprintf(format, "%s[%%d]", expected_token); - *recognized = 1; - if (1 == sscanf(token, format, &index) && index >=0 && index < limit) { - if (4 == sscanf(value, "%x%x%x%x", &veax, &vebx, &vecx, &vedx)) { - array[index][0] = veax; - array[index][1] = vebx; - array[index][2] = vecx; - array[index][3] = vedx; - return 1; - } - } - return 0; -} - -/* get_total_cpus() system specific code: uses OS routines to determine total number of CPUs */ -#ifdef __APPLE__ -#include -#include -#include -#include -static int get_total_cpus(void) -{ - kern_return_t kr; - host_basic_info_data_t basic_info; - host_info_t info = (host_info_t)&basic_info; - host_flavor_t flavor = HOST_BASIC_INFO; - mach_msg_type_number_t count = HOST_BASIC_INFO_COUNT; - kr = host_info(mach_host_self(), flavor, info, &count); - if (kr != KERN_SUCCESS) return 1; - return basic_info.avail_cpus; -} -#define GET_TOTAL_CPUS_DEFINED -#endif - -#ifdef _WIN32 -#include -static int get_total_cpus(void) -{ - SYSTEM_INFO system_info; - GetSystemInfo(&system_info); - return system_info.dwNumberOfProcessors; -} -#define GET_TOTAL_CPUS_DEFINED -#endif - -#if defined linux || defined __linux__ || defined __sun -#include -#include - -static int get_total_cpus(void) -{ - return sysconf(_SC_NPROCESSORS_ONLN); -} -#define GET_TOTAL_CPUS_DEFINED -#endif - -#if defined __FreeBSD__ || defined __OpenBSD__ || defined __NetBSD__ || defined __bsdi__ || defined __QNX__ -#include -#include - -static int get_total_cpus(void) -{ - int mib[2] = { CTL_HW, HW_NCPU }; - int ncpus; - size_t len = sizeof(ncpus); - if (sysctl(mib, 2, &ncpus, &len, (void *) 0, 0) != 0) return 1; - return ncpus; -} -#define GET_TOTAL_CPUS_DEFINED -#endif - -#ifndef GET_TOTAL_CPUS_DEFINED -static int get_total_cpus(void) -{ - static int warning_printed = 0; - if (!warning_printed) { - warning_printed = 1; - warnf("Your system is not supported by libcpuid -- don't know how to detect the\n"); - warnf("total number of CPUs on your system. It will be reported as 1.\n"); - printf("Please use cpu_id_t.logical_cpus field instead.\n"); - } - return 1; -} -#endif /* GET_TOTAL_CPUS_DEFINED */ - - -static void load_features_common(struct cpu_raw_data_t* raw, struct cpu_id_t* data) -{ - const struct feature_map_t matchtable_edx1[] = { - { 0, CPU_FEATURE_FPU }, - { 1, CPU_FEATURE_VME }, - { 2, CPU_FEATURE_DE }, - { 3, CPU_FEATURE_PSE }, - { 4, CPU_FEATURE_TSC }, - { 5, CPU_FEATURE_MSR }, - { 6, CPU_FEATURE_PAE }, - { 7, CPU_FEATURE_MCE }, - { 8, CPU_FEATURE_CX8 }, - { 9, CPU_FEATURE_APIC }, - { 11, CPU_FEATURE_SEP }, - { 12, CPU_FEATURE_MTRR }, - { 13, CPU_FEATURE_PGE }, - { 14, CPU_FEATURE_MCA }, - { 15, CPU_FEATURE_CMOV }, - { 16, CPU_FEATURE_PAT }, - { 17, CPU_FEATURE_PSE36 }, - { 19, CPU_FEATURE_CLFLUSH }, - { 23, CPU_FEATURE_MMX }, - { 24, CPU_FEATURE_FXSR }, - { 25, CPU_FEATURE_SSE }, - { 26, CPU_FEATURE_SSE2 }, - { 28, CPU_FEATURE_HT }, - }; - const struct feature_map_t matchtable_ecx1[] = { - { 0, CPU_FEATURE_PNI }, - { 1, CPU_FEATURE_PCLMUL }, - { 3, CPU_FEATURE_MONITOR }, - { 9, CPU_FEATURE_SSSE3 }, - { 12, CPU_FEATURE_FMA3 }, - { 13, CPU_FEATURE_CX16 }, - { 19, CPU_FEATURE_SSE4_1 }, - { 20, CPU_FEATURE_SSE4_2 }, - { 22, CPU_FEATURE_MOVBE }, - { 23, CPU_FEATURE_POPCNT }, - { 25, CPU_FEATURE_AES }, - { 26, CPU_FEATURE_XSAVE }, - { 27, CPU_FEATURE_OSXSAVE }, - { 28, CPU_FEATURE_AVX }, - { 29, CPU_FEATURE_F16C }, - { 30, CPU_FEATURE_RDRAND }, - }; - const struct feature_map_t matchtable_ebx7[] = { - { 3, CPU_FEATURE_BMI1 }, - { 5, CPU_FEATURE_AVX2 }, - { 8, CPU_FEATURE_BMI2 }, - }; - const struct feature_map_t matchtable_edx81[] = { - { 11, CPU_FEATURE_SYSCALL }, - { 27, CPU_FEATURE_RDTSCP }, - { 29, CPU_FEATURE_LM }, - }; - const struct feature_map_t matchtable_ecx81[] = { - { 0, CPU_FEATURE_LAHF_LM }, - }; - const struct feature_map_t matchtable_edx87[] = { - { 8, CPU_FEATURE_CONSTANT_TSC }, - }; - if (raw->basic_cpuid[0][0] >= 1) { - match_features(matchtable_edx1, COUNT_OF(matchtable_edx1), raw->basic_cpuid[1][3], data); - match_features(matchtable_ecx1, COUNT_OF(matchtable_ecx1), raw->basic_cpuid[1][2], data); - } - if (raw->basic_cpuid[0][0] >= 7) { - match_features(matchtable_ebx7, COUNT_OF(matchtable_ebx7), raw->basic_cpuid[7][1], data); - } - if (raw->ext_cpuid[0][0] >= 0x80000001) { - match_features(matchtable_edx81, COUNT_OF(matchtable_edx81), raw->ext_cpuid[1][3], data); - match_features(matchtable_ecx81, COUNT_OF(matchtable_ecx81), raw->ext_cpuid[1][2], data); - } - if (raw->ext_cpuid[0][0] >= 0x80000007) { - match_features(matchtable_edx87, COUNT_OF(matchtable_edx87), raw->ext_cpuid[7][3], data); - } - if (data->flags[CPU_FEATURE_SSE]) { - /* apply guesswork to check if the SSE unit width is 128 bit */ - switch (data->vendor) { - case VENDOR_AMD: - data->sse_size = (data->ext_family >= 16 && data->ext_family != 17) ? 128 : 64; - break; - case VENDOR_INTEL: - data->sse_size = (data->family == 6 && data->ext_model >= 15) ? 128 : 64; - break; - default: - break; - } - /* leave the CPU_FEATURE_128BIT_SSE_AUTH 0; the advanced per-vendor detection routines - * will set it accordingly if they detect the needed bit */ - } -} - -static cpu_vendor_t cpuid_vendor_identify(const uint32_t *raw_vendor, char *vendor_str) -{ - int i; - cpu_vendor_t vendor = VENDOR_UNKNOWN; - const struct { cpu_vendor_t vendor; char match[16]; } - matchtable[NUM_CPU_VENDORS] = { - /* source: http://www.sandpile.org/ia32/cpuid.htm */ - { VENDOR_INTEL , "GenuineIntel" }, - { VENDOR_AMD , "AuthenticAMD" }, - { VENDOR_CYRIX , "CyrixInstead" }, - { VENDOR_NEXGEN , "NexGenDriven" }, - { VENDOR_TRANSMETA , "GenuineTMx86" }, - { VENDOR_UMC , "UMC UMC UMC " }, - { VENDOR_CENTAUR , "CentaurHauls" }, - { VENDOR_RISE , "RiseRiseRise" }, - { VENDOR_SIS , "SiS SiS SiS " }, - { VENDOR_NSC , "Geode by NSC" }, - }; - - memcpy(vendor_str + 0, &raw_vendor[1], 4); - memcpy(vendor_str + 4, &raw_vendor[3], 4); - memcpy(vendor_str + 8, &raw_vendor[2], 4); - vendor_str[12] = 0; - - /* Determine vendor: */ - for (i = 0; i < NUM_CPU_VENDORS; i++) - if (!strcmp(vendor_str, matchtable[i].match)) { - vendor = matchtable[i].vendor; - break; - } - return vendor; -} - -static int cpuid_basic_identify(struct cpu_raw_data_t* raw, struct cpu_id_t* data) -{ - int i, j, basic, xmodel, xfamily, ext; - char brandstr[64] = {0}; - data->vendor = cpuid_vendor_identify(raw->basic_cpuid[0], data->vendor_str); - - if (data->vendor == VENDOR_UNKNOWN) - return set_error(ERR_CPU_UNKN); - basic = raw->basic_cpuid[0][0]; - if (basic >= 1) { - data->family = (raw->basic_cpuid[1][0] >> 8) & 0xf; - data->model = (raw->basic_cpuid[1][0] >> 4) & 0xf; - data->stepping = raw->basic_cpuid[1][0] & 0xf; - xmodel = (raw->basic_cpuid[1][0] >> 16) & 0xf; - xfamily = (raw->basic_cpuid[1][0] >> 20) & 0xff; - if (data->vendor == VENDOR_AMD && data->family < 0xf) - data->ext_family = data->family; - else - data->ext_family = data->family + xfamily; - data->ext_model = data->model + (xmodel << 4); - } - ext = raw->ext_cpuid[0][0] - 0x8000000; - - /* obtain the brand string, if present: */ - if (ext >= 4) { - for (i = 0; i < 3; i++) - for (j = 0; j < 4; j++) - memcpy(brandstr + i * 16 + j * 4, - &raw->ext_cpuid[2 + i][j], 4); - brandstr[48] = 0; - i = 0; - while (brandstr[i] == ' ') i++; - strncpy(data->brand_str, brandstr + i, sizeof(data->brand_str)); - data->brand_str[48] = 0; - } - load_features_common(raw, data); - data->total_logical_cpus = get_total_cpus(); - return set_error(ERR_OK); -} - -static void make_list_from_string(const char* csv, struct cpu_list_t* list) -{ - int i, n, l, last; - l = (int) strlen(csv); - n = 0; - for (i = 0; i < l; i++) if (csv[i] == ',') n++; - n++; - list->num_entries = n; - list->names = (char**) malloc(sizeof(char*) * n); - last = -1; - n = 0; - for (i = 0; i <= l; i++) if (i == l || csv[i] == ',') { - list->names[n] = (char*) malloc(i - last); - memcpy(list->names[n], &csv[last + 1], i - last - 1); - list->names[n][i - last - 1] = '\0'; - n++; - last = i; - } -} - - -/* Interface: */ - -int cpuid_get_total_cpus(void) -{ - return get_total_cpus(); -} - -int cpuid_present(void) -{ - return cpuid_exists_by_eflags(); -} - -void cpu_exec_cpuid(uint32_t eax, uint32_t* regs) -{ - regs[0] = eax; - regs[1] = regs[2] = regs[3] = 0; - exec_cpuid(regs); -} - -void cpu_exec_cpuid_ext(uint32_t* regs) -{ - exec_cpuid(regs); -} - -int cpuid_get_raw_data(struct cpu_raw_data_t* data) -{ - unsigned i; - if (!cpuid_present()) - return set_error(ERR_NO_CPUID); - for (i = 0; i < 32; i++) - cpu_exec_cpuid(i, data->basic_cpuid[i]); - for (i = 0; i < 32; i++) - cpu_exec_cpuid(0x80000000 + i, data->ext_cpuid[i]); - for (i = 0; i < MAX_INTELFN4_LEVEL; i++) { - memset(data->intel_fn4[i], 0, sizeof(data->intel_fn4[i])); - data->intel_fn4[i][0] = 4; - data->intel_fn4[i][2] = i; - cpu_exec_cpuid_ext(data->intel_fn4[i]); - } - for (i = 0; i < MAX_INTELFN11_LEVEL; i++) { - memset(data->intel_fn11[i], 0, sizeof(data->intel_fn11[i])); - data->intel_fn11[i][0] = 11; - data->intel_fn11[i][2] = i; - cpu_exec_cpuid_ext(data->intel_fn11[i]); - } - for (i = 0; i < MAX_INTELFN12H_LEVEL; i++) { - memset(data->intel_fn12h[i], 0, sizeof(data->intel_fn12h[i])); - data->intel_fn12h[i][0] = 0x12; - data->intel_fn12h[i][2] = i; - cpu_exec_cpuid_ext(data->intel_fn12h[i]); - } - for (i = 0; i < MAX_INTELFN14H_LEVEL; i++) { - memset(data->intel_fn14h[i], 0, sizeof(data->intel_fn14h[i])); - data->intel_fn14h[i][0] = 0x14; - data->intel_fn14h[i][2] = i; - cpu_exec_cpuid_ext(data->intel_fn14h[i]); - } - return set_error(ERR_OK); -} - -int cpuid_serialize_raw_data(struct cpu_raw_data_t* data, const char* filename) -{ - int i; - FILE *f; - - if (!strcmp(filename, "")) - f = stdout; - else - f = fopen(filename, "wt"); - if (!f) return set_error(ERR_OPEN); - - fprintf(f, "version=%s\n", VERSION); - for (i = 0; i < MAX_CPUID_LEVEL; i++) - fprintf(f, "basic_cpuid[%d]=%08x %08x %08x %08x\n", i, - data->basic_cpuid[i][0], data->basic_cpuid[i][1], - data->basic_cpuid[i][2], data->basic_cpuid[i][3]); - for (i = 0; i < MAX_EXT_CPUID_LEVEL; i++) - fprintf(f, "ext_cpuid[%d]=%08x %08x %08x %08x\n", i, - data->ext_cpuid[i][0], data->ext_cpuid[i][1], - data->ext_cpuid[i][2], data->ext_cpuid[i][3]); - for (i = 0; i < MAX_INTELFN4_LEVEL; i++) - fprintf(f, "intel_fn4[%d]=%08x %08x %08x %08x\n", i, - data->intel_fn4[i][0], data->intel_fn4[i][1], - data->intel_fn4[i][2], data->intel_fn4[i][3]); - for (i = 0; i < MAX_INTELFN11_LEVEL; i++) - fprintf(f, "intel_fn11[%d]=%08x %08x %08x %08x\n", i, - data->intel_fn11[i][0], data->intel_fn11[i][1], - data->intel_fn11[i][2], data->intel_fn11[i][3]); - for (i = 0; i < MAX_INTELFN12H_LEVEL; i++) - fprintf(f, "intel_fn12h[%d]=%08x %08x %08x %08x\n", i, - data->intel_fn12h[i][0], data->intel_fn12h[i][1], - data->intel_fn12h[i][2], data->intel_fn12h[i][3]); - for (i = 0; i < MAX_INTELFN14H_LEVEL; i++) - fprintf(f, "intel_fn14h[%d]=%08x %08x %08x %08x\n", i, - data->intel_fn14h[i][0], data->intel_fn14h[i][1], - data->intel_fn14h[i][2], data->intel_fn14h[i][3]); - - if (strcmp(filename, "")) - fclose(f); - return set_error(ERR_OK); -} - -int cpuid_deserialize_raw_data(struct cpu_raw_data_t* data, const char* filename) -{ - int i, len; - char line[100]; - char token[100]; - char *value; - int syntax; - int cur_line = 0; - int recognized; - FILE *f; - - raw_data_t_constructor(data); - - if (!strcmp(filename, "")) - f = stdin; - else - f = fopen(filename, "rt"); - if (!f) return set_error(ERR_OPEN); - while (fgets(line, sizeof(line), f)) { - ++cur_line; - len = (int) strlen(line); - if (len < 2) continue; - if (line[len - 1] == '\n') - line[--len] = '\0'; - for (i = 0; i < len && line[i] != '='; i++) - if (i >= len && i < 1 && len - i - 1 <= 0) { - fclose(f); - return set_error(ERR_BADFMT); - } - strncpy(token, line, i); - token[i] = '\0'; - value = &line[i + 1]; - /* try to recognize the line */ - recognized = 0; - if (!strcmp(token, "version") || !strcmp(token, "build_date")) { - recognized = 1; - } - syntax = 1; - syntax = syntax && parse_token("basic_cpuid", token, value, data->basic_cpuid, MAX_CPUID_LEVEL, &recognized); - syntax = syntax && parse_token("ext_cpuid", token, value, data->ext_cpuid, MAX_EXT_CPUID_LEVEL, &recognized); - syntax = syntax && parse_token("intel_fn4", token, value, data->intel_fn4, MAX_INTELFN4_LEVEL, &recognized); - syntax = syntax && parse_token("intel_fn11", token, value, data->intel_fn11, MAX_INTELFN11_LEVEL, &recognized); - syntax = syntax && parse_token("intel_fn12h", token, value, data->intel_fn12h, MAX_INTELFN12H_LEVEL, &recognized); - syntax = syntax && parse_token("intel_fn14h", token, value, data->intel_fn14h, MAX_INTELFN14H_LEVEL, &recognized); - if (!syntax) { - warnf("Error: %s:%d: Syntax error\n", filename, cur_line); - fclose(f); - return set_error(ERR_BADFMT); - } - if (!recognized) { - warnf("Warning: %s:%d not understood!\n", filename, cur_line); - } - } - - if (strcmp(filename, "")) - fclose(f); - return set_error(ERR_OK); -} - -int cpu_ident_internal(struct cpu_raw_data_t* raw, struct cpu_id_t* data, struct internal_id_info_t* internal) -{ - int r; - struct cpu_raw_data_t myraw; - if (!raw) { - if ((r = cpuid_get_raw_data(&myraw)) < 0) - return set_error(r); - raw = &myraw; - } - cpu_id_t_constructor(data); - if ((r = cpuid_basic_identify(raw, data)) < 0) - return set_error(r); - switch (data->vendor) { - case VENDOR_INTEL: - r = cpuid_identify_intel(raw, data, internal); - break; - case VENDOR_AMD: - r = cpuid_identify_amd(raw, data, internal); - break; - default: - break; - } - return set_error(r); -} - -int cpu_identify(struct cpu_raw_data_t* raw, struct cpu_id_t* data) -{ - struct internal_id_info_t throwaway; - return cpu_ident_internal(raw, data, &throwaway); -} - -const char* cpu_feature_str(cpu_feature_t feature) -{ - const struct { cpu_feature_t feature; const char* name; } - matchtable[] = { - { CPU_FEATURE_FPU, "fpu" }, - { CPU_FEATURE_VME, "vme" }, - { CPU_FEATURE_DE, "de" }, - { CPU_FEATURE_PSE, "pse" }, - { CPU_FEATURE_TSC, "tsc" }, - { CPU_FEATURE_MSR, "msr" }, - { CPU_FEATURE_PAE, "pae" }, - { CPU_FEATURE_MCE, "mce" }, - { CPU_FEATURE_CX8, "cx8" }, - { CPU_FEATURE_APIC, "apic" }, - { CPU_FEATURE_MTRR, "mtrr" }, - { CPU_FEATURE_SEP, "sep" }, - { CPU_FEATURE_PGE, "pge" }, - { CPU_FEATURE_MCA, "mca" }, - { CPU_FEATURE_CMOV, "cmov" }, - { CPU_FEATURE_PAT, "pat" }, - { CPU_FEATURE_PSE36, "pse36" }, - { CPU_FEATURE_PN, "pn" }, - { CPU_FEATURE_CLFLUSH, "clflush" }, - { CPU_FEATURE_DTS, "dts" }, - { CPU_FEATURE_ACPI, "acpi" }, - { CPU_FEATURE_MMX, "mmx" }, - { CPU_FEATURE_FXSR, "fxsr" }, - { CPU_FEATURE_SSE, "sse" }, - { CPU_FEATURE_SSE2, "sse2" }, - { CPU_FEATURE_SS, "ss" }, - { CPU_FEATURE_HT, "ht" }, - { CPU_FEATURE_TM, "tm" }, - { CPU_FEATURE_IA64, "ia64" }, - { CPU_FEATURE_PBE, "pbe" }, - { CPU_FEATURE_PNI, "pni" }, - { CPU_FEATURE_PCLMUL, "pclmul" }, - { CPU_FEATURE_DTS64, "dts64" }, - { CPU_FEATURE_MONITOR, "monitor" }, - { CPU_FEATURE_DS_CPL, "ds_cpl" }, - { CPU_FEATURE_VMX, "vmx" }, - { CPU_FEATURE_SMX, "smx" }, - { CPU_FEATURE_EST, "est" }, - { CPU_FEATURE_TM2, "tm2" }, - { CPU_FEATURE_SSSE3, "ssse3" }, - { CPU_FEATURE_CID, "cid" }, - { CPU_FEATURE_CX16, "cx16" }, - { CPU_FEATURE_XTPR, "xtpr" }, - { CPU_FEATURE_PDCM, "pdcm" }, - { CPU_FEATURE_DCA, "dca" }, - { CPU_FEATURE_SSE4_1, "sse4_1" }, - { CPU_FEATURE_SSE4_2, "sse4_2" }, - { CPU_FEATURE_SYSCALL, "syscall" }, - { CPU_FEATURE_XD, "xd" }, - { CPU_FEATURE_X2APIC, "x2apic"}, - { CPU_FEATURE_MOVBE, "movbe" }, - { CPU_FEATURE_POPCNT, "popcnt" }, - { CPU_FEATURE_AES, "aes" }, - { CPU_FEATURE_XSAVE, "xsave" }, - { CPU_FEATURE_OSXSAVE, "osxsave" }, - { CPU_FEATURE_AVX, "avx" }, - { CPU_FEATURE_MMXEXT, "mmxext" }, - { CPU_FEATURE_3DNOW, "3dnow" }, - { CPU_FEATURE_3DNOWEXT, "3dnowext" }, - { CPU_FEATURE_NX, "nx" }, - { CPU_FEATURE_FXSR_OPT, "fxsr_opt" }, - { CPU_FEATURE_RDTSCP, "rdtscp" }, - { CPU_FEATURE_LM, "lm" }, - { CPU_FEATURE_LAHF_LM, "lahf_lm" }, - { CPU_FEATURE_CMP_LEGACY, "cmp_legacy" }, - { CPU_FEATURE_SVM, "svm" }, - { CPU_FEATURE_SSE4A, "sse4a" }, - { CPU_FEATURE_MISALIGNSSE, "misalignsse" }, - { CPU_FEATURE_ABM, "abm" }, - { CPU_FEATURE_3DNOWPREFETCH, "3dnowprefetch" }, - { CPU_FEATURE_OSVW, "osvw" }, - { CPU_FEATURE_IBS, "ibs" }, - { CPU_FEATURE_SSE5, "sse5" }, - { CPU_FEATURE_SKINIT, "skinit" }, - { CPU_FEATURE_WDT, "wdt" }, - { CPU_FEATURE_TS, "ts" }, - { CPU_FEATURE_FID, "fid" }, - { CPU_FEATURE_VID, "vid" }, - { CPU_FEATURE_TTP, "ttp" }, - { CPU_FEATURE_TM_AMD, "tm_amd" }, - { CPU_FEATURE_STC, "stc" }, - { CPU_FEATURE_100MHZSTEPS, "100mhzsteps" }, - { CPU_FEATURE_HWPSTATE, "hwpstate" }, - { CPU_FEATURE_CONSTANT_TSC, "constant_tsc" }, - { CPU_FEATURE_XOP, "xop" }, - { CPU_FEATURE_FMA3, "fma3" }, - { CPU_FEATURE_FMA4, "fma4" }, - { CPU_FEATURE_TBM, "tbm" }, - { CPU_FEATURE_F16C, "f16c" }, - { CPU_FEATURE_RDRAND, "rdrand" }, - { CPU_FEATURE_CPB, "cpb" }, - { CPU_FEATURE_APERFMPERF, "aperfmperf" }, - { CPU_FEATURE_PFI, "pfi" }, - { CPU_FEATURE_PA, "pa" }, - { CPU_FEATURE_AVX2, "avx2" }, - { CPU_FEATURE_BMI1, "bmi1" }, - { CPU_FEATURE_BMI2, "bmi2" }, - { CPU_FEATURE_HLE, "hle" }, - { CPU_FEATURE_RTM, "rtm" }, - { CPU_FEATURE_AVX512F, "avx512f" }, - { CPU_FEATURE_AVX512DQ, "avx512dq" }, - { CPU_FEATURE_AVX512PF, "avx512pf" }, - { CPU_FEATURE_AVX512ER, "avx512er" }, - { CPU_FEATURE_AVX512CD, "avx512cd" }, - { CPU_FEATURE_SHA_NI, "sha_ni" }, - { CPU_FEATURE_AVX512BW, "avx512bw" }, - { CPU_FEATURE_AVX512VL, "avx512vl" }, - { CPU_FEATURE_SGX, "sgx" }, - { CPU_FEATURE_RDSEED, "rdseed" }, - { CPU_FEATURE_ADX, "adx" }, - }; - unsigned i, n = COUNT_OF(matchtable); - if (n != NUM_CPU_FEATURES) { - warnf("Warning: incomplete library, feature matchtable size differs from the actual number of features.\n"); - } - for (i = 0; i < n; i++) - if (matchtable[i].feature == feature) - return matchtable[i].name; - return ""; -} - -const char* cpuid_error(void) -{ - const struct { cpu_error_t error; const char *description; } - matchtable[] = { - { ERR_OK , "No error"}, - { ERR_NO_CPUID , "CPUID instruction is not supported"}, - { ERR_NO_RDTSC , "RDTSC instruction is not supported"}, - { ERR_NO_MEM , "Memory allocation failed"}, - { ERR_OPEN , "File open operation failed"}, - { ERR_BADFMT , "Bad file format"}, - { ERR_NOT_IMP , "Not implemented"}, - { ERR_CPU_UNKN , "Unsupported processor"}, - { ERR_NO_RDMSR , "RDMSR instruction is not supported"}, - { ERR_NO_DRIVER, "RDMSR driver error (generic)"}, - { ERR_NO_PERMS , "No permissions to install RDMSR driver"}, - { ERR_EXTRACT , "Cannot extract RDMSR driver (read only media?)"}, - { ERR_HANDLE , "Bad handle"}, - { ERR_INVMSR , "Invalid MSR"}, - { ERR_INVCNB , "Invalid core number"}, - { ERR_HANDLE_R , "Error on handle read"}, - { ERR_INVRANGE , "Invalid given range"}, - }; - unsigned i; - for (i = 0; i < COUNT_OF(matchtable); i++) - if (_libcpiud_errno == matchtable[i].error) - return matchtable[i].description; - return "Unknown error"; -} - - -const char* cpuid_lib_version(void) -{ - return VERSION; -} - -libcpuid_warn_fn_t cpuid_set_warn_function(libcpuid_warn_fn_t new_fn) -{ - libcpuid_warn_fn_t ret = _warn_fun; - _warn_fun = new_fn; - return ret; -} - -void cpuid_set_verbosiness_level(int level) -{ - _current_verboselevel = level; -} - -cpu_vendor_t cpuid_get_vendor(void) -{ - static cpu_vendor_t vendor = VENDOR_UNKNOWN; - uint32_t raw_vendor[4]; - char vendor_str[VENDOR_STR_MAX]; - - if(vendor == VENDOR_UNKNOWN) { - if (!cpuid_present()) - set_error(ERR_NO_CPUID); - else { - cpu_exec_cpuid(0, raw_vendor); - vendor = cpuid_vendor_identify(raw_vendor, vendor_str); - } - } - return vendor; -} - -void cpuid_get_cpu_list(cpu_vendor_t vendor, struct cpu_list_t* list) -{ - switch (vendor) { - case VENDOR_INTEL: - cpuid_get_list_intel(list); - break; - case VENDOR_AMD: - cpuid_get_list_amd(list); - break; - case VENDOR_CYRIX: - make_list_from_string("Cx486,Cx5x86,6x86,6x86MX,M II,MediaGX,MediaGXi,MediaGXm", list); - break; - case VENDOR_NEXGEN: - make_list_from_string("Nx586", list); - break; - case VENDOR_TRANSMETA: - make_list_from_string("Crusoe,Efficeon", list); - break; - case VENDOR_UMC: - make_list_from_string("UMC x86 CPU", list); - break; - case VENDOR_CENTAUR: - make_list_from_string("VIA C3,VIA C7,VIA Nano", list); - break; - case VENDOR_RISE: - make_list_from_string("Rise mP6", list); - break; - case VENDOR_SIS: - make_list_from_string("SiS mP6", list); - break; - case VENDOR_NSC: - make_list_from_string("Geode GXm,Geode GXLV,Geode GX1,Geode GX2", list); - break; - default: - warnf("Unknown vendor passed to cpuid_get_cpu_list()\n"); - break; - } -} - -void cpuid_free_cpu_list(struct cpu_list_t* list) -{ - int i; - if (list->num_entries <= 0) return; - for (i = 0; i < list->num_entries; i++) - free(list->names[i]); - free(list->names); -} diff --git a/contrib/libcpuid/include/libcpuid/intel_code_t.h b/contrib/libcpuid/include/libcpuid/intel_code_t.h deleted file mode 100644 index c50ec9c5a83a31671f3ab114987c82a5f0fe0006..0000000000000000000000000000000000000000 --- a/contrib/libcpuid/include/libcpuid/intel_code_t.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright 2016 Veselin Georgiev, - * anrieffNOSPAM @ mgail_DOT.com (convert to gmail) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/* - * This file contains a list of internal codes we use in detection. It is - * of no external use and isn't a complete list of intel products. - */ - CODE2(PENTIUM, 2000), - CODE(MOBILE_PENTIUM), - - CODE(XEON), - CODE(XEON_IRWIN), - CODE(XEONMP), - CODE(XEON_POTOMAC), - CODE(XEON_I7), - CODE(XEON_GAINESTOWN), - CODE(XEON_WESTMERE), - - CODE(MOBILE_PENTIUM_M), - CODE(CELERON), - CODE(MOBILE_CELERON), - CODE(NOT_CELERON), - - - CODE(CORE_SOLO), - CODE(MOBILE_CORE_SOLO), - CODE(CORE_DUO), - CODE(MOBILE_CORE_DUO), - - CODE(WOLFDALE), - CODE(MEROM), - CODE(PENRYN), - CODE(QUAD_CORE), - CODE(DUAL_CORE_HT), - CODE(QUAD_CORE_HT), - CODE(MORE_THAN_QUADCORE), - CODE(PENTIUM_D), - - CODE(ATOM_UNKNOWN), - CODE(ATOM_SILVERTHORNE), - CODE(ATOM_DIAMONDVILLE), - CODE(ATOM_PINEVIEW), - CODE(ATOM_CEDARVIEW), - - CODE(CORE_I3), - CODE(CORE_I5), - CODE(CORE_I7), - CODE(CORE_IVY3), /* 22nm Core-iX */ - CODE(CORE_IVY5), - CODE(CORE_IVY7), - CODE(CORE_HASWELL3), /* 22nm Core-iX, Haswell */ - CODE(CORE_HASWELL5), - CODE(CORE_HASWELL7), - CODE(CORE_BROADWELL3), /* 14nm Core-iX, Broadwell */ - CODE(CORE_BROADWELL5), - CODE(CORE_BROADWELL7), - CODE(CORE_SKYLAKE3), /* 14nm Core-iX, Skylake */ - CODE(CORE_SKYLAKE5), - CODE(CORE_SKYLAKE7), - diff --git a/contrib/libcpuid/include/libcpuid/libcpuid.h b/contrib/libcpuid/include/libcpuid/libcpuid.h deleted file mode 100644 index 866c0e8441d0e2b67ed4d96d43c76b4c485c0bc8..0000000000000000000000000000000000000000 --- a/contrib/libcpuid/include/libcpuid/libcpuid.h +++ /dev/null @@ -1,1129 +0,0 @@ -/* - * Copyright 2008 Veselin Georgiev, - * anrieffNOSPAM @ mgail_DOT.com (convert to gmail) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __LIBCPUID_H__ -#define __LIBCPUID_H__ -/** - * \file libcpuid.h - * \author Veselin Georgiev - * \date Oct 2008 - * \version 0.4.0 - * - * Version history: - * - * * 0.1.0 (2008-10-15): initial adaptation from wxfractgui sources - * * 0.1.1 (2009-07-06): Added intel_fn11 fields to cpu_raw_data_t to handle - * new processor topology enumeration required on Core i7 - * * 0.1.2 (2009-09-26): Added support for MSR reading through self-extracting - * kernel driver on Win32. - * * 0.1.3 (2010-04-20): Added support for greater more accurate CPU clock - * measurements with cpu_clock_by_ic() - * * 0.2.0 (2011-10-11): Support for AMD Bulldozer CPUs, 128-bit SSE unit size - * checking. A backwards-incompatible change, since the - * sizeof cpu_id_t is now different. - * * 0.2.1 (2012-05-26): Support for Ivy Bridge, and detecting the presence of - * the RdRand instruction. - * * 0.2.2 (2015-11-04): Support for newer processors up to Haswell and Vishera. - * Fix clock detection in cpu_clock_by_ic() for Bulldozer. - * More entries supported in cpu_msrinfo(). - * *BSD and Solaris support (unofficial). - * * 0.3.0 (2016-07-09): Support for Skylake; MSR ops in FreeBSD; INFO_VOLTAGE - * for AMD CPUs. Level 4 cache support for Crystalwell - * (a backwards-incompatible change since the sizeof - * cpu_raw_data_t is now different). - * * 0.4.0 (2016-09-30): Better detection of AMD clock multiplier with msrinfo. - * Support for Intel SGX detection - * (a backwards-incompatible change since the sizeof - * cpu_raw_data_t and cpu_id_t is now different). - */ - -/** @mainpage A simple libcpuid introduction - * - * LibCPUID provides CPU identification and access to the CPUID and RDTSC - * instructions on the x86. - *

- * To execute CPUID, use \ref cpu_exec_cpuid
- * To execute RDTSC, use \ref cpu_rdtsc
- * To fetch the CPUID info needed for CPU identification, use - * \ref cpuid_get_raw_data
- * To make sense of that data (decode, extract features), use \ref cpu_identify
- * To detect the CPU speed, use either \ref cpu_clock, \ref cpu_clock_by_os, - * \ref cpu_tsc_mark + \ref cpu_tsc_unmark + \ref cpu_clock_by_mark, - * \ref cpu_clock_measure or \ref cpu_clock_by_ic. - * Read carefully for pros/cons of each method.
- * - * To read MSRs, use \ref cpu_msr_driver_open to get a handle, and then - * \ref cpu_rdmsr for querying abilities. Some MSR decoding is available on recent - * CPUs, and can be queried through \ref cpu_msrinfo; the various types of queries - * are described in \ref cpu_msrinfo_request_t. - *

- */ - -/** @defgroup libcpuid LibCPUID - @{ */ - -/* Include some integer type specifications: */ -#include "libcpuid_types.h" - -/* Some limits and other constants */ -#include "libcpuid_constants.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @brief CPU vendor, as guessed from the Vendor String. - */ -typedef enum { - VENDOR_INTEL = 0, /*!< Intel CPU */ - VENDOR_AMD, /*!< AMD CPU */ - VENDOR_CYRIX, /*!< Cyrix CPU */ - VENDOR_NEXGEN, /*!< NexGen CPU */ - VENDOR_TRANSMETA, /*!< Transmeta CPU */ - VENDOR_UMC, /*!< x86 CPU by UMC */ - VENDOR_CENTAUR, /*!< x86 CPU by IDT */ - VENDOR_RISE, /*!< x86 CPU by Rise Technology */ - VENDOR_SIS, /*!< x86 CPU by SiS */ - VENDOR_NSC, /*!< x86 CPU by National Semiconductor */ - - NUM_CPU_VENDORS, /*!< Valid CPU vendor ids: 0..NUM_CPU_VENDORS - 1 */ - VENDOR_UNKNOWN = -1, -} cpu_vendor_t; -#define NUM_CPU_VENDORS NUM_CPU_VENDORS - -/** - * @brief Contains just the raw CPUID data. - * - * This contains only the most basic CPU data, required to do identification - * and feature recognition. Every processor should be identifiable using this - * data only. - */ -struct cpu_raw_data_t { - /** contains results of CPUID for eax = 0, 1, ...*/ - uint32_t basic_cpuid[MAX_CPUID_LEVEL][4]; - - /** contains results of CPUID for eax = 0x80000000, 0x80000001, ...*/ - uint32_t ext_cpuid[MAX_EXT_CPUID_LEVEL][4]; - - /** when the CPU is intel and it supports deterministic cache - information: this contains the results of CPUID for eax = 4 - and ecx = 0, 1, ... */ - uint32_t intel_fn4[MAX_INTELFN4_LEVEL][4]; - - /** when the CPU is intel and it supports leaf 0Bh (Extended Topology - enumeration leaf), this stores the result of CPUID with - eax = 11 and ecx = 0, 1, 2... */ - uint32_t intel_fn11[MAX_INTELFN11_LEVEL][4]; - - /** when the CPU is intel and supports leaf 12h (SGX enumeration leaf), - * this stores the result of CPUID with eax = 0x12 and - * ecx = 0, 1, 2... */ - uint32_t intel_fn12h[MAX_INTELFN12H_LEVEL][4]; - - /** when the CPU is intel and supports leaf 14h (Intel Processor Trace - * capabilities leaf). - * this stores the result of CPUID with eax = 0x12 and - * ecx = 0, 1, 2... */ - uint32_t intel_fn14h[MAX_INTELFN14H_LEVEL][4]; -}; - -/** - * @brief This contains information about SGX features of the processor - * Example usage: - * @code - * ... - * struct cpu_raw_data_t raw; - * struct cpu_id_t id; - * - * if (cpuid_get_raw_data(&raw) == 0 && cpu_identify(&raw, &id) == 0 && id.sgx.present) { - * printf("SGX is present.\n"); - * printf("SGX1 instructions: %s.\n", id.sgx.flags[INTEL_SGX1] ? "present" : "absent"); - * printf("SGX2 instructions: %s.\n", id.sgx.flags[INTEL_SGX2] ? "present" : "absent"); - * printf("Max 32-bit enclave size: 2^%d bytes.\n", id.sgx.max_enclave_32bit); - * printf("Max 64-bit enclave size: 2^%d bytes.\n", id.sgx.max_enclave_64bit); - * for (int i = 0; i < id.sgx.num_epc_sections; i++) { - * struct cpu_epc_t epc = cpuid_get_epc(i, NULL); - * printf("EPC section #%d: address = %x, size = %d bytes.\n", epc.address, epc.size); - * } - * } else { - * printf("SGX is not present.\n"); - * } - * @endcode - */ -struct cpu_sgx_t { - /** Whether SGX is present (boolean) */ - uint32_t present; - - /** Max enclave size in 32-bit mode. This is a power-of-two value: - * if it is "31", then the max enclave size is 2^31 bytes (2 GiB). - */ - uint8_t max_enclave_32bit; - - /** Max enclave size in 64-bit mode. This is a power-of-two value: - * if it is "36", then the max enclave size is 2^36 bytes (64 GiB). - */ - uint8_t max_enclave_64bit; - - /** - * contains SGX feature flags. See the \ref cpu_sgx_feature_t - * "INTEL_SGX*" macros below. - */ - uint8_t flags[SGX_FLAGS_MAX]; - - /** number of Enclave Page Cache (EPC) sections. Info for each - * section is available through the \ref cpuid_get_epc() function - */ - int num_epc_sections; - - /** bit vector of the supported extended features that can be written - * to the MISC region of the SSA (Save State Area) - */ - uint32_t misc_select; - - /** a bit vector of the attributes that can be set to SECS.ATTRIBUTES - * via ECREATE. Corresponds to bits 0-63 (incl.) of SECS.ATTRIBUTES. - */ - uint64_t secs_attributes; - - /** a bit vector of the bits that can be set in the XSAVE feature - * request mask; Corresponds to bits 64-127 of SECS.ATTRIBUTES. - */ - uint64_t secs_xfrm; -}; - -/** - * @brief This contains the recognized CPU features/info - */ -struct cpu_id_t { - /** contains the CPU vendor string, e.g. "GenuineIntel" */ - char vendor_str[VENDOR_STR_MAX]; - - /** contains the brand string, e.g. "Intel(R) Xeon(TM) CPU 2.40GHz" */ - char brand_str[BRAND_STR_MAX]; - - /** contains the recognized CPU vendor */ - cpu_vendor_t vendor; - - /** - * contain CPU flags. Used to test for features. See - * the \ref cpu_feature_t "CPU_FEATURE_*" macros below. - * @see Features - */ - uint8_t flags[CPU_FLAGS_MAX]; - - /** CPU family */ - int32_t family; - - /** CPU model */ - int32_t model; - - /** CPU stepping */ - int32_t stepping; - - /** CPU extended family */ - int32_t ext_family; - - /** CPU extended model */ - int32_t ext_model; - - /** Number of CPU cores on the current processor */ - int32_t num_cores; - - /** - * Number of logical processors on the current processor. - * Could be more than the number of physical cores, - * e.g. when the processor has HyperThreading. - */ - int32_t num_logical_cpus; - - /** - * The total number of logical processors. - * The same value is availabe through \ref cpuid_get_total_cpus. - * - * This is num_logical_cpus * {total physical processors in the system} - * (but only on a real system, under a VM this number may be lower). - * - * If you're writing a multithreaded program and you want to run it on - * all CPUs, this is the number of threads you need. - * - * @note in a VM, this will exactly match the number of CPUs set in - * the VM's configuration. - * - */ - int32_t total_logical_cpus; - - /** - * L1 data cache size in KB. Could be zero, if the CPU lacks cache. - * If the size cannot be determined, it will be -1. - */ - int32_t l1_data_cache; - - /** - * L1 instruction cache size in KB. Could be zero, if the CPU lacks - * cache. If the size cannot be determined, it will be -1. - * @note On some Intel CPUs, whose instruction cache is in fact - * a trace cache, the size will be expressed in K uOps. - */ - int32_t l1_instruction_cache; - - /** - * L2 cache size in KB. Could be zero, if the CPU lacks L2 cache. - * If the size of the cache could not be determined, it will be -1 - */ - int32_t l2_cache; - - /** L3 cache size in KB. Zero on most systems */ - int32_t l3_cache; - - /** L4 cache size in KB. Zero on most systems */ - int32_t l4_cache; - - /** Cache associativity for the L1 data cache. -1 if undetermined */ - int32_t l1_assoc; - - /** Cache associativity for the L2 cache. -1 if undetermined */ - int32_t l2_assoc; - - /** Cache associativity for the L3 cache. -1 if undetermined */ - int32_t l3_assoc; - - /** Cache associativity for the L4 cache. -1 if undetermined */ - int32_t l4_assoc; - - /** Cache-line size for L1 data cache. -1 if undetermined */ - int32_t l1_cacheline; - - /** Cache-line size for L2 cache. -1 if undetermined */ - int32_t l2_cacheline; - - /** Cache-line size for L3 cache. -1 if undetermined */ - int32_t l3_cacheline; - - /** Cache-line size for L4 cache. -1 if undetermined */ - int32_t l4_cacheline; - - /** - * The brief and human-friendly CPU codename, which was recognized.
- * Examples: - * @code - * +--------+--------+-------+-------+-------+---------------------------------------+-----------------------+ - * | Vendor | Family | Model | Step. | Cache | Brand String | cpu_id_t.cpu_codename | - * +--------+--------+-------+-------+-------+---------------------------------------+-----------------------+ - * | AMD | 6 | 8 | 0 | 256 | (not available - will be ignored) | "K6-2" | - * | Intel | 15 | 2 | 5 | 512 | "Intel(R) Xeon(TM) CPU 2.40GHz" | "Xeon (Prestonia)" | - * | Intel | 6 | 15 | 11 | 4096 | "Intel(R) Core(TM)2 Duo CPU E6550..." | "Conroe (Core 2 Duo)" | - * | AMD | 15 | 35 | 2 | 1024 | "Dual Core AMD Opteron(tm) Proces..." | "Opteron (Dual Core)" | - * +--------+--------+-------+-------+-------+---------------------------------------+-----------------------+ - * @endcode - */ - char cpu_codename[64]; - - /** SSE execution unit size (64 or 128; -1 if N/A) */ - int32_t sse_size; - - /** - * contain miscellaneous detection information. Used to test about specifics of - * certain detected features. See \ref cpu_hint_t "CPU_HINT_*" macros below. - * @see Hints - */ - uint8_t detection_hints[CPU_HINTS_MAX]; - - /** contains information about SGX features if the processor, if present */ - struct cpu_sgx_t sgx; -}; - -/** - * @brief CPU feature identifiers - * - * Usage: - * @code - * ... - * struct cpu_raw_data_t raw; - * struct cpu_id_t id; - * if (cpuid_get_raw_data(&raw) == 0 && cpu_identify(&raw, &id) == 0) { - * if (id.flags[CPU_FEATURE_SSE2]) { - * // The CPU has SSE2... - * ... - * } else { - * // no SSE2 - * } - * } else { - * // processor cannot be determined. - * } - * @endcode - */ -typedef enum { - CPU_FEATURE_FPU = 0, /*!< Floating point unit */ - CPU_FEATURE_VME, /*!< Virtual mode extension */ - CPU_FEATURE_DE, /*!< Debugging extension */ - CPU_FEATURE_PSE, /*!< Page size extension */ - CPU_FEATURE_TSC, /*!< Time-stamp counter */ - CPU_FEATURE_MSR, /*!< Model-specific regsisters, RDMSR/WRMSR supported */ - CPU_FEATURE_PAE, /*!< Physical address extension */ - CPU_FEATURE_MCE, /*!< Machine check exception */ - CPU_FEATURE_CX8, /*!< CMPXCHG8B instruction supported */ - CPU_FEATURE_APIC, /*!< APIC support */ - CPU_FEATURE_MTRR, /*!< Memory type range registers */ - CPU_FEATURE_SEP, /*!< SYSENTER / SYSEXIT instructions supported */ - CPU_FEATURE_PGE, /*!< Page global enable */ - CPU_FEATURE_MCA, /*!< Machine check architecture */ - CPU_FEATURE_CMOV, /*!< CMOVxx instructions supported */ - CPU_FEATURE_PAT, /*!< Page attribute table */ - CPU_FEATURE_PSE36, /*!< 36-bit page address extension */ - CPU_FEATURE_PN, /*!< Processor serial # implemented (Intel P3 only) */ - CPU_FEATURE_CLFLUSH, /*!< CLFLUSH instruction supported */ - CPU_FEATURE_DTS, /*!< Debug store supported */ - CPU_FEATURE_ACPI, /*!< ACPI support (power states) */ - CPU_FEATURE_MMX, /*!< MMX instruction set supported */ - CPU_FEATURE_FXSR, /*!< FXSAVE / FXRSTOR supported */ - CPU_FEATURE_SSE, /*!< Streaming-SIMD Extensions (SSE) supported */ - CPU_FEATURE_SSE2, /*!< SSE2 instructions supported */ - CPU_FEATURE_SS, /*!< Self-snoop */ - CPU_FEATURE_HT, /*!< Hyper-threading supported (but might be disabled) */ - CPU_FEATURE_TM, /*!< Thermal monitor */ - CPU_FEATURE_IA64, /*!< IA64 supported (Itanium only) */ - CPU_FEATURE_PBE, /*!< Pending-break enable */ - CPU_FEATURE_PNI, /*!< PNI (SSE3) instructions supported */ - CPU_FEATURE_PCLMUL, /*!< PCLMULQDQ instruction supported */ - CPU_FEATURE_DTS64, /*!< 64-bit Debug store supported */ - CPU_FEATURE_MONITOR, /*!< MONITOR / MWAIT supported */ - CPU_FEATURE_DS_CPL, /*!< CPL Qualified Debug Store */ - CPU_FEATURE_VMX, /*!< Virtualization technology supported */ - CPU_FEATURE_SMX, /*!< Safer mode exceptions */ - CPU_FEATURE_EST, /*!< Enhanced SpeedStep */ - CPU_FEATURE_TM2, /*!< Thermal monitor 2 */ - CPU_FEATURE_SSSE3, /*!< SSSE3 instructionss supported (this is different from SSE3!) */ - CPU_FEATURE_CID, /*!< Context ID supported */ - CPU_FEATURE_CX16, /*!< CMPXCHG16B instruction supported */ - CPU_FEATURE_XTPR, /*!< Send Task Priority Messages disable */ - CPU_FEATURE_PDCM, /*!< Performance capabilities MSR supported */ - CPU_FEATURE_DCA, /*!< Direct cache access supported */ - CPU_FEATURE_SSE4_1, /*!< SSE 4.1 instructions supported */ - CPU_FEATURE_SSE4_2, /*!< SSE 4.2 instructions supported */ - CPU_FEATURE_SYSCALL, /*!< SYSCALL / SYSRET instructions supported */ - CPU_FEATURE_XD, /*!< Execute disable bit supported */ - CPU_FEATURE_MOVBE, /*!< MOVBE instruction supported */ - CPU_FEATURE_POPCNT, /*!< POPCNT instruction supported */ - CPU_FEATURE_AES, /*!< AES* instructions supported */ - CPU_FEATURE_XSAVE, /*!< XSAVE/XRSTOR/etc instructions supported */ - CPU_FEATURE_OSXSAVE, /*!< non-privileged copy of OSXSAVE supported */ - CPU_FEATURE_AVX, /*!< Advanced vector extensions supported */ - CPU_FEATURE_MMXEXT, /*!< AMD MMX-extended instructions supported */ - CPU_FEATURE_3DNOW, /*!< AMD 3DNow! instructions supported */ - CPU_FEATURE_3DNOWEXT, /*!< AMD 3DNow! extended instructions supported */ - CPU_FEATURE_NX, /*!< No-execute bit supported */ - CPU_FEATURE_FXSR_OPT, /*!< FFXSR: FXSAVE and FXRSTOR optimizations */ - CPU_FEATURE_RDTSCP, /*!< RDTSCP instruction supported (AMD-only) */ - CPU_FEATURE_LM, /*!< Long mode (x86_64/EM64T) supported */ - CPU_FEATURE_LAHF_LM, /*!< LAHF/SAHF supported in 64-bit mode */ - CPU_FEATURE_CMP_LEGACY, /*!< core multi-processing legacy mode */ - CPU_FEATURE_SVM, /*!< AMD Secure virtual machine */ - CPU_FEATURE_ABM, /*!< LZCNT instruction support */ - CPU_FEATURE_MISALIGNSSE,/*!< Misaligned SSE supported */ - CPU_FEATURE_SSE4A, /*!< SSE 4a from AMD */ - CPU_FEATURE_3DNOWPREFETCH, /*!< PREFETCH/PREFETCHW support */ - CPU_FEATURE_OSVW, /*!< OS Visible Workaround (AMD) */ - CPU_FEATURE_IBS, /*!< Instruction-based sampling */ - CPU_FEATURE_SSE5, /*!< SSE 5 instructions supported (deprecated, will never be 1) */ - CPU_FEATURE_SKINIT, /*!< SKINIT / STGI supported */ - CPU_FEATURE_WDT, /*!< Watchdog timer support */ - CPU_FEATURE_TS, /*!< Temperature sensor */ - CPU_FEATURE_FID, /*!< Frequency ID control */ - CPU_FEATURE_VID, /*!< Voltage ID control */ - CPU_FEATURE_TTP, /*!< THERMTRIP */ - CPU_FEATURE_TM_AMD, /*!< AMD-specified hardware thermal control */ - CPU_FEATURE_STC, /*!< Software thermal control */ - CPU_FEATURE_100MHZSTEPS,/*!< 100 MHz multiplier control */ - CPU_FEATURE_HWPSTATE, /*!< Hardware P-state control */ - CPU_FEATURE_CONSTANT_TSC, /*!< TSC ticks at constant rate */ - CPU_FEATURE_XOP, /*!< The XOP instruction set (same as the old CPU_FEATURE_SSE5) */ - CPU_FEATURE_FMA3, /*!< The FMA3 instruction set */ - CPU_FEATURE_FMA4, /*!< The FMA4 instruction set */ - CPU_FEATURE_TBM, /*!< Trailing bit manipulation instruction support */ - CPU_FEATURE_F16C, /*!< 16-bit FP convert instruction support */ - CPU_FEATURE_RDRAND, /*!< RdRand instruction */ - CPU_FEATURE_X2APIC, /*!< x2APIC, APIC_BASE.EXTD, MSRs 0000_0800h...0000_0BFFh 64-bit ICR (+030h but not +031h), no DFR (+00Eh), SELF_IPI (+040h) also see standard level 0000_000Bh */ - CPU_FEATURE_CPB, /*!< Core performance boost */ - CPU_FEATURE_APERFMPERF, /*!< MPERF/APERF MSRs support */ - CPU_FEATURE_PFI, /*!< Processor Feedback Interface support */ - CPU_FEATURE_PA, /*!< Processor accumulator */ - CPU_FEATURE_AVX2, /*!< AVX2 instructions */ - CPU_FEATURE_BMI1, /*!< BMI1 instructions */ - CPU_FEATURE_BMI2, /*!< BMI2 instructions */ - CPU_FEATURE_HLE, /*!< Hardware Lock Elision prefixes */ - CPU_FEATURE_RTM, /*!< Restricted Transactional Memory instructions */ - CPU_FEATURE_AVX512F, /*!< AVX-512 Foundation */ - CPU_FEATURE_AVX512DQ, /*!< AVX-512 Double/Quad granular insns */ - CPU_FEATURE_AVX512PF, /*!< AVX-512 Prefetch */ - CPU_FEATURE_AVX512ER, /*!< AVX-512 Exponential/Reciprocal */ - CPU_FEATURE_AVX512CD, /*!< AVX-512 Conflict detection */ - CPU_FEATURE_SHA_NI, /*!< SHA-1/SHA-256 instructions */ - CPU_FEATURE_AVX512BW, /*!< AVX-512 Byte/Word granular insns */ - CPU_FEATURE_AVX512VL, /*!< AVX-512 128/256 vector length extensions */ - CPU_FEATURE_SGX, /*!< SGX extensions. Non-autoritative, check cpu_id_t::sgx::present to verify presence */ - CPU_FEATURE_RDSEED, /*!< RDSEED instruction */ - CPU_FEATURE_ADX, /*!< ADX extensions (arbitrary precision) */ - /* termination: */ - NUM_CPU_FEATURES, -} cpu_feature_t; - -/** - * @brief CPU detection hints identifiers - * - * Usage: similar to the flags usage - */ -typedef enum { - CPU_HINT_SSE_SIZE_AUTH = 0, /*!< SSE unit size is authoritative (not only a Family/Model guesswork, but based on an actual CPUID bit) */ - /* termination */ - NUM_CPU_HINTS, -} cpu_hint_t; - -/** - * @brief SGX features flags - * \see cpu_sgx_t - * - * Usage: - * @code - * ... - * struct cpu_raw_data_t raw; - * struct cpu_id_t id; - * if (cpuid_get_raw_data(&raw) == 0 && cpu_identify(&raw, &id) == 0 && id.sgx.present) { - * if (id.sgx.flags[INTEL_SGX1]) - * // The CPU has SGX1 instructions support... - * ... - * } else { - * // no SGX - * } - * } else { - * // processor cannot be determined. - * } - * @endcode - */ - -typedef enum { - INTEL_SGX1, /*!< SGX1 instructions support */ - INTEL_SGX2, /*!< SGX2 instructions support */ - - /* termination: */ - NUM_SGX_FEATURES, -} cpu_sgx_feature_t; - -/** - * @brief Describes common library error codes - */ -typedef enum { - ERR_OK = 0, /*!< "No error" */ - ERR_NO_CPUID = -1, /*!< "CPUID instruction is not supported" */ - ERR_NO_RDTSC = -2, /*!< "RDTSC instruction is not supported" */ - ERR_NO_MEM = -3, /*!< "Memory allocation failed" */ - ERR_OPEN = -4, /*!< "File open operation failed" */ - ERR_BADFMT = -5, /*!< "Bad file format" */ - ERR_NOT_IMP = -6, /*!< "Not implemented" */ - ERR_CPU_UNKN = -7, /*!< "Unsupported processor" */ - ERR_NO_RDMSR = -8, /*!< "RDMSR instruction is not supported" */ - ERR_NO_DRIVER= -9, /*!< "RDMSR driver error (generic)" */ - ERR_NO_PERMS = -10, /*!< "No permissions to install RDMSR driver" */ - ERR_EXTRACT = -11, /*!< "Cannot extract RDMSR driver (read only media?)" */ - ERR_HANDLE = -12, /*!< "Bad handle" */ - ERR_INVMSR = -13, /*!< "Invalid MSR" */ - ERR_INVCNB = -14, /*!< "Invalid core number" */ - ERR_HANDLE_R = -15, /*!< "Error on handle read" */ - ERR_INVRANGE = -16, /*!< "Invalid given range" */ -} cpu_error_t; - -/** - * @brief Internal structure, used in cpu_tsc_mark, cpu_tsc_unmark and - * cpu_clock_by_mark - */ -struct cpu_mark_t { - uint64_t tsc; /*!< Time-stamp from RDTSC */ - uint64_t sys_clock; /*!< In microsecond resolution */ -}; - -/** - * @brief Returns the total number of logical CPU threads (even if CPUID is not present). - * - * Under VM, this number (and total_logical_cpus, since they are fetched with the same code) - * may be nonsensical, i.e. might not equal NumPhysicalCPUs*NumCoresPerCPU*HyperThreading. - * This is because no matter how many logical threads the host machine has, you may limit them - * in the VM to any number you like. **This** is the number returned by cpuid_get_total_cpus(). - * - * @returns Number of logical CPU threads available. Equals the \ref cpu_id_t::total_logical_cpus. - */ -int cpuid_get_total_cpus(void); - -/** - * @brief Checks if the CPUID instruction is supported - * @retval 1 if CPUID is present - * @retval 0 the CPU doesn't have CPUID. - */ -int cpuid_present(void); - -/** - * @brief Executes the CPUID instruction - * @param eax - the value of the EAX register when executing CPUID - * @param regs - the results will be stored here. regs[0] = EAX, regs[1] = EBX, ... - * @note CPUID will be executed with EAX set to the given value and EBX, ECX, - * EDX set to zero. - */ -void cpu_exec_cpuid(uint32_t eax, uint32_t* regs); - -/** - * @brief Executes the CPUID instruction with the given input registers - * @note This is just a bit more generic version of cpu_exec_cpuid - it allows - * you to control all the registers. - * @param regs - Input/output. Prior to executing CPUID, EAX, EBX, ECX and - * EDX will be set to regs[0], regs[1], regs[2] and regs[3]. - * After CPUID, this array will contain the results. - */ -void cpu_exec_cpuid_ext(uint32_t* regs); - -/** - * @brief Obtains the raw CPUID data from the current CPU - * @param data - a pointer to cpu_raw_data_t structure - * @returns zero if successful, and some negative number on error. - * The error message can be obtained by calling \ref cpuid_error. - * @see cpu_error_t - */ -int cpuid_get_raw_data(struct cpu_raw_data_t* data); - -/** - * @brief Writes the raw CPUID data to a text file - * @param data - a pointer to cpu_raw_data_t structure - * @param filename - the path of the file, where the serialized data should be - * written. If empty, stdout will be used. - * @note This is intended primarily for debugging. On some processor, which is - * not currently supported or not completely recognized by cpu_identify, - * one can still successfully get the raw data and write it to a file. - * libcpuid developers can later import this file and debug the detection - * code as if running on the actual hardware. - * The file is simple text format of "something=value" pairs. Version info - * is also written, but the format is not intended to be neither backward- - * nor forward compatible. - * @returns zero if successful, and some negative number on error. - * The error message can be obtained by calling \ref cpuid_error. - * @see cpu_error_t - */ -int cpuid_serialize_raw_data(struct cpu_raw_data_t* data, const char* filename); - -/** - * @brief Reads raw CPUID data from file - * @param data - a pointer to cpu_raw_data_t structure. The deserialized data will - * be written here. - * @param filename - the path of the file, containing the serialized raw data. - * If empty, stdin will be used. - * @note This function may fail, if the file is created by different version of - * the library. Also, see the notes on cpuid_serialize_raw_data. - * @returns zero if successful, and some negative number on error. - * The error message can be obtained by calling \ref cpuid_error. - * @see cpu_error_t -*/ -int cpuid_deserialize_raw_data(struct cpu_raw_data_t* data, const char* filename); - -/** - * @brief Identifies the CPU - * @param raw - Input - a pointer to the raw CPUID data, which is obtained - * either by cpuid_get_raw_data or cpuid_deserialize_raw_data. - * Can also be NULL, in which case the functions calls - * cpuid_get_raw_data itself. - * @param data - Output - the decoded CPU features/info is written here. - * @note The function will not fail, even if some of the information - * cannot be obtained. Even when the CPU is new and thus unknown to - * libcpuid, some generic info, such as "AMD K9 family CPU" will be - * written to data.cpu_codename, and most other things, such as the - * CPU flags, cache sizes, etc. should be detected correctly anyway. - * However, the function CAN fail, if the CPU is completely alien to - * libcpuid. - * @note While cpu_identify() and cpuid_get_raw_data() are fast for most - * purposes, running them several thousand times per second can hamper - * performance significantly. Specifically, avoid writing "cpu feature - * checker" wrapping function, which calls cpu_identify and returns the - * value of some flag, if that function is going to be called frequently. - * @returns zero if successful, and some negative number on error. - * The error message can be obtained by calling \ref cpuid_error. - * @see cpu_error_t - */ -int cpu_identify(struct cpu_raw_data_t* raw, struct cpu_id_t* data); - -/** - * @brief Returns the short textual representation of a CPU flag - * @param feature - the feature, whose textual representation is wanted. - * @returns a constant string like "fpu", "tsc", "sse2", etc. - * @note the names of the returned flags are compatible with those from - * /proc/cpuinfo in Linux, with the exception of `tm_amd' - */ -const char* cpu_feature_str(cpu_feature_t feature); - -/** - * @brief Returns textual description of the last error - * - * libcpuid stores an `errno'-style error status, whose description - * can be obtained with this function. - * @note This function is not thread-safe - * @see cpu_error_t - */ -const char* cpuid_error(void); - -/** - * @brief Executes RDTSC - * - * The RDTSC (ReaD Time Stamp Counter) instruction gives access to an - * internal 64-bit counter, which usually increments at each clock cycle. - * This can be used for various timing routines, and as a very precise - * clock source. It is set to zero on system startup. Beware that may not - * increment at the same frequency as the CPU. Consecutive calls of RDTSC - * are, however, guaranteed to return monotonically-increasing values. - * - * @param result - a pointer to a 64-bit unsigned integer, where the TSC value - * will be stored - * - * @note If 100% compatibility is a concern, you must first check if the - * RDTSC instruction is present (if it is not, your program will crash - * with "invalid opcode" exception). Only some very old processors (i486, - * early AMD K5 and some Cyrix CPUs) lack that instruction - they should - * have become exceedingly rare these days. To verify RDTSC presence, - * run cpu_identify() and check flags[CPU_FEATURE_TSC]. - * - * @note The monotonically increasing nature of the TSC may be violated - * on SMP systems, if their TSC clocks run at different rate. If the OS - * doesn't account for that, the TSC drift may become arbitrary large. - */ -void cpu_rdtsc(uint64_t* result); - -/** - * @brief Store TSC and timing info - * - * This function stores the current TSC value and current - * time info from a precise OS-specific clock source in the cpu_mark_t - * structure. The sys_clock field contains time with microsecond resolution. - * The values can later be used to measure time intervals, number of clocks, - * FPU frequency, etc. - * @see cpu_rdtsc - * - * @param mark [out] - a pointer to a cpu_mark_t structure - */ -void cpu_tsc_mark(struct cpu_mark_t* mark); - -/** - * @brief Calculate TSC and timing difference - * - * @param mark - input/output: a pointer to a cpu_mark_t sturcture, which has - * already been initialized by cpu_tsc_mark. The difference in - * TSC and time will be written here. - * - * This function calculates the TSC and time difference, by obtaining the - * current TSC and timing values and subtracting the contents of the `mark' - * structure from them. Results are written in the same structure. - * - * Example: - * @code - * ... - * struct cpu_mark_t mark; - * cpu_tsc_mark(&mark); - * foo(); - * cpu_tsc_unmark(&mark); - * printf("Foo finished. Executed in %llu cycles and %llu usecs\n", - * mark.tsc, mark.sys_clock); - * ... - * @endcode - */ -void cpu_tsc_unmark(struct cpu_mark_t* mark); - -/** - * @brief Calculates the CPU clock - * - * @param mark - pointer to a cpu_mark_t structure, which has been initialized - * with cpu_tsc_mark and later `stopped' with cpu_tsc_unmark. - * - * @note For reliable results, the marked time interval should be at least about - * 10 ms. - * - * @returns the CPU clock frequency, in MHz. Due to measurement error, it will - * differ from the true value in a few least-significant bits. Accuracy depends - * on the timing interval - the more, the better. If the timing interval is - * insufficient, the result is -1. Also, see the comment on cpu_clock_measure - * for additional issues and pitfalls in using RDTSC for CPU frequency - * measurements. - */ -int cpu_clock_by_mark(struct cpu_mark_t* mark); - -/** - * @brief Returns the CPU clock, as reported by the OS - * - * This function uses OS-specific functions to obtain the CPU clock. It may - * differ from the true clock for several reasons:

- * - * i) The CPU might be in some power saving state, while the OS reports its - * full-power frequency, or vice-versa.
- * ii) In some cases you can raise or lower the CPU frequency with overclocking - * utilities and the OS will not notice. - * - * @returns the CPU clock frequency in MHz. If the OS is not (yet) supported - * or lacks the necessary reporting machinery, the return value is -1 - */ -int cpu_clock_by_os(void); - -/** - * @brief Measure the CPU clock frequency - * - * @param millis - How much time to waste in the busy-wait cycle. In millisecs. - * Useful values 10 - 1000 - * @param quad_check - Do a more thorough measurement if nonzero - * (see the explanation). - * - * The function performs a busy-wait cycle for the given time and calculates - * the CPU frequency by the difference of the TSC values. The accuracy of the - * calculation depends on the length of the busy-wait cycle: more is better, - * but 100ms should be enough for most purposes. - * - * While this will calculate the CPU frequency correctly in most cases, there are - * several reasons why it might be incorrect:
- * - * i) RDTSC doesn't guarantee it will run at the same clock as the CPU. - * Apparently there aren't CPUs at the moment, but still, there's no - * guarantee.
- * ii) The CPU might be in a low-frequency power saving mode, and the CPU - * might be switched to higher frequency at any time. If this happens - * during the measurement, the result can be anywhere between the - * low and high frequencies. Also, if you're interested in the - * high frequency value only, this function might return the low one - * instead.
- * iii) On SMP systems exhibiting TSC drift (see \ref cpu_rdtsc) - * - * the quad_check option will run four consecutive measurements and - * then return the average of the two most-consistent results. The total - * runtime of the function will still be `millis' - consider using - * a bit more time for the timing interval. - * - * Finally, for benchmarking / CPU intensive applications, the best strategy is - * to use the cpu_tsc_mark() / cpu_tsc_unmark() / cpu_clock_by_mark() method. - * Begin by mark()-ing about one second after application startup (allowing the - * power-saving manager to kick in and rise the frequency during that time), - * then unmark() just before application finishing. The result will most - * acurately represent at what frequency your app was running. - * - * @returns the CPU clock frequency in MHz (within some measurement error - * margin). If RDTSC is not supported, the result is -1. - */ -int cpu_clock_measure(int millis, int quad_check); - -/** - * @brief Measure the CPU clock frequency using instruction-counting - * - * @param millis - how much time to allocate for each run, in milliseconds - * @param runs - how many runs to perform - * - * The function performs a busy-wait cycle using a known number of "heavy" (SSE) - * instructions. These instructions run at (more or less guaranteed) 1 IPC rate, - * so by running a busy loop for a fixed amount of time, and measuring the - * amount of instructions done, the CPU clock is accurately measured. - * - * Of course, this function is still affected by the power-saving schemes, so - * the warnings as of cpu_clock_measure() still apply. However, this function is - * immune to problems with detection, related to the Intel Nehalem's "Turbo" - * mode, where the internal clock is raised, but the RDTSC rate is unaffected. - * - * The function will run for about (millis * runs) milliseconds. - * You can make only a single busy-wait run (runs == 1); however, this can - * be affected by task scheduling (which will break the counting), so allowing - * more than one run is recommended. As run length is not imperative for - * accurate readings (e.g., 50ms is sufficient), you can afford a lot of short - * runs, e.g. 10 runs of 50ms or 20 runs of 25ms. - * - * Recommended values - millis = 50, runs = 4. For more robustness, - * increase the number of runs. - * - * NOTE: on Bulldozer and later CPUs, the busy-wait cycle runs at 1.4 IPC, thus - * the results are skewed. This is corrected internally by dividing the resulting - * value by 1.4. - * However, this only occurs if the thread is executed on a single CMT - * module - if there are other threads competing for resources, the results are - * unpredictable. Make sure you run cpu_clock_by_ic() on a CPU that is free from - * competing threads, or if there are such threads, they shouldn't exceed the - * number of modules. On a Bulldozer X8, that means 4 threads. - * - * @returns the CPU clock frequency in MHz (within some measurement error - * margin). If SSE is not supported, the result is -1. If the input parameters - * are incorrect, or some other internal fault is detected, the result is -2. - */ -int cpu_clock_by_ic(int millis, int runs); - -/** - * @brief Get the CPU clock frequency (all-in-one method) - * - * This is an all-in-one method for getting the CPU clock frequency. - * It tries to use the OS for that. If the OS doesn't have this info, it - * uses cpu_clock_measure with 200ms time interval and quadruple checking. - * - * @returns the CPU clock frequency in MHz. If every possible method fails, - * the result is -1. - */ -int cpu_clock(void); - - -/** - * @brief The return value of cpuid_get_epc(). - * @details - * Describes an EPC (Enclave Page Cache) layout (physical address and size). - * A CPU may have one or more EPC areas, and information about each is - * fetched via \ref cpuid_get_epc. - */ -struct cpu_epc_t { - uint64_t start_addr; - uint64_t length; -}; - -/** - * @brief Fetches information about an EPC (Enclave Page Cache) area. - * @param index - zero-based index, valid range [0..cpu_id_t.egx.num_epc_sections) - * @param raw - a pointer to fetched raw CPUID data. Needed only for testing, - * you can safely pass NULL here (if you pass a real structure, - * it will be used for fetching the leaf 12h data if index < 2; - * otherwise the real CPUID instruction will be used). - * @returns the requested data. If the CPU doesn't support SGX, or if - * index >= cpu_id_t.egx.num_epc_sections, both fields of the returned - * structure will be zeros. - */ -struct cpu_epc_t cpuid_get_epc(int index, const struct cpu_raw_data_t* raw); - -/** - * @brief Returns the libcpuid version - * - * @returns the string representation of the libcpuid version, like "0.1.1" - */ -const char* cpuid_lib_version(void); - -typedef void (*libcpuid_warn_fn_t) (const char *msg); -/** - * @brief Sets the warning print function - * - * In some cases, the internal libcpuid machinery would like to emit useful - * debug warnings. By default, these warnings are written to stderr. However, - * you can set a custom function that will receive those warnings. - * - * @param warn_fun - the warning function you want to set. If NULL, warnings - * are disabled. The function takes const char* argument. - * - * @returns the current warning function. You can use the return value to - * keep the previous warning function and restore it at your discretion. - */ -libcpuid_warn_fn_t cpuid_set_warn_function(libcpuid_warn_fn_t warn_fun); - -/** - * @brief Sets the verbosiness level - * - * When the verbosiness level is above zero, some functions might print - * diagnostic information about what are they doing. The higher the level is, - * the more detail is printed. Level zero is guaranteed to omit all such - * output. The output is written using the same machinery as the warnings, - * @see cpuid_set_warn_function() - * - * @param level the desired verbosiness level. Useful values 0..2 inclusive - */ -void cpuid_set_verbosiness_level(int level); - - -/** - * @brief Obtains the CPU vendor from CPUID from the current CPU - * @note The result is cached. - * @returns VENDOR_UNKNOWN if failed, otherwise the CPU vendor type. - * @see cpu_vendor_t - */ -cpu_vendor_t cpuid_get_vendor(void); - -/** - * @brief a structure that holds a list of processor names - */ -struct cpu_list_t { - /** Number of entries in the list */ - int num_entries; - /** Pointers to names. There will be num_entries of them */ - char **names; -}; - -/** - * @brief Gets a list of all known CPU names from a specific vendor. - * - * This function compiles a list of all known CPU (code)names - * (i.e. the possible values of cpu_id_t::cpu_codename) for the given vendor. - * - * There are about 100 entries for Intel and AMD, and a few for the other - * vendors. The list is written out in approximate chronological introduction - * order of the parts. - * - * @param vendor the vendor to be queried - * @param list [out] the resulting list will be written here. - * NOTE: As the memory is dynamically allocated, be sure to call - * cpuid_free_cpu_list() after you're done with the data - * @see cpu_list_t - */ -void cpuid_get_cpu_list(cpu_vendor_t vendor, struct cpu_list_t* list); - -/** - * @brief Frees a CPU list - * - * This function deletes all the memory associated with a CPU list, as obtained - * by cpuid_get_cpu_list() - * - * @param list - the list to be free()'d. - */ -void cpuid_free_cpu_list(struct cpu_list_t* list); - -struct msr_driver_t; -/** - * @brief Starts/opens a driver, needed to read MSRs (Model Specific Registers) - * - * On systems that support it, this function will create a temporary - * system driver, that has privileges to execute the RDMSR instruction. - * After the driver is created, you can read MSRs by calling \ref cpu_rdmsr - * - * @returns a handle to the driver on success, and NULL on error. - * The error message can be obtained by calling \ref cpuid_error. - * @see cpu_error_t - */ -struct msr_driver_t* cpu_msr_driver_open(void); - -/** - * @brief Similar to \ref cpu_msr_driver_open, but accept one parameter - * - * This function works on certain operating systems (GNU/Linux, FreeBSD) - * - * @param core_num specify the core number for MSR. - * The first core number is 0. - * The last core number is \ref cpuid_get_total_cpus - 1. - * - * @returns a handle to the driver on success, and NULL on error. - * The error message can be obtained by calling \ref cpuid_error. - * @see cpu_error_t - */ -struct msr_driver_t* cpu_msr_driver_open_core(unsigned core_num); - -/** - * @brief Reads a Model-Specific Register (MSR) - * - * If the CPU has MSRs (as indicated by the CPU_FEATURE_MSR flag), you can - * read a MSR with the given index by calling this function. - * - * There are several prerequisites you must do before reading MSRs: - * 1) You must ensure the CPU has RDMSR. Check the CPU_FEATURE_MSR flag - * in cpu_id_t::flags - * 2) You must ensure that the CPU implements the specific MSR you intend to - * read. - * 3) You must open a MSR-reader driver. RDMSR is a privileged instruction and - * needs ring-0 access in order to work. This temporary driver is created - * by calling \ref cpu_msr_driver_open - * - * @param handle - a handle to the MSR reader driver, as created by - * cpu_msr_driver_open - * @param msr_index - the numeric ID of the MSR you want to read - * @param result - a pointer to a 64-bit integer, where the MSR value is stored - * - * @returns zero if successful, and some negative number on error. - * The error message can be obtained by calling \ref cpuid_error. - * @see cpu_error_t - */ -int cpu_rdmsr(struct msr_driver_t* handle, uint32_t msr_index, uint64_t* result); - - -typedef enum { - INFO_MPERF, /*!< Maximum performance frequency clock. This - is a counter, which increments as a - proportion of the actual processor speed. */ - INFO_APERF, /*!< Actual performance frequency clock. This - accumulates the core clock counts when the - core is active. */ - INFO_MIN_MULTIPLIER, /*!< Minimum CPU:FSB ratio for this CPU, - multiplied by 100. */ - INFO_CUR_MULTIPLIER, /*!< Current CPU:FSB ratio, multiplied by 100. - e.g., a CPU:FSB value of 18.5 reads as - "1850". */ - INFO_MAX_MULTIPLIER, /*!< Maximum CPU:FSB ratio for this CPU, - multiplied by 100. */ - INFO_TEMPERATURE, /*!< The current core temperature in Celsius. */ - INFO_THROTTLING, /*!< 1 if the current logical processor is - throttling. 0 if it is running normally. */ - INFO_VOLTAGE, /*!< The current core voltage in Volt, - multiplied by 100. */ - INFO_BCLK, /*!< See \ref INFO_BUS_CLOCK. */ - INFO_BUS_CLOCK, /*!< The main bus clock in MHz, - e.g., FSB/QPI/DMI/HT base clock, - multiplied by 100. */ -} cpu_msrinfo_request_t; - -/** - * @brief Similar to \ref cpu_rdmsr, but extract a range of bits - * - * @param handle - a handle to the MSR reader driver, as created by - * cpu_msr_driver_open - * @param msr_index - the numeric ID of the MSR you want to read - * @param highbit - the high bit in range, must be inferior to 64 - * @param lowbit - the low bit in range, must be equal or superior to 0 - * @param result - a pointer to a 64-bit integer, where the MSR value is stored - * - * @returns zero if successful, and some negative number on error. - * The error message can be obtained by calling \ref cpuid_error. - * @see cpu_error_t - */ -int cpu_rdmsr_range(struct msr_driver_t* handle, uint32_t msr_index, uint8_t highbit, - uint8_t lowbit, uint64_t* result); - -/** - * @brief Reads extended CPU information from Model-Specific Registers. - * @param handle - a handle to an open MSR driver, @see cpu_msr_driver_open - * @param which - which info field should be returned. A list of - * available information entities is listed in the - * cpu_msrinfo_request_t enum. - * @retval - if the requested information is available for the current - * processor model, the respective value is returned. - * if no information is available, or the CPU doesn't support - * the query, the special value CPU_INVALID_VALUE is returned - */ -int cpu_msrinfo(struct msr_driver_t* handle, cpu_msrinfo_request_t which); -#define CPU_INVALID_VALUE 0x3fffffff - -/** - * @brief Closes an open MSR driver - * - * This function unloads the MSR driver opened by cpu_msr_driver_open and - * frees any resources associated with it. - * - * @param handle - a handle to the MSR reader driver, as created by - * cpu_msr_driver_open - * - * @returns zero if successful, and some negative number on error. - * The error message can be obtained by calling \ref cpuid_error. - * @see cpu_error_t - */ -int cpu_msr_driver_close(struct msr_driver_t* handle); - -#ifdef __cplusplus -}; /* extern "C" */ -#endif - - -/** @} */ - -#endif /* __LIBCPUID_H__ */ diff --git a/contrib/libcpuid/include/libcpuid/libcpuid_constants.h b/contrib/libcpuid/include/libcpuid/libcpuid_constants.h deleted file mode 100644 index 3ddb6d5e14ece2765ae7d84e59887ae16bc85824..0000000000000000000000000000000000000000 --- a/contrib/libcpuid/include/libcpuid/libcpuid_constants.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2008 Veselin Georgiev, - * anrieffNOSPAM @ mgail_DOT.com (convert to gmail) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -/** - * @File libcpuid_constants.h - * @Author Veselin Georgiev - * @Brief Some limits and constants for libcpuid - */ - -#ifndef __LIBCPUID_CONSTANTS_H__ -#define __LIBCPUID_CONSTANTS_H__ - -#define VENDOR_STR_MAX 16 -#define BRAND_STR_MAX 64 -#define CPU_FLAGS_MAX 128 -#define MAX_CPUID_LEVEL 32 -#define MAX_EXT_CPUID_LEVEL 32 -#define MAX_INTELFN4_LEVEL 8 -#define MAX_INTELFN11_LEVEL 4 -#define MAX_INTELFN12H_LEVEL 4 -#define MAX_INTELFN14H_LEVEL 4 -#define CPU_HINTS_MAX 16 -#define SGX_FLAGS_MAX 14 - -#endif /* __LIBCPUID_CONSTANTS_H__ */ diff --git a/contrib/libcpuid/include/libcpuid/libcpuid_internal.h b/contrib/libcpuid/include/libcpuid/libcpuid_internal.h deleted file mode 100644 index 95528896219c1c71a79134d4a80a7439ee7e9e09..0000000000000000000000000000000000000000 --- a/contrib/libcpuid/include/libcpuid/libcpuid_internal.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2016 Veselin Georgiev, - * anrieffNOSPAM @ mgail_DOT.com (convert to gmail) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __LIBCPUID_INTERNAL_H__ -#define __LIBCPUID_INTERNAL_H__ -/* - * This file contains internal undocumented declarations and function prototypes - * for the workings of the internal library infrastructure. - */ - -enum _common_codes_t { - NA = 0, - NO_CODE, -}; - -#define CODE(x) x -#define CODE2(x, y) x = y -enum _amd_code_t { - #include "amd_code_t.h" -}; -typedef enum _amd_code_t amd_code_t; - -enum _intel_code_t { - #include "intel_code_t.h" -}; -typedef enum _intel_code_t intel_code_t; -#undef CODE -#undef CODE2 - -struct internal_id_info_t { - union { - amd_code_t amd; - intel_code_t intel; - } code; - int score; // detection (matchtable) score -}; - -int cpu_ident_internal(struct cpu_raw_data_t* raw, struct cpu_id_t* data, - struct internal_id_info_t* internal); - -#endif /* __LIBCPUID_INTERNAL_H__ */ diff --git a/contrib/libcpuid/include/libcpuid/libcpuid_types.h b/contrib/libcpuid/include/libcpuid/libcpuid_types.h deleted file mode 100644 index f1181edf2ee56050572f4546574ae9de26e28e24..0000000000000000000000000000000000000000 --- a/contrib/libcpuid/include/libcpuid/libcpuid_types.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2008 Veselin Georgiev, - * anrieffNOSPAM @ mgail_DOT.com (convert to gmail) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -/** - * @File libcpuid_types.h - * @Author Veselin Georgiev - * @Brief Type specifications for libcpuid. - */ - -#ifndef __LIBCPUID_TYPES_H__ -#define __LIBCPUID_TYPES_H__ - -//#ifdef HAVE_CONFIG_H // CLICKHOUSE PATCH -# include "config.h" -//#endif // CLICKHOUSE PATCH - -#if 1 // CLICKHOUSE PATCH -//#if defined(HAVE_STDINT_H) // CLICKHOUSE PATCH -# include -#else -/* we have to provide our own: */ -# if !defined(HAVE_INT32_T) && !defined(__int32_t_defined) -typedef int int32_t; -# endif - -# if !defined(HAVE_UINT32_T) && !defined(__uint32_t_defined) -typedef unsigned uint32_t; -# endif - -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef signed short int16_t; -typedef unsigned short uint16_t; -#if (defined _MSC_VER) && (_MSC_VER <= 1300) - /* MSVC 6.0: no long longs ... */ - typedef signed __int64 int64_t; - typedef unsigned __int64 uint64_t; -#else - /* all other sane compilers: */ - typedef signed long long int64_t; - typedef unsigned long long uint64_t; -#endif - -#endif - -#endif /* __LIBCPUID_TYPES_H__ */ diff --git a/contrib/libcpuid/include/libcpuid/libcpuid_util.c b/contrib/libcpuid/include/libcpuid/libcpuid_util.c deleted file mode 100644 index ea6b1b8dfb4cd61b88b54096667ceb324117d497..0000000000000000000000000000000000000000 --- a/contrib/libcpuid/include/libcpuid/libcpuid_util.c +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright 2008 Veselin Georgiev, - * anrieffNOSPAM @ mgail_DOT.com (convert to gmail) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include -#include "libcpuid.h" -#include "libcpuid_util.h" - -int _current_verboselevel; - -void match_features(const struct feature_map_t* matchtable, int count, uint32_t reg, struct cpu_id_t* data) -{ - int i; - for (i = 0; i < count; i++) - if (reg & (1u << matchtable[i].bit)) - data->flags[matchtable[i].feature] = 1; -} - -static void default_warn(const char *msg) -{ - fprintf(stderr, "%s", msg); -} - -libcpuid_warn_fn_t _warn_fun = default_warn; - -#if defined(_MSC_VER) -# define vsnprintf _vsnprintf -#endif -void warnf(const char* format, ...) -{ - char buff[1024]; - va_list va; - if (!_warn_fun) return; - va_start(va, format); - vsnprintf(buff, sizeof(buff), format, va); - va_end(va); - _warn_fun(buff); -} - -void debugf(int verboselevel, const char* format, ...) -{ - char buff[1024]; - va_list va; - if (verboselevel > _current_verboselevel) return; - va_start(va, format); - vsnprintf(buff, sizeof(buff), format, va); - va_end(va); - _warn_fun(buff); -} - -static int score(const struct match_entry_t* entry, const struct cpu_id_t* data, - int brand_code, int model_code) -{ - int res = 0; - if (entry->family == data->family ) res += 2; - if (entry->model == data->model ) res += 2; - if (entry->stepping == data->stepping ) res += 2; - if (entry->ext_family == data->ext_family) res += 2; - if (entry->ext_model == data->ext_model ) res += 2; - if (entry->ncores == data->num_cores ) res += 2; - if (entry->l2cache == data->l2_cache ) res += 1; - if (entry->l3cache == data->l3_cache ) res += 1; - if (entry->brand_code == brand_code ) res += 2; - if (entry->model_code == model_code ) res += 2; - return res; -} - -int match_cpu_codename(const struct match_entry_t* matchtable, int count, - struct cpu_id_t* data, int brand_code, int model_code) -{ - int bestscore = -1; - int bestindex = 0; - int i, t; - - debugf(3, "Matching cpu f:%d, m:%d, s:%d, xf:%d, xm:%d, ncore:%d, l2:%d, bcode:%d, code:%d\n", - data->family, data->model, data->stepping, data->ext_family, - data->ext_model, data->num_cores, data->l2_cache, brand_code, model_code); - - for (i = 0; i < count; i++) { - t = score(&matchtable[i], data, brand_code, model_code); - debugf(3, "Entry %d, `%s', score %d\n", i, matchtable[i].name, t); - if (t > bestscore) { - debugf(2, "Entry `%s' selected - best score so far (%d)\n", matchtable[i].name, t); - bestscore = t; - bestindex = i; - } - } - strcpy(data->cpu_codename, matchtable[bestindex].name); - return bestscore; -} - -void generic_get_cpu_list(const struct match_entry_t* matchtable, int count, - struct cpu_list_t* list) -{ - int i, j, n, good; - n = 0; - list->names = (char**) malloc(sizeof(char*) * count); - for (i = 0; i < count; i++) { - if (strstr(matchtable[i].name, "Unknown")) continue; - good = 1; - for (j = n - 1; j >= 0; j--) - if (!strcmp(list->names[j], matchtable[i].name)) { - good = 0; - break; - } - if (!good) continue; -#if defined(_MSC_VER) - list->names[n++] = _strdup(matchtable[i].name); -#else - list->names[n++] = strdup(matchtable[i].name); -#endif - } - list->num_entries = n; -} - -static int xmatch_entry(char c, const char* p) -{ - int i, j; - if (c == 0) return -1; - if (c == p[0]) return 1; - if (p[0] == '.') return 1; - if (p[0] == '#' && isdigit(c)) return 1; - if (p[0] == '[') { - j = 1; - while (p[j] && p[j] != ']') j++; - if (!p[j]) return -1; - for (i = 1; i < j; i++) - if (p[i] == c) return j + 1; - } - return -1; -} - -int match_pattern(const char* s, const char* p) -{ - int i, j, dj, k, n, m; - n = (int) strlen(s); - m = (int) strlen(p); - for (i = 0; i < n; i++) { - if (xmatch_entry(s[i], p) != -1) { - j = 0; - k = 0; - while (j < m && ((dj = xmatch_entry(s[i + k], p + j)) != -1)) { - k++; - j += dj; - } - if (j == m) return i + 1; - } - } - return 0; -} - -struct cpu_id_t* get_cached_cpuid(void) -{ - static int initialized = 0; - static struct cpu_id_t id; - if (initialized) return &id; - if (cpu_identify(NULL, &id)) - memset(&id, 0, sizeof(id)); - initialized = 1; - return &id; -} diff --git a/contrib/libcpuid/include/libcpuid/libcpuid_util.h b/contrib/libcpuid/include/libcpuid/libcpuid_util.h deleted file mode 100644 index 22becea26f608ccff0b2ae1beead619b4dac02b7..0000000000000000000000000000000000000000 --- a/contrib/libcpuid/include/libcpuid/libcpuid_util.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright 2008 Veselin Georgiev, - * anrieffNOSPAM @ mgail_DOT.com (convert to gmail) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __LIBCPUID_UTIL_H__ -#define __LIBCPUID_UTIL_H__ - -#define COUNT_OF(array) (sizeof(array) / sizeof(array[0])) - -struct feature_map_t { - unsigned bit; - cpu_feature_t feature; -}; - -void match_features(const struct feature_map_t* matchtable, int count, - uint32_t reg, struct cpu_id_t* data); - -struct match_entry_t { - int family, model, stepping, ext_family, ext_model; - int ncores, l2cache, l3cache, brand_code, model_code; - char name[32]; -}; - -// returns the match score: -int match_cpu_codename(const struct match_entry_t* matchtable, int count, - struct cpu_id_t* data, int brand_code, int model_code); - -void warnf(const char* format, ...) -#ifdef __GNUC__ -__attribute__((format(printf, 1, 2))) -#endif -; -void debugf(int verboselevel, const char* format, ...) -#ifdef __GNUC__ -__attribute__((format(printf, 2, 3))) -#endif -; -void generic_get_cpu_list(const struct match_entry_t* matchtable, int count, - struct cpu_list_t* list); - -/* - * Seek for a pattern in `haystack'. - * Pattern may be an fixed string, or contain the special metacharacters - * '.' - match any single character - * '#' - match any digit - * '[] - match any of the given chars (regex-like ranges are not - * supported) - * Return val: 0 if the pattern is not found. Nonzero if it is found (actually, - * x + 1 where x is the index where the match is found). - */ -int match_pattern(const char* haystack, const char* pattern); - -/* - * Gets an initialized cpu_id_t. It is cached, so that internal libcpuid - * machinery doesn't need to issue cpu_identify more than once. - */ -struct cpu_id_t* get_cached_cpuid(void); - -/* - * Sets the current errno - */ -int set_error(cpu_error_t err); - -extern libcpuid_warn_fn_t _warn_fun; -extern int _current_verboselevel; - -#endif /* __LIBCPUID_UTIL_H__ */ diff --git a/contrib/libcpuid/include/libcpuid/msrdriver.c b/contrib/libcpuid/include/libcpuid/msrdriver.c deleted file mode 100644 index 8f9d7ed0ca87d988512e95030cd9a641554b6691..0000000000000000000000000000000000000000 --- a/contrib/libcpuid/include/libcpuid/msrdriver.c +++ /dev/null @@ -1,593 +0,0 @@ -/* - * Copyright 2009 Veselin Georgiev, - * anrieffNOSPAM @ mgail_DOT.com (convert to gmail) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * @File msrdriver.c - * @Brief Contains the binary images of the x86 and x64 MSR drivers for Windows - * @Date 2009-09-29 - * - * The driver is courtesy of Nick 'Bombera' Gabareff, and its source is actually - * available, see the contrib/ dir. - * - * However, for simplicity, here we just include the images of the compiled .SYS - * files. - * They are extracted to the filesystem on demand and loaded in the kernel - * by the cpu_msr_driver_open() function - */ -#ifdef _WIN32 -#include "asm-bits.h" -//begin { -int cc_x86driver_code_size = 4608; -uint8_t cc_x86driver_code[4608] = { - 0x4d,0x5a,0x90,0x00,0x03,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xff,0xff,0x00,0x00,0xb8,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x0e,0x1f,0xba,0x0e,0x00,0xb4,0x09,0xcd, - 0x21,0xb8,0x01,0x4c,0xcd,0x21,0x54,0x68,0x69,0x73,0x20,0x70,0x72,0x6f,0x67,0x72,0x61,0x6d, - 0x20,0x63,0x61,0x6e,0x6e,0x6f,0x74,0x20,0x62,0x65,0x20,0x72,0x75,0x6e,0x20,0x69,0x6e,0x20, - 0x44,0x4f,0x53,0x20,0x6d,0x6f,0x64,0x65,0x2e,0x0d,0x0d,0x0a,0x24,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x9f,0x99,0x48,0xdf,0xdb,0xf8,0x26,0x8c,0xdb,0xf8,0x26,0x8c,0xdb,0xf8,0x26,0x8c, - 0xdb,0xf8,0x27,0x8c,0xdd,0xf8,0x26,0x8c,0x21,0xdb,0x3f,0x8c,0xd8,0xf8,0x26,0x8c,0xfc,0x3e, - 0x57,0x8c,0xda,0xf8,0x26,0x8c,0xfc,0x3e,0x5a,0x8c,0xda,0xf8,0x26,0x8c,0xfc,0x3e,0x5e,0x8c, - 0xda,0xf8,0x26,0x8c,0x52,0x69,0x63,0x68,0xdb,0xf8,0x26,0x8c,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x50,0x45,0x00,0x00,0x4c,0x01,0x07,0x00,0x12,0x9b,0x9b,0x4a,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xe0,0x00,0x02,0x21,0x0b,0x01,0x08,0x00,0x00,0x06,0x00,0x00,0x00,0x0a, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x20,0x00,0x00, - 0x00,0x00,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x04,0x00,0x00, - 0xa9,0xd1,0x00,0x00,0x01,0x00,0x00,0x04,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x00,0x00, - 0x10,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0xc0,0x03, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x70,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x20,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2e,0x74, - 0x65,0x78,0x74,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00, - 0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00, - 0x00,0x68,0x2e,0x72,0x64,0x61,0x74,0x61,0x00,0x00,0x62,0x00,0x00,0x00,0x00,0x20,0x00,0x00, - 0x00,0x02,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x40,0x00,0x00,0x48,0x2e,0x64,0x61,0x74,0x61,0x00,0x00,0x00,0x04,0x00,0x00,0x00, - 0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0xc8,0x50,0x41,0x47,0x45,0x30,0x44,0x45,0x46, - 0x8c,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x60,0x49,0x4e,0x49,0x54, - 0x00,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x0a, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0xe2, - 0x2e,0x72,0x73,0x72,0x63,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x04, - 0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x40,0x00,0x00,0x42,0x2e,0x72,0x65,0x6c,0x6f,0x63,0x00,0x00,0x68,0x00,0x00,0x00,0x00,0x70, - 0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8b,0x4c, - 0x24,0x08,0x83,0x61,0x18,0x00,0x83,0x61,0x1c,0x00,0x32,0xd2,0xff,0x15,0x08,0x20,0x01,0x00, - 0x33,0xc0,0xc2,0x08,0x00,0x56,0x8b,0x74,0x24,0x0c,0x8b,0x46,0x60,0x81,0x78,0x0c,0x0c,0xe0, - 0x22,0x00,0x57,0x75,0x3c,0x83,0x78,0x04,0x08,0x72,0x36,0x83,0x78,0x08,0x04,0x75,0x07,0x8b, - 0x46,0x0c,0x8b,0x08,0xeb,0x05,0xb9,0x9c,0x01,0x00,0x00,0x8b,0x7e,0x0c,0x0f,0x32,0x89,0x07, - 0x89,0x57,0x04,0xc7,0x46,0x1c,0x08,0x00,0x00,0x00,0x33,0xff,0x32,0xd2,0x8b,0xce,0xff,0x15, - 0x08,0x20,0x01,0x00,0x8b,0xc7,0x5f,0x5e,0xc2,0x08,0x00,0x83,0x66,0x1c,0x00,0xbf,0x01,0x00, - 0x00,0xc0,0x89,0x7e,0x18,0xeb,0xe1,0x55,0x8b,0xec,0x51,0x51,0x8b,0x45,0x08,0xff,0x70,0x04, - 0xff,0x15,0x04,0x20,0x01,0x00,0x68,0x3c,0x20,0x01,0x00,0x8d,0x45,0xf8,0x50,0xff,0x15,0x00, - 0x20,0x01,0x00,0x8d,0x45,0xf8,0x50,0xff,0x15,0x14,0x20,0x01,0x00,0xc9,0xc2,0x04,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x5c,0x50,0x00,0x00,0x74,0x50,0x00,0x00,0x86,0x50,0x00,0x00, - 0x9c,0x50,0x00,0x00,0xb4,0x50,0x00,0x00,0x44,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x5c,0x00, - 0x44,0x00,0x65,0x00,0x76,0x00,0x69,0x00,0x63,0x00,0x65,0x00,0x5c,0x00,0x54,0x00,0x6d,0x00, - 0x70,0x00,0x52,0x00,0x64,0x00,0x72,0x00,0x00,0x00,0x00,0x00,0x5c,0x00,0x44,0x00,0x6f,0x00, - 0x73,0x00,0x44,0x00,0x65,0x00,0x76,0x00,0x69,0x00,0x63,0x00,0x65,0x00,0x73,0x00,0x5c,0x00, - 0x54,0x00,0x6d,0x00,0x70,0x00,0x52,0x00,0x64,0x00,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x8b,0xec,0x83, - 0xec,0x14,0x56,0x8b,0x35,0x00,0x20,0x01,0x00,0x57,0x68,0x1c,0x20,0x01,0x00,0x8d,0x45,0xf4, - 0x50,0xff,0xd6,0x8b,0x7d,0x08,0x8d,0x45,0xfc,0x50,0x6a,0x00,0x6a,0x00,0x6a,0x22,0x8d,0x45, - 0xf4,0x50,0x6a,0x04,0x57,0xff,0x15,0x10,0x20,0x01,0x00,0x85,0xc0,0x75,0x4f,0x68,0x3c,0x20, - 0x01,0x00,0x8d,0x45,0xec,0x50,0xff,0xd6,0x8d,0x45,0xf4,0x50,0x8d,0x45,0xec,0x50,0xff,0x15, - 0x0c,0x20,0x01,0x00,0x8b,0xf0,0x85,0xf6,0x74,0x0d,0xff,0x75,0xfc,0xff,0x15,0x04,0x20,0x01, - 0x00,0x8b,0xc6,0xeb,0x23,0x8b,0x45,0xfc,0xa3,0x00,0x30,0x01,0x00,0xb8,0x00,0x10,0x01,0x00, - 0x89,0x47,0x38,0x89,0x47,0x40,0xc7,0x47,0x34,0x75,0x10,0x01,0x00,0xc7,0x47,0x70,0x19,0x10, - 0x01,0x00,0x33,0xc0,0x5f,0x5e,0xc9,0xc2,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x28,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc6,0x50, - 0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5c,0x50,0x00,0x00,0x74,0x50,0x00,0x00,0x86,0x50, - 0x00,0x00,0x9c,0x50,0x00,0x00,0xb4,0x50,0x00,0x00,0x44,0x50,0x00,0x00,0x00,0x00,0x00,0x00, - 0x4b,0x01,0x49,0x6f,0x44,0x65,0x6c,0x65,0x74,0x65,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x69,0x63, - 0x4c,0x69,0x6e,0x6b,0x00,0x00,0x0b,0x04,0x52,0x74,0x6c,0x49,0x6e,0x69,0x74,0x55,0x6e,0x69, - 0x63,0x6f,0x64,0x65,0x53,0x74,0x72,0x69,0x6e,0x67,0x00,0x00,0x49,0x01,0x49,0x6f,0x44,0x65, - 0x6c,0x65,0x74,0x65,0x44,0x65,0x76,0x69,0x63,0x65,0x00,0x00,0xda,0x01,0x49,0x6f,0x66,0x43, - 0x6f,0x6d,0x70,0x6c,0x65,0x74,0x65,0x52,0x65,0x71,0x75,0x65,0x73,0x74,0x00,0x00,0x41,0x01, - 0x49,0x6f,0x43,0x72,0x65,0x61,0x74,0x65,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x69,0x63,0x4c,0x69, - 0x6e,0x6b,0x00,0x00,0x38,0x01,0x49,0x6f,0x43,0x72,0x65,0x61,0x74,0x65,0x44,0x65,0x76,0x69, - 0x63,0x65,0x00,0x00,0x6e,0x74,0x6f,0x73,0x6b,0x72,0x6e,0x6c,0x2e,0x65,0x78,0x65,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x10,0x00,0x00,0x00,0x18,0x00,0x00,0x80, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00, - 0x00,0x00,0x30,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x01,0x00,0x09,0x04,0x00,0x00,0x48,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x5c,0x03, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x5c,0x03,0x34,0x00,0x00,0x00,0x56,0x00,0x53,0x00,0x5f,0x00,0x56,0x00,0x45,0x00,0x52,0x00, - 0x53,0x00,0x49,0x00,0x4f,0x00,0x4e,0x00,0x5f,0x00,0x49,0x00,0x4e,0x00,0x46,0x00,0x4f,0x00, - 0x00,0x00,0x00,0x00,0xbd,0x04,0xef,0xfe,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00, - 0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x04,0x00,0x04,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xba,0x02,0x00,0x00,0x01,0x00,0x53,0x00,0x74,0x00,0x72,0x00,0x69,0x00,0x6e,0x00, - 0x67,0x00,0x46,0x00,0x69,0x00,0x6c,0x00,0x65,0x00,0x49,0x00,0x6e,0x00,0x66,0x00,0x6f,0x00, - 0x00,0x00,0x96,0x02,0x00,0x00,0x01,0x00,0x30,0x00,0x34,0x00,0x30,0x00,0x39,0x00,0x30,0x00, - 0x34,0x00,0x62,0x00,0x30,0x00,0x00,0x00,0x58,0x00,0x20,0x00,0x01,0x00,0x43,0x00,0x6f,0x00, - 0x6d,0x00,0x6d,0x00,0x65,0x00,0x6e,0x00,0x74,0x00,0x73,0x00,0x00,0x00,0x4d,0x00,0x53,0x00, - 0x52,0x00,0x20,0x00,0x72,0x00,0x65,0x00,0x61,0x00,0x64,0x00,0x65,0x00,0x72,0x00,0x20,0x00, - 0x33,0x00,0x32,0x00,0x2d,0x00,0x62,0x00,0x69,0x00,0x74,0x00,0x20,0x00,0x6b,0x00,0x65,0x00, - 0x72,0x00,0x6e,0x00,0x65,0x00,0x6c,0x00,0x20,0x00,0x64,0x00,0x72,0x00,0x69,0x00,0x76,0x00, - 0x65,0x00,0x72,0x00,0x00,0x00,0x42,0x00,0x11,0x00,0x01,0x00,0x43,0x00,0x6f,0x00,0x6d,0x00, - 0x70,0x00,0x61,0x00,0x6e,0x00,0x79,0x00,0x4e,0x00,0x61,0x00,0x6d,0x00,0x65,0x00,0x00,0x00, - 0x00,0x00,0x49,0x00,0x72,0x00,0x6f,0x00,0x6e,0x00,0x20,0x00,0x53,0x00,0x74,0x00,0x65,0x00, - 0x65,0x00,0x64,0x00,0x73,0x00,0x20,0x00,0x49,0x00,0x6e,0x00,0x63,0x00,0x2e,0x00,0x00,0x00, - 0x00,0x00,0x60,0x00,0x1c,0x00,0x01,0x00,0x46,0x00,0x69,0x00,0x6c,0x00,0x65,0x00,0x44,0x00, - 0x65,0x00,0x73,0x00,0x63,0x00,0x72,0x00,0x69,0x00,0x70,0x00,0x74,0x00,0x69,0x00,0x6f,0x00, - 0x6e,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x6d,0x00,0x70,0x00,0x52,0x00,0x64,0x00,0x72,0x00, - 0x20,0x00,0x33,0x00,0x32,0x00,0x2d,0x00,0x62,0x00,0x69,0x00,0x74,0x00,0x20,0x00,0x4b,0x00, - 0x65,0x00,0x72,0x00,0x6e,0x00,0x65,0x00,0x6c,0x00,0x20,0x00,0x4d,0x00,0x6f,0x00,0x64,0x00, - 0x75,0x00,0x6c,0x00,0x65,0x00,0x00,0x00,0x36,0x00,0x0b,0x00,0x01,0x00,0x46,0x00,0x69,0x00, - 0x6c,0x00,0x65,0x00,0x56,0x00,0x65,0x00,0x72,0x00,0x73,0x00,0x69,0x00,0x6f,0x00,0x6e,0x00, - 0x00,0x00,0x00,0x00,0x31,0x00,0x2c,0x00,0x20,0x00,0x30,0x00,0x2c,0x00,0x20,0x00,0x30,0x00, - 0x2c,0x00,0x20,0x00,0x31,0x00,0x00,0x00,0x00,0x00,0x2e,0x00,0x07,0x00,0x01,0x00,0x49,0x00, - 0x6e,0x00,0x74,0x00,0x65,0x00,0x72,0x00,0x6e,0x00,0x61,0x00,0x6c,0x00,0x4e,0x00,0x61,0x00, - 0x6d,0x00,0x65,0x00,0x00,0x00,0x54,0x00,0x6d,0x00,0x70,0x00,0x52,0x00,0x64,0x00,0x72,0x00, - 0x00,0x00,0x00,0x00,0x4a,0x00,0x13,0x00,0x01,0x00,0x4c,0x00,0x65,0x00,0x67,0x00,0x61,0x00, - 0x6c,0x00,0x43,0x00,0x6f,0x00,0x70,0x00,0x79,0x00,0x72,0x00,0x69,0x00,0x67,0x00,0x68,0x00, - 0x74,0x00,0x00,0x00,0x4e,0x00,0x69,0x00,0x63,0x00,0x6b,0x00,0x20,0x00,0x47,0x00,0x61,0x00, - 0x62,0x00,0x61,0x00,0x72,0x00,0x65,0x00,0x76,0x00,0x20,0x00,0x27,0x00,0x32,0x00,0x30,0x00, - 0x30,0x00,0x39,0x00,0x00,0x00,0x00,0x00,0x3e,0x00,0x0b,0x00,0x01,0x00,0x4f,0x00,0x72,0x00, - 0x69,0x00,0x67,0x00,0x69,0x00,0x6e,0x00,0x61,0x00,0x6c,0x00,0x46,0x00,0x69,0x00,0x6c,0x00, - 0x65,0x00,0x6e,0x00,0x61,0x00,0x6d,0x00,0x65,0x00,0x00,0x00,0x54,0x00,0x6d,0x00,0x70,0x00, - 0x52,0x00,0x64,0x00,0x72,0x00,0x2e,0x00,0x73,0x00,0x79,0x00,0x73,0x00,0x00,0x00,0x00,0x00, - 0x54,0x00,0x1a,0x00,0x01,0x00,0x50,0x00,0x72,0x00,0x6f,0x00,0x64,0x00,0x75,0x00,0x63,0x00, - 0x74,0x00,0x4e,0x00,0x61,0x00,0x6d,0x00,0x65,0x00,0x00,0x00,0x00,0x00,0x43,0x00,0x6f,0x00, - 0x72,0x00,0x65,0x00,0x20,0x00,0x32,0x00,0x20,0x00,0x54,0x00,0x65,0x00,0x6d,0x00,0x70,0x00, - 0x65,0x00,0x72,0x00,0x61,0x00,0x74,0x00,0x75,0x00,0x72,0x00,0x65,0x00,0x20,0x00,0x52,0x00, - 0x65,0x00,0x61,0x00,0x64,0x00,0x65,0x00,0x72,0x00,0x00,0x00,0x3a,0x00,0x0b,0x00,0x01,0x00, - 0x50,0x00,0x72,0x00,0x6f,0x00,0x64,0x00,0x75,0x00,0x63,0x00,0x74,0x00,0x56,0x00,0x65,0x00, - 0x72,0x00,0x73,0x00,0x69,0x00,0x6f,0x00,0x6e,0x00,0x00,0x00,0x31,0x00,0x2c,0x00,0x20,0x00, - 0x30,0x00,0x2c,0x00,0x20,0x00,0x30,0x00,0x2c,0x00,0x20,0x00,0x31,0x00,0x00,0x00,0x00,0x00, - 0x44,0x00,0x00,0x00,0x01,0x00,0x56,0x00,0x61,0x00,0x72,0x00,0x46,0x00,0x69,0x00,0x6c,0x00, - 0x65,0x00,0x49,0x00,0x6e,0x00,0x66,0x00,0x6f,0x00,0x00,0x00,0x00,0x00,0x24,0x00,0x04,0x00, - 0x00,0x00,0x54,0x00,0x72,0x00,0x61,0x00,0x6e,0x00,0x73,0x00,0x6c,0x00,0x61,0x00,0x74,0x00, - 0x69,0x00,0x6f,0x00,0x6e,0x00,0x00,0x00,0x00,0x00,0x09,0x04,0xb0,0x04,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x14,0x00,0x00,0x00, - 0x10,0x30,0x5c,0x30,0x82,0x30,0x87,0x30,0x91,0x30,0x9b,0x30,0x00,0x40,0x00,0x00,0x1c,0x00, - 0x00,0x00,0x09,0x30,0x0f,0x30,0x2f,0x30,0x38,0x30,0x4c,0x30,0x5b,0x30,0x67,0x30,0x6c,0x30, - 0x79,0x30,0x80,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -}; -int cc_x64driver_code_size = 5120; -uint8_t cc_x64driver_code[5120] = { - 0x4d,0x5a,0x90,0x00,0x03,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xff,0xff,0x00,0x00,0xb8,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x0e,0x1f,0xba,0x0e,0x00,0xb4,0x09,0xcd, - 0x21,0xb8,0x01,0x4c,0xcd,0x21,0x54,0x68,0x69,0x73,0x20,0x70,0x72,0x6f,0x67,0x72,0x61,0x6d, - 0x20,0x63,0x61,0x6e,0x6e,0x6f,0x74,0x20,0x62,0x65,0x20,0x72,0x75,0x6e,0x20,0x69,0x6e,0x20, - 0x44,0x4f,0x53,0x20,0x6d,0x6f,0x64,0x65,0x2e,0x0d,0x0d,0x0a,0x24,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xb7,0x04,0xa8,0xc2,0xf3,0x65,0xc6,0x91,0xf3,0x65,0xc6,0x91,0xf3,0x65,0xc6,0x91, - 0xf3,0x65,0xc7,0x91,0xf4,0x65,0xc6,0x91,0x85,0xf8,0xbd,0x91,0xf0,0x65,0xc6,0x91,0x85,0xf8, - 0xab,0x91,0xf0,0x65,0xc6,0x91,0x30,0x6a,0x98,0x91,0xf2,0x65,0xc6,0x91,0x85,0xf8,0xbe,0x91, - 0xf2,0x65,0xc6,0x91,0x52,0x69,0x63,0x68,0xf3,0x65,0xc6,0x91,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x45,0x00,0x00,0x64,0x86,0x07,0x00, - 0x41,0xc8,0x6d,0x49,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x22,0x00,0x0b,0x02, - 0x08,0x00,0x00,0x06,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x60,0x00,0x00, - 0x00,0x10,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x02, - 0x00,0x00,0x05,0x00,0x02,0x00,0x05,0x00,0x02,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00, - 0x00,0x80,0x00,0x00,0x00,0x04,0x00,0x00,0x79,0x44,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, - 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00, - 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6c,0x60,0x00,0x00,0x28,0x00,0x00,0x00, - 0x00,0x70,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x40,0x00,0x00,0x48,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x00,0x00, - 0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x2e,0x74,0x65,0x78,0x74,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x00,0x10, - 0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x68,0x2e,0x72,0x64,0x61,0x74,0x61,0x00,0x00,0xf0,0x00, - 0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x48,0x2e,0x64,0x61,0x74,0x61,0x00, - 0x00,0x00,0x18,0x01,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x08,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0xc8,0x2e,0x70, - 0x64,0x61,0x74,0x61,0x00,0x00,0x48,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x02,0x00,0x00, - 0x00,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00, - 0x00,0x48,0x50,0x41,0x47,0x45,0x30,0x44,0x45,0x46,0x4e,0x01,0x00,0x00,0x00,0x50,0x00,0x00, - 0x00,0x02,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x20,0x00,0x00,0x60,0x49,0x4e,0x49,0x54,0x00,0x00,0x00,0x00,0x60,0x01,0x00,0x00, - 0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0xe2,0x2e,0x72,0x73,0x72,0x63,0x00,0x00,0x00, - 0xc0,0x03,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x42,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x83,0xec,0x28, - 0x33,0xc9,0x48,0x8b,0xc2,0x89,0x4a,0x30,0x48,0x89,0x4a,0x38,0x33,0xd2,0x48,0x8b,0xc8,0xff, - 0x15,0xfd,0x0f,0x00,0x00,0x33,0xc0,0x48,0x83,0xc4,0x28,0xc3,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc, - 0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x48,0x83,0xec,0x28,0x48,0x8b,0x82,0xb8,0x00,0x00, - 0x00,0x4c,0x8b,0xca,0x81,0x78,0x18,0x0c,0xe0,0x22,0x00,0x75,0x43,0x83,0x78,0x08,0x08,0x72, - 0x3d,0x83,0x78,0x10,0x04,0x75,0x08,0x48,0x8b,0x42,0x18,0x8b,0x08,0xeb,0x05,0xb9,0x9c,0x01, - 0x00,0x00,0x4c,0x8b,0x42,0x18,0x0f,0x32,0x48,0xc1,0xe2,0x20,0x49,0x8b,0xc9,0x48,0x0b,0xc2, - 0x33,0xd2,0x49,0x89,0x00,0x49,0xc7,0x41,0x38,0x08,0x00,0x00,0x00,0xff,0x15,0x95,0x0f,0x00, - 0x00,0x33,0xc0,0x48,0x83,0xc4,0x28,0xc3,0xc7,0x42,0x30,0x01,0x00,0x00,0xc0,0x48,0xc7,0x42, - 0x38,0x00,0x00,0x00,0x00,0x49,0x8b,0xc9,0x33,0xd2,0xff,0x15,0x74,0x0f,0x00,0x00,0xb8,0x01, - 0x00,0x00,0xc0,0x48,0x83,0xc4,0x28,0xc3,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc, - 0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x48,0x83,0xec,0x38,0x48,0x8b,0x49,0x08,0xff,0x15, - 0x32,0x0f,0x00,0x00,0x48,0x8d,0x15,0x1b,0x00,0x00,0x00,0x48,0x8d,0x4c,0x24,0x20,0xff,0x15, - 0x18,0x0f,0x00,0x00,0x48,0x8d,0x4c,0x24,0x20,0xff,0x15,0x05,0x0f,0x00,0x00,0x48,0x83,0xc4, - 0x38,0xc3,0x5c,0x00,0x44,0x00,0x6f,0x00,0x73,0x00,0x44,0x00,0x65,0x00,0x76,0x00,0x69,0x00, - 0x63,0x00,0x65,0x00,0x73,0x00,0x5c,0x00,0x54,0x00,0x6d,0x00,0x70,0x00,0x52,0x00,0x64,0x00, - 0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xe6,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x60,0x00,0x00, - 0x00,0x00,0x00,0x00,0x16,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x61,0x00,0x00,0x00,0x00, - 0x00,0x00,0x40,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0xd0,0x60,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x41,0xc8,0x6d,0x49,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x49,0x00,0x00,0x00, - 0x5c,0x20,0x00,0x00,0x5c,0x06,0x00,0x00,0x52,0x53,0x44,0x53,0xd9,0x5e,0xab,0x47,0xc4,0xf2, - 0x4f,0x40,0xaa,0xe9,0x90,0x47,0x67,0x30,0xa5,0xfa,0x03,0x00,0x00,0x00,0x44,0x3a,0x5c,0x74, - 0x6d,0x70,0x5c,0x4b,0x65,0x72,0x6e,0x65,0x6c,0x5c,0x6f,0x62,0x6a,0x66,0x72,0x65,0x5f,0x77, - 0x6e,0x65,0x74,0x5f,0x41,0x4d,0x44,0x36,0x34,0x5c,0x61,0x6d,0x64,0x36,0x34,0x5c,0x54,0x6d, - 0x70,0x52,0x64,0x72,0x2e,0x70,0x64,0x62,0x00,0x00,0x00,0x00,0x01,0x04,0x01,0x00,0x04,0x42, - 0x00,0x00,0x01,0x04,0x01,0x00,0x04,0x42,0x00,0x00,0x01,0x04,0x01,0x00,0x04,0x62,0x00,0x00, - 0x21,0x00,0x00,0x00,0x10,0x50,0x00,0x00,0x74,0x50,0x00,0x00,0xe4,0x20,0x00,0x00,0x21,0x08, - 0x02,0x00,0x08,0x74,0x13,0x00,0x10,0x50,0x00,0x00,0x74,0x50,0x00,0x00,0xe4,0x20,0x00,0x00, - 0x01,0x0c,0x03,0x00,0x0c,0x34,0x12,0x00,0x04,0xe2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xcd,0x5d,0x20,0xd2,0x66,0xd4,0xff,0xff,0x32,0xa2,0xdf,0x2d,0x99,0x2b,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x10,0x10,0x00,0x00,0x32,0x10,0x00,0x00,0xa8,0x20,0x00,0x00,0x40,0x10, - 0x00,0x00,0xbe,0x10,0x00,0x00,0xb0,0x20,0x00,0x00,0xd0,0x10,0x00,0x00,0x00,0x11,0x00,0x00, - 0xb8,0x20,0x00,0x00,0x10,0x50,0x00,0x00,0x74,0x50,0x00,0x00,0xe4,0x20,0x00,0x00,0x74,0x50, - 0x00,0x00,0xe8,0x50,0x00,0x00,0xd0,0x20,0x00,0x00,0xe8,0x50,0x00,0x00,0xf5,0x50,0x00,0x00, - 0xc0,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x83,0xec,0x78,0x48,0x89,0x9c,0x24, - 0x90,0x00,0x00,0x00,0x48,0x8b,0xd9,0x48,0x8d,0x15,0x0a,0x01,0x00,0x00,0x48,0x8d,0x4c,0x24, - 0x48,0xff,0x15,0xd7,0xcf,0xff,0xff,0x41,0xb9,0x22,0x00,0x00,0x00,0x4c,0x8d,0x5c,0x24,0x40, - 0x4c,0x89,0x5c,0x24,0x30,0x4c,0x8d,0x44,0x24,0x48,0x41,0x8d,0x51,0xe6,0x48,0x8b,0xcb,0xc6, - 0x44,0x24,0x28,0x00,0xc7,0x44,0x24,0x20,0x00,0x00,0x00,0x00,0xff,0x15,0xc0,0xcf,0xff,0xff, - 0x85,0xc0,0x0f,0x85,0x80,0x00,0x00,0x00,0x48,0x8d,0x15,0x91,0x00,0x00,0x00,0x48,0x8d,0x4c, - 0x24,0x58,0x48,0x89,0xbc,0x24,0x98,0x00,0x00,0x00,0xff,0x15,0x86,0xcf,0xff,0xff,0x48,0x8d, - 0x54,0x24,0x48,0x48,0x8d,0x4c,0x24,0x58,0xff,0x15,0x86,0xcf,0xff,0xff,0x85,0xc0,0x8b,0xf8, - 0x74,0x0f,0x48,0x8b,0x4c,0x24,0x40,0xff,0x15,0x6d,0xcf,0xff,0xff,0x8b,0xc7,0xeb,0x39,0x48, - 0x8b,0x44,0x24,0x40,0x48,0x89,0x05,0x5d,0xe0,0xff,0xff,0x48,0x8d,0x05,0x16,0xc0,0xff,0xff, - 0x48,0x89,0x43,0x68,0x48,0x8d,0x05,0x4b,0xbf,0xff,0xff,0x48,0x89,0x43,0x70,0x48,0x89,0x83, - 0x80,0x00,0x00,0x00,0x48,0x8d,0x05,0x69,0xbf,0xff,0xff,0x48,0x89,0x83,0xe0,0x00,0x00,0x00, - 0x33,0xc0,0x48,0x8b,0xbc,0x24,0x98,0x00,0x00,0x00,0x48,0x8b,0x9c,0x24,0x90,0x00,0x00,0x00, - 0x48,0x83,0xc4,0x78,0xc3,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x5c,0x00, - 0x44,0x00,0x6f,0x00,0x73,0x00,0x44,0x00,0x65,0x00,0x76,0x00,0x69,0x00,0x63,0x00,0x65,0x00, - 0x73,0x00,0x5c,0x00,0x54,0x00,0x6d,0x00,0x70,0x00,0x52,0x00,0x64,0x00,0x72,0x00,0x00,0x00, - 0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x5c,0x00,0x44,0x00,0x65,0x00,0x76,0x00, - 0x69,0x00,0x63,0x00,0x65,0x00,0x5c,0x00,0x54,0x00,0x6d,0x00,0x70,0x00,0x52,0x00,0x64,0x00, - 0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x48,0x8b,0x05,0xf1,0xd0,0xff,0xff,0x49,0xb9,0x32,0xa2,0xdf,0x2d,0x99,0x2b,0x00,0x00,0x48, - 0x85,0xc0,0x74,0x05,0x49,0x3b,0xc1,0x75,0x2f,0x4c,0x8d,0x05,0xd6,0xd0,0xff,0xff,0x48,0xb8, - 0x20,0x03,0x00,0x00,0x80,0xf7,0xff,0xff,0x48,0x8b,0x00,0x49,0x33,0xc0,0x49,0xb8,0xff,0xff, - 0xff,0xff,0xff,0xff,0x00,0x00,0x49,0x23,0xc0,0x49,0x0f,0x44,0xc1,0x48,0x89,0x05,0xae,0xd0, - 0xff,0xff,0x48,0xf7,0xd0,0x48,0x89,0x05,0x9c,0xd0,0xff,0xff,0xe9,0xa7,0xef,0xff,0xff,0xcc, - 0xcc,0xcc,0x98,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x52,0x61,0x00,0x00, - 0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe6,0x60,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfe,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x61, - 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0xd0,0x60,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf6,0x01,0x49,0x6f,0x66,0x43, - 0x6f,0x6d,0x70,0x6c,0x65,0x74,0x65,0x52,0x65,0x71,0x75,0x65,0x73,0x74,0x00,0x00,0x61,0x01, - 0x49,0x6f,0x44,0x65,0x6c,0x65,0x74,0x65,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x69,0x63,0x4c,0x69, - 0x6e,0x6b,0x00,0x00,0x3e,0x04,0x52,0x74,0x6c,0x49,0x6e,0x69,0x74,0x55,0x6e,0x69,0x63,0x6f, - 0x64,0x65,0x53,0x74,0x72,0x69,0x6e,0x67,0x00,0x00,0x5f,0x01,0x49,0x6f,0x44,0x65,0x6c,0x65, - 0x74,0x65,0x44,0x65,0x76,0x69,0x63,0x65,0x00,0x00,0x55,0x01,0x49,0x6f,0x43,0x72,0x65,0x61, - 0x74,0x65,0x53,0x79,0x6d,0x62,0x6f,0x6c,0x69,0x63,0x4c,0x69,0x6e,0x6b,0x00,0x00,0x4c,0x01, - 0x49,0x6f,0x43,0x72,0x65,0x61,0x74,0x65,0x44,0x65,0x76,0x69,0x63,0x65,0x00,0x00,0x6e,0x74, - 0x6f,0x73,0x6b,0x72,0x6e,0x6c,0x2e,0x65,0x78,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x10,0x00,0x00,0x00,0x18,0x00,0x00,0x80,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00, - 0x30,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x00,0x09,0x04,0x00,0x00,0x48,0x00,0x00,0x00,0x60,0x70,0x00,0x00,0x60,0x03,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x03, - 0x34,0x00,0x00,0x00,0x56,0x00,0x53,0x00,0x5f,0x00,0x56,0x00,0x45,0x00,0x52,0x00,0x53,0x00, - 0x49,0x00,0x4f,0x00,0x4e,0x00,0x5f,0x00,0x49,0x00,0x4e,0x00,0x46,0x00,0x4f,0x00,0x00,0x00, - 0x00,0x00,0xbd,0x04,0xef,0xfe,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00, - 0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00, - 0x04,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xbe,0x02,0x00,0x00,0x01,0x00,0x53,0x00,0x74,0x00,0x72,0x00,0x69,0x00,0x6e,0x00,0x67,0x00, - 0x46,0x00,0x69,0x00,0x6c,0x00,0x65,0x00,0x49,0x00,0x6e,0x00,0x66,0x00,0x6f,0x00,0x00,0x00, - 0x9a,0x02,0x00,0x00,0x01,0x00,0x30,0x00,0x34,0x00,0x30,0x00,0x39,0x00,0x30,0x00,0x34,0x00, - 0x62,0x00,0x30,0x00,0x00,0x00,0x58,0x00,0x20,0x00,0x01,0x00,0x43,0x00,0x6f,0x00,0x6d,0x00, - 0x6d,0x00,0x65,0x00,0x6e,0x00,0x74,0x00,0x73,0x00,0x00,0x00,0x4d,0x00,0x53,0x00,0x52,0x00, - 0x20,0x00,0x72,0x00,0x65,0x00,0x61,0x00,0x64,0x00,0x65,0x00,0x72,0x00,0x20,0x00,0x36,0x00, - 0x34,0x00,0x2d,0x00,0x62,0x00,0x69,0x00,0x74,0x00,0x20,0x00,0x6b,0x00,0x65,0x00,0x72,0x00, - 0x6e,0x00,0x65,0x00,0x6c,0x00,0x20,0x00,0x64,0x00,0x72,0x00,0x69,0x00,0x76,0x00,0x65,0x00, - 0x72,0x00,0x00,0x00,0x42,0x00,0x11,0x00,0x01,0x00,0x43,0x00,0x6f,0x00,0x6d,0x00,0x70,0x00, - 0x61,0x00,0x6e,0x00,0x79,0x00,0x4e,0x00,0x61,0x00,0x6d,0x00,0x65,0x00,0x00,0x00,0x00,0x00, - 0x49,0x00,0x72,0x00,0x6f,0x00,0x6e,0x00,0x20,0x00,0x53,0x00,0x74,0x00,0x65,0x00,0x65,0x00, - 0x64,0x00,0x73,0x00,0x20,0x00,0x49,0x00,0x6e,0x00,0x63,0x00,0x2e,0x00,0x00,0x00,0x00,0x00, - 0x60,0x00,0x1c,0x00,0x01,0x00,0x46,0x00,0x69,0x00,0x6c,0x00,0x65,0x00,0x44,0x00,0x65,0x00, - 0x73,0x00,0x63,0x00,0x72,0x00,0x69,0x00,0x70,0x00,0x74,0x00,0x69,0x00,0x6f,0x00,0x6e,0x00, - 0x00,0x00,0x00,0x00,0x54,0x00,0x6d,0x00,0x70,0x00,0x52,0x00,0x64,0x00,0x72,0x00,0x20,0x00, - 0x36,0x00,0x34,0x00,0x2d,0x00,0x62,0x00,0x69,0x00,0x74,0x00,0x20,0x00,0x4b,0x00,0x65,0x00, - 0x72,0x00,0x6e,0x00,0x65,0x00,0x6c,0x00,0x20,0x00,0x4d,0x00,0x6f,0x00,0x64,0x00,0x75,0x00, - 0x6c,0x00,0x65,0x00,0x00,0x00,0x36,0x00,0x0b,0x00,0x01,0x00,0x46,0x00,0x69,0x00,0x6c,0x00, - 0x65,0x00,0x56,0x00,0x65,0x00,0x72,0x00,0x73,0x00,0x69,0x00,0x6f,0x00,0x6e,0x00,0x00,0x00, - 0x00,0x00,0x31,0x00,0x2c,0x00,0x20,0x00,0x30,0x00,0x2c,0x00,0x20,0x00,0x30,0x00,0x2c,0x00, - 0x20,0x00,0x31,0x00,0x00,0x00,0x00,0x00,0x2e,0x00,0x07,0x00,0x01,0x00,0x49,0x00,0x6e,0x00, - 0x74,0x00,0x65,0x00,0x72,0x00,0x6e,0x00,0x61,0x00,0x6c,0x00,0x4e,0x00,0x61,0x00,0x6d,0x00, - 0x65,0x00,0x00,0x00,0x54,0x00,0x6d,0x00,0x70,0x00,0x52,0x00,0x64,0x00,0x72,0x00,0x00,0x00, - 0x00,0x00,0x4a,0x00,0x13,0x00,0x01,0x00,0x4c,0x00,0x65,0x00,0x67,0x00,0x61,0x00,0x6c,0x00, - 0x43,0x00,0x6f,0x00,0x70,0x00,0x79,0x00,0x72,0x00,0x69,0x00,0x67,0x00,0x68,0x00,0x74,0x00, - 0x00,0x00,0x4e,0x00,0x69,0x00,0x63,0x00,0x6b,0x00,0x20,0x00,0x47,0x00,0x61,0x00,0x62,0x00, - 0x61,0x00,0x72,0x00,0x65,0x00,0x76,0x00,0x20,0x00,0x27,0x00,0x32,0x00,0x30,0x00,0x30,0x00, - 0x39,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x0d,0x00,0x01,0x00,0x4f,0x00,0x72,0x00,0x69,0x00, - 0x67,0x00,0x69,0x00,0x6e,0x00,0x61,0x00,0x6c,0x00,0x46,0x00,0x69,0x00,0x6c,0x00,0x65,0x00, - 0x6e,0x00,0x61,0x00,0x6d,0x00,0x65,0x00,0x00,0x00,0x54,0x00,0x6d,0x00,0x70,0x00,0x52,0x00, - 0x64,0x00,0x72,0x00,0x36,0x00,0x34,0x00,0x2e,0x00,0x73,0x00,0x79,0x00,0x73,0x00,0x00,0x00, - 0x00,0x00,0x54,0x00,0x1a,0x00,0x01,0x00,0x50,0x00,0x72,0x00,0x6f,0x00,0x64,0x00,0x75,0x00, - 0x63,0x00,0x74,0x00,0x4e,0x00,0x61,0x00,0x6d,0x00,0x65,0x00,0x00,0x00,0x00,0x00,0x43,0x00, - 0x6f,0x00,0x72,0x00,0x65,0x00,0x20,0x00,0x32,0x00,0x20,0x00,0x54,0x00,0x65,0x00,0x6d,0x00, - 0x70,0x00,0x65,0x00,0x72,0x00,0x61,0x00,0x74,0x00,0x75,0x00,0x72,0x00,0x65,0x00,0x20,0x00, - 0x52,0x00,0x65,0x00,0x61,0x00,0x64,0x00,0x65,0x00,0x72,0x00,0x00,0x00,0x3a,0x00,0x0b,0x00, - 0x01,0x00,0x50,0x00,0x72,0x00,0x6f,0x00,0x64,0x00,0x75,0x00,0x63,0x00,0x74,0x00,0x56,0x00, - 0x65,0x00,0x72,0x00,0x73,0x00,0x69,0x00,0x6f,0x00,0x6e,0x00,0x00,0x00,0x31,0x00,0x2c,0x00, - 0x20,0x00,0x30,0x00,0x2c,0x00,0x20,0x00,0x30,0x00,0x2c,0x00,0x20,0x00,0x31,0x00,0x00,0x00, - 0x00,0x00,0x44,0x00,0x00,0x00,0x01,0x00,0x56,0x00,0x61,0x00,0x72,0x00,0x46,0x00,0x69,0x00, - 0x6c,0x00,0x65,0x00,0x49,0x00,0x6e,0x00,0x66,0x00,0x6f,0x00,0x00,0x00,0x00,0x00,0x24,0x00, - 0x04,0x00,0x00,0x00,0x54,0x00,0x72,0x00,0x61,0x00,0x6e,0x00,0x73,0x00,0x6c,0x00,0x61,0x00, - 0x74,0x00,0x69,0x00,0x6f,0x00,0x6e,0x00,0x00,0x00,0x00,0x00,0x09,0x04,0xb0,0x04,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -}; -//} end -#endif // _WIN32 - -int msrdriver_dummy; // a dummy to avoid a linker warning on OS X. diff --git a/contrib/libcpuid/include/libcpuid/rdmsr.c b/contrib/libcpuid/include/libcpuid/rdmsr.c deleted file mode 100644 index a27e939bba0384720e1f2e07ceda7f61828dc9b0..0000000000000000000000000000000000000000 --- a/contrib/libcpuid/include/libcpuid/rdmsr.c +++ /dev/null @@ -1,922 +0,0 @@ -/* - * Copyright 2009 Veselin Georgiev, - * anrieffNOSPAM @ mgail_DOT.com (convert to gmail) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#define _XOPEN_SOURCE 500 -#include -#include -#include "libcpuid.h" -#include "asm-bits.h" -#include "libcpuid_util.h" -#include "libcpuid_internal.h" -#include "rdtsc.h" - -#if defined (__linux__) || defined (__gnu_linux__) -/* Assuming linux with /dev/cpu/x/msr: */ -#include -#include -#include -#include -#include -#include -struct msr_driver_t { int fd; }; -static int rdmsr_supported(void); -static int load_driver(char *msr_path) -{ - const int file_exists = !access(msr_path, F_OK); - const int file_readable = !access(msr_path, R_OK); - - if (file_exists && file_readable) - return 1; - else if (file_exists && !file_readable) - return 0; - else if (getuid() != 0) - return 0; - else - return !system("modprobe msr 2> /dev/null"); -} - -struct msr_driver_t* cpu_msr_driver_open(void) -{ - return cpu_msr_driver_open_core(0); -} - -struct msr_driver_t* cpu_msr_driver_open_core(unsigned core_num) -{ - char msr[32]; - struct msr_driver_t* handle; - if (core_num >= cpuid_get_total_cpus()) { - set_error(ERR_INVCNB); - return NULL; - } - if (!rdmsr_supported()) { - set_error(ERR_NO_RDMSR); - return NULL; - } - sprintf(msr, "/dev/cpu/%u/msr", core_num); - if(!load_driver(msr)) { - set_error(ERR_NO_DRIVER); - return NULL; - } - int fd = open(msr, O_RDONLY); - if (fd < 0) { - if (errno == EIO) { - set_error(ERR_NO_RDMSR); - return NULL; - } - set_error(ERR_NO_DRIVER); - return NULL; - } - handle = (struct msr_driver_t*) malloc(sizeof(struct msr_driver_t)); - handle->fd = fd; - return handle; -} - -int cpu_rdmsr(struct msr_driver_t* driver, uint32_t msr_index, uint64_t* result) -{ - ssize_t ret; - - if (!driver || driver->fd < 0) - return set_error(ERR_HANDLE); - ret = pread(driver->fd, result, 8, msr_index); - if (ret != 8) - return set_error(ERR_INVMSR); - return 0; -} - -int cpu_msr_driver_close(struct msr_driver_t* drv) -{ - if (drv && drv->fd >= 0) { - close(drv->fd); - free(drv); - } - return 0; -} - -/* #endif defined (__linux__) || defined (__gnu_linux__) */ - -#elif defined (__FreeBSD__) || defined (__DragonFly__) -/* Assuming FreeBSD with /dev/cpuctlX */ -#include -#include -#include -#include -#include - -struct msr_driver_t { int fd; }; -static int rdmsr_supported(void); -static int load_driver(char *msr_path) -{ - const int file_exists = !access(msr_path, F_OK); - const int file_readable = !access(msr_path, R_OK); - - if (file_exists && file_readable) - return 1; - else if (file_exists && !file_readable) - return 0; - else if (getuid() != 0) - return 0; - else - return !system("kldload -n cpuctl 2> /dev/null"); -} - -struct msr_driver_t* cpu_msr_driver_open(void) -{ - return cpu_msr_driver_open_core(0); -} - -struct msr_driver_t* cpu_msr_driver_open_core(unsigned core_num) -{ - char msr[32]; - struct msr_driver_t* handle; - if (core_num >= cpuid_get_total_cpus()) { - set_error(ERR_INVCNB); - return NULL; - } - if (!rdmsr_supported()) { - set_error(ERR_NO_RDMSR); - return NULL; - } - sprintf(msr, "/dev/cpuctl%u", core_num); - if(!load_driver(msr)) { - set_error(ERR_NO_DRIVER); - return NULL; - } - int fd = open(msr, O_RDONLY); - if (fd < 0) { - if (errno == EIO) { - set_error(ERR_NO_RDMSR); - return NULL; - } - set_error(ERR_NO_DRIVER); - return NULL; - } - handle = (struct msr_driver_t*) malloc(sizeof(struct msr_driver_t)); - handle->fd = fd; - return handle; -} - -int cpu_rdmsr(struct msr_driver_t* driver, uint32_t msr_index, uint64_t* result) -{ - cpuctl_msr_args_t args; - args.msr = msr_index; - - if (!driver || driver->fd < 0) - return set_error(ERR_HANDLE); - - if(ioctl(driver->fd, CPUCTL_RDMSR, &args)) - return set_error(ERR_INVMSR); - - *result = args.data; - return 0; -} - -int cpu_msr_driver_close(struct msr_driver_t* drv) -{ - if (drv && drv->fd >= 0) { - close(drv->fd); - free(drv); - } - return 0; -} - -/* #endif defined (__FreeBSD__) || defined (__DragonFly__) */ - -#elif defined (_WIN32) -#include -#include -#include - -extern uint8_t cc_x86driver_code[]; -extern int cc_x86driver_code_size; -extern uint8_t cc_x64driver_code[]; -extern int cc_x64driver_code_size; - -struct msr_driver_t { - char driver_path[MAX_PATH + 1]; - SC_HANDLE scManager; - volatile SC_HANDLE scDriver; - HANDLE hhDriver; - OVERLAPPED ovl; - int errorcode; -}; - -static int rdmsr_supported(void); -static int extract_driver(struct msr_driver_t* driver); -static int load_driver(struct msr_driver_t* driver); - -struct msr_driver_t* cpu_msr_driver_open(void) -{ - struct msr_driver_t* drv; - int status; - if (!rdmsr_supported()) { - set_error(ERR_NO_RDMSR); - return NULL; - } - - drv = (struct msr_driver_t*) malloc(sizeof(struct msr_driver_t)); - if (!drv) { - set_error(ERR_NO_MEM); - return NULL; - } - memset(drv, 0, sizeof(struct msr_driver_t)); - - if (!extract_driver(drv)) { - free(drv); - set_error(ERR_EXTRACT); - return NULL; - } - - status = load_driver(drv); - if (!DeleteFile(drv->driver_path)) - debugf(1, "Deleting temporary driver file failed.\n"); - if (!status) { - set_error(drv->errorcode ? drv->errorcode : ERR_NO_DRIVER); - free(drv); - return NULL; - } - return drv; -} - -struct msr_driver_t* cpu_msr_driver_open_core(unsigned core_num) -{ - warnf("cpu_msr_driver_open_core(): parameter ignored (function is the same as cpu_msr_driver_open)\n"); - return cpu_msr_driver_open(); -} - -typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); -static BOOL is_running_x64(void) -{ - BOOL bIsWow64 = FALSE; - - LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(GetModuleHandle(__TEXT("kernel32")), "IsWow64Process"); - if(NULL != fnIsWow64Process) - fnIsWow64Process(GetCurrentProcess(), &bIsWow64); - return bIsWow64; -} - - -static int extract_driver(struct msr_driver_t* driver) -{ - FILE *f; - if (!GetTempPath(sizeof(driver->driver_path), driver->driver_path)) return 0; - strcat(driver->driver_path, "TmpRdr.sys"); - - f = fopen(driver->driver_path, "wb"); - if (!f) return 0; - if (is_running_x64()) - fwrite(cc_x64driver_code, 1, cc_x64driver_code_size, f); - else - fwrite(cc_x86driver_code, 1, cc_x86driver_code_size, f); - fclose(f); - return 1; -} - -static BOOL wait_for_service_state(SC_HANDLE hService, DWORD dwDesiredState, SERVICE_STATUS *lpsrvStatus){ - BOOL fOK = FALSE; - DWORD dwWaitHint; - - if(hService != NULL){ - while(TRUE){ - fOK = QueryServiceStatus(hService, lpsrvStatus); - if(!fOK) - break; - if(lpsrvStatus->dwCurrentState == dwDesiredState) - break; - - dwWaitHint = lpsrvStatus->dwWaitHint / 10; // Poll 1/10 of the wait hint - if (dwWaitHint < 1000) - dwWaitHint = 1000; // At most once per second - if (dwWaitHint > 10000) - dwWaitHint = 10000; // At least every 10 seconds - Sleep(dwWaitHint); - } - } - - return fOK; -} - -static int load_driver(struct msr_driver_t* drv) -{ - LPTSTR lpszInfo = __TEXT("RDMSR Executor Driver"); - USHORT uLen = 0; - SERVICE_STATUS srvStatus = {0}; - BOOL fRunning = FALSE; - DWORD dwLastError; - LPTSTR lpszDriverServiceName = __TEXT("TmpRdr"); - TCHAR lpszDriverName[] = __TEXT("\\\\.\\Global\\TmpRdr"); - - if((LPVOID)(drv->scManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS)) != NULL) { - drv->scDriver = CreateService(drv->scManager, lpszDriverServiceName, lpszInfo, SERVICE_ALL_ACCESS, - SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, - drv->driver_path, NULL, NULL, NULL, NULL, NULL); - if(drv->scDriver == NULL){ - switch(dwLastError = GetLastError()){ - case ERROR_SERVICE_EXISTS: - case ERROR_SERVICE_MARKED_FOR_DELETE:{ - LPQUERY_SERVICE_CONFIG lpqsc; - DWORD dwBytesNeeded; - - drv->scDriver = OpenService(drv->scManager, lpszDriverServiceName, SERVICE_ALL_ACCESS); - if(drv->scDriver == NULL){ - debugf(1, "Error opening service: %d\n", GetLastError()); - break; - } - - QueryServiceConfig(drv->scDriver, NULL, 0, &dwBytesNeeded); - if((dwLastError = GetLastError()) == ERROR_INSUFFICIENT_BUFFER){ - lpqsc = calloc(1, dwBytesNeeded); - if(!QueryServiceConfig(drv->scDriver, lpqsc, dwBytesNeeded, &dwBytesNeeded)){ - free(lpqsc); - debugf(1, "Error query service config(adjusted buffer): %d\n", GetLastError()); - goto clean_up; - } - else{ - free(lpqsc); - } - } - else{ - debugf(1, "Error query service config: %d\n", dwLastError); - goto clean_up; - } - - break; - } - case ERROR_ACCESS_DENIED: - drv->errorcode = ERR_NO_PERMS; - break; - default: - debugf(1, "Create driver service failed: %d\n", dwLastError); - break; - } - } - if(drv->scDriver != NULL){ - if(StartService(drv->scDriver, 0, NULL)){ - if(!wait_for_service_state(drv->scDriver, SERVICE_RUNNING, &srvStatus)){ - debugf(1, "Driver load failed.\n"); - DeleteService(drv->scDriver); - CloseServiceHandle(drv->scManager); - drv->scDriver = NULL; - goto clean_up; - } else { - fRunning = TRUE; - } - } else{ - if((dwLastError = GetLastError()) == ERROR_SERVICE_ALREADY_RUNNING) - fRunning = TRUE; - else{ - debugf(1, "Driver start failed.\n"); - DeleteService(drv->scDriver); - CloseServiceHandle(drv->scManager); - drv->scDriver = NULL; - goto clean_up; - } - - } - if(fRunning) - debugf(1, "Driver already running.\n"); - else - debugf(1, "Driver loaded.\n"); - CloseServiceHandle(drv->scManager); - drv->hhDriver = CreateFile(lpszDriverName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0); - drv->ovl.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); - return 1; - } - } else { - debugf(1, "Open SCM failed: %d\n", GetLastError()); - } - -clean_up: - if(drv->scManager != NULL){ - CloseServiceHandle(drv->scManager); - drv->scManager = 0; // pointless - } - if(drv->scDriver != NULL){ - if(!DeleteService(drv->scDriver)) - debugf(1, "Delete driver service failed: %d\n", GetLastError()); - CloseServiceHandle(drv->scDriver); - drv->scDriver = 0; - } - - return 0; -} - -#define FILE_DEVICE_UNKNOWN 0x00000022 -#define IOCTL_UNKNOWN_BASE FILE_DEVICE_UNKNOWN -#define IOCTL_PROCVIEW_RDMSR CTL_CODE(IOCTL_UNKNOWN_BASE, 0x0803, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) - -int cpu_rdmsr(struct msr_driver_t* driver, uint32_t msr_index, uint64_t* result) -{ - DWORD dwBytesReturned; - __int64 msrdata; - SERVICE_STATUS srvStatus = {0}; - - if (!driver) - return set_error(ERR_HANDLE); - DeviceIoControl(driver->hhDriver, IOCTL_PROCVIEW_RDMSR, &msr_index, sizeof(int), &msrdata, sizeof(__int64), &dwBytesReturned, &driver->ovl); - GetOverlappedResult(driver->hhDriver, &driver->ovl, &dwBytesReturned, TRUE); - *result = msrdata; - return 0; -} - -int cpu_msr_driver_close(struct msr_driver_t* drv) -{ - SERVICE_STATUS srvStatus = {0}; - if (drv == NULL) return 0; - if(drv->scDriver != NULL){ - if (drv->hhDriver) CancelIo(drv->hhDriver); - if(drv->ovl.hEvent != NULL) - CloseHandle(drv->ovl.hEvent); - if (drv->hhDriver) CloseHandle(drv->hhDriver); - drv->hhDriver = NULL; - drv->ovl.hEvent = NULL; - if (ControlService(drv->scDriver, SERVICE_CONTROL_STOP, &srvStatus)){ - if (wait_for_service_state(drv->scDriver, SERVICE_STOPPED, &srvStatus)){ - DeleteService(drv->scDriver); - } - } - } - return 0; -} - -/* endif defined (_WIN32) */ - -#else /* Unsupported OS */ -/* On others OS (i.e., Darwin), we still do not support RDMSR, so supply dummy struct - and functions */ - -#define RDMSR_UNSUPPORTED_OS - -struct msr_driver_t { int dummy; }; -struct msr_driver_t* cpu_msr_driver_open(void) -{ - set_error(ERR_NOT_IMP); - return NULL; -} - -struct msr_driver_t* cpu_msr_driver_open_core(unsigned core_num) -{ - set_error(ERR_NOT_IMP); - return NULL; -} - -int cpu_rdmsr(struct msr_driver_t* driver, uint32_t msr_index, uint64_t* result) -{ - return set_error(ERR_NOT_IMP); -} - -int cpu_msr_driver_close(struct msr_driver_t* driver) -{ - return set_error(ERR_NOT_IMP); -} - -int cpu_rdmsr_range(struct msr_driver_t* handle, uint32_t msr_index, uint8_t highbit, - uint8_t lowbit, uint64_t* result) -{ - return set_error(ERR_NOT_IMP); -} - -int cpu_msrinfo(struct msr_driver_t* driver, cpu_msrinfo_request_t which) -{ - return set_error(ERR_NOT_IMP); -} - -#endif /* Unsupported OS */ - -#ifndef RDMSR_UNSUPPORTED_OS - -/* Useful links for hackers: -- AMD MSRs: - AMD BIOS and Kernel Developer’s Guide (BKDG) - * AMD Family 10h Processors - http://support.amd.com/TechDocs/31116.pdf - * AMD Family 11h Processors - http://support.amd.com/TechDocs/41256.pdf - * AMD Family 12h Processors - http://support.amd.com/TechDocs/41131.pdf - * AMD Family 14h Processors - http://support.amd.com/TechDocs/43170_14h_Mod_00h-0Fh_BKDG.pdf - * AMD Family 15h Processors - http://support.amd.com/TechDocs/42301_15h_Mod_00h-0Fh_BKDG.pdf - http://support.amd.com/TechDocs/42300_15h_Mod_10h-1Fh_BKDG.pdf - http://support.amd.com/TechDocs/49125_15h_Models_30h-3Fh_BKDG.pdf - http://support.amd.com/TechDocs/50742_15h_Models_60h-6Fh_BKDG.pdf - http://support.amd.com/TechDocs/49125_15h_Models_30h-3Fh_BKDG.pdf - * AMD Family 16h Processors - http://support.amd.com/TechDocs/48751_16h_bkdg.pdf - http://support.amd.com/TechDocs/52740_16h_Models_30h-3Fh_BKDG.pdf - -- Intel MSRs: - Intel® 64 and IA-32 Architectures Software Developer’s Manual - * Volume 3 (3A, 3B, 3C & 3D): System Programming Guide - http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-system-programming-manual-325384.pdf -*/ - -/* AMD MSRs addresses */ -#define MSR_PSTATE_L 0xC0010061 -#define MSR_PSTATE_S 0xC0010063 -#define MSR_PSTATE_0 0xC0010064 -#define MSR_PSTATE_7 0xC001006B - -/* Intel MSRs addresses */ -#define IA32_MPERF 0xE7 -#define IA32_APERF 0xE8 -#define IA32_PERF_STATUS 0x198 -#define IA32_THERM_STATUS 0x19C -#define MSR_EBL_CR_POWERON 0x2A -#define MSR_TURBO_RATIO_LIMIT 0x1AD -#define MSR_TEMPERATURE_TARGET 0x1A2 -#define MSR_PERF_STATUS 0x198 -#define MSR_PLATFORM_INFO 0xCE - - -static int rdmsr_supported(void) -{ - struct cpu_id_t* id = get_cached_cpuid(); - return id->flags[CPU_FEATURE_MSR]; -} - -static int perfmsr_measure(struct msr_driver_t* handle, int msr) -{ - int err; - uint64_t a, b; - uint64_t x, y; - err = cpu_rdmsr(handle, msr, &x); - if (err) return CPU_INVALID_VALUE; - sys_precise_clock(&a); - busy_loop_delay(10); - cpu_rdmsr(handle, msr, &y); - sys_precise_clock(&b); - if (a >= b || x > y) return CPU_INVALID_VALUE; - return (int) ((y - x) / (b - a)); -} - -static int get_amd_multipliers(struct msr_driver_t* handle, struct cpu_id_t *id, - struct internal_id_info_t *internal, - uint32_t pstate, uint64_t *multiplier) -{ - int err; - static int clock = 0; - uint64_t CpuFid, CpuDid, CpuDidLSD; - double divisor; - - if (pstate < MSR_PSTATE_0 || MSR_PSTATE_7 < pstate) - return 1; - - switch (id->ext_family) { - case 0x11: - /* BKDG 11h, page 236 - MSRC001_00[6B:64][8:6] is CpuDid - MSRC001_00[6B:64][5:0] is CpuFid - CPU COF is ((100 MHz * (CpuFid + 08h)) / (2^CpuDid)) */ - err = cpu_rdmsr_range(handle, pstate, 8, 6, &CpuDid); - err += cpu_rdmsr_range(handle, pstate, 5, 0, &CpuFid); - *multiplier = (uint64_t) ((CpuFid + 0x8) / (1ull << CpuDid)); - break; - case 0x12: - /* BKDG 12h, page 469 - MSRC001_00[6B:64][8:4] is CpuFid - MSRC001_00[6B:64][3:0] is CpuDid - CPU COF is (100MHz * (CpuFid + 10h) / (divisor specified by CpuDid)) */ - err = cpu_rdmsr_range(handle, pstate, 8, 4, &CpuFid); - err += cpu_rdmsr_range(handle, pstate, 3, 0, &CpuDid); - if (CpuDid == 0x0) - divisor = 1; - else if (CpuDid == 0x1) - divisor = 1.5; - else if (CpuDid == 0x2) - divisor = 2; - else if (CpuDid == 0x3) - divisor = 3; - else if (CpuDid == 0x4) - divisor = 4; - else if (CpuDid == 0x5) - divisor = 6; - else if (CpuDid == 0x6) - divisor = 8; - else if (CpuDid == 0x7) - divisor = 12; - else if (CpuDid == 0x8) - divisor = 16; - else - divisor = 0; - - if (divisor > 0) - *multiplier = (uint64_t) ((CpuFid + 0x10) / divisor); - else - err++; - break; - case 0x14: - /* BKDG 14h, page 430 - MSRC001_00[6B:64][8:4] is CpuDidMSD - MSRC001_00[6B:64][3:0] is CpuDidLSD - PLL COF is (100 MHz * (D18F3xD4[MainPllOpFreqId] + 10h)) - Divisor is (CpuDidMSD + (CpuDidLSD * 0.25) + 1) - CPU COF is (main PLL frequency specified by D18F3xD4[MainPllOpFreqId]) / (core clock divisor specified by CpuDidMSD and CpuDidLSD) */ - err = cpu_rdmsr_range(handle, pstate, 8, 4, &CpuDid); - err += cpu_rdmsr_range(handle, pstate, 3, 0, &CpuDidLSD); - if (clock == 0) - clock = cpu_clock_measure(100, 1) + 5; // Fake round - *multiplier = (uint64_t) ((clock / 100 + 0x10) / (CpuDid + CpuDidLSD * 0.25 + 1)); - break; - case 0x10: - /* BKDG 10h, page 429 - MSRC001_00[6B:64][8:6] is CpuDid - MSRC001_00[6B:64][5:0] is CpuFid - CPU COF is (100 MHz * (CpuFid + 10h) / (2^CpuDid)) */ - case 0x15: - /* BKDG 15h, page 570/580/635/692 (00h-0Fh/10h-1Fh/30h-3Fh/60h-6Fh) - MSRC001_00[6B:64][8:6] is CpuDid - MSRC001_00[6B:64][5:0] is CpuFid - CoreCOF is (100 * (MSRC001_00[6B:64][CpuFid] + 10h) / (2^MSRC001_00[6B:64][CpuDid])) */ - case 0x16: - /* BKDG 16h, page 549/611 (00h-0Fh/30h-3Fh) - MSRC001_00[6B:64][8:6] is CpuDid - MSRC001_00[6B:64][5:0] is CpuFid - CoreCOF is (100 * (MSRC001_00[6B:64][CpuFid] + 10h) / (2^MSRC001_00[6B:64][CpuDid])) */ - err = cpu_rdmsr_range(handle, pstate, 8, 6, &CpuDid); - err += cpu_rdmsr_range(handle, pstate, 5, 0, &CpuFid); - *multiplier = (uint64_t) ((CpuFid + 0x10) / (1ull << CpuDid)); - break; - default: - err = 1; - break; - } - - return err; -} - -static double get_info_min_multiplier(struct msr_driver_t* handle, struct cpu_id_t *id, - struct internal_id_info_t *internal) -{ - int err; - uint64_t reg; - - if(id->vendor == VENDOR_INTEL) { - /* Refer links above - Table 35-12. MSRs in Next Generation Intel Atom Processors Based on the Goldmont Microarchitecture - Table 35-13. MSRs in Processors Based on Intel® Microarchitecture Code Name Nehalem - Table 35-18. MSRs Supported by Intel® Processors based on Intel® microarchitecture code name Sandy Bridge (Contd.) - Table 35-23. Additional MSRs Supported by 3rd Generation Intel® Coreâ„¢ Processors (based on Intel® microarchitecture code name Ivy Bridge) - Table 35-24. MSRs Supported by Intel® Xeon® Processors E5 v2 Product Family (based on Ivy Bridge-E microarchitecture) - Table 35-27. Additional MSRs Supported by Processors based on the Haswell or Haswell-E microarchitectures - Table 35-34. Additional MSRs Common to Intel® Xeon® Processor D and Intel Xeon Processors E5 v4 Family Based on the Broadwell Microarchitecture - Table 35-40. Selected MSRs Supported by Next Generation Intel® Xeon Phiâ„¢ Processors with DisplayFamily_DisplayModel Signature 06_57H - MSR_PLATFORM_INFO[47:40] is Maximum Efficiency Ratio - Maximum Efficiency Ratio is the minimum ratio that the processor can operates */ - err = cpu_rdmsr_range(handle, MSR_PLATFORM_INFO, 47, 40, ®); - if (!err) return (double) reg; - } - else if(id->vendor == VENDOR_AMD) { - /* Refer links above - MSRC001_0061[6:4] is PstateMaxVal - PstateMaxVal is the lowest-performance non-boosted P-state */ - err = cpu_rdmsr_range(handle, MSR_PSTATE_L, 6, 4, ®); - err += get_amd_multipliers(handle, id, internal, MSR_PSTATE_0 + (uint32_t) reg, ®); - if (!err) return (double) reg; - } - - return (double) CPU_INVALID_VALUE / 100; -} - -static double get_info_cur_multiplier(struct msr_driver_t* handle, struct cpu_id_t *id, - struct internal_id_info_t *internal) -{ - int err; - uint64_t reg; - - if(id->vendor == VENDOR_INTEL && internal->code.intel == PENTIUM) { - err = cpu_rdmsr(handle, MSR_EBL_CR_POWERON, ®); - if (!err) return (double) ((reg>>22) & 0x1f); - } - else if(id->vendor == VENDOR_INTEL && internal->code.intel != PENTIUM) { - /* Refer links above - Table 35-2. IA-32 Architectural MSRs (Contd.) - IA32_PERF_STATUS[15:0] is Current performance State Value - [7:0] is 0x0, [15:8] looks like current ratio */ - err = cpu_rdmsr_range(handle, IA32_PERF_STATUS, 15, 8, ®); - if (!err) return (double) reg; - } - else if(id->vendor == VENDOR_AMD) { - /* Refer links above - MSRC001_0063[2:0] is CurPstate */ - err = cpu_rdmsr_range(handle, MSR_PSTATE_S, 2, 0, ®); - err += get_amd_multipliers(handle, id, internal, MSR_PSTATE_0 + (uint32_t) reg, ®); - if (!err) return (double) reg; - } - - return (double) CPU_INVALID_VALUE / 100; -} - -static double get_info_max_multiplier(struct msr_driver_t* handle, struct cpu_id_t *id, - struct internal_id_info_t *internal) -{ - int err; - uint64_t reg; - - if(id->vendor == VENDOR_INTEL && internal->code.intel == PENTIUM) { - err = cpu_rdmsr(handle, IA32_PERF_STATUS, ®); - if (!err) return (double) ((reg >> 40) & 0x1f); - } - else if(id->vendor == VENDOR_INTEL && internal->code.intel != PENTIUM) { - /* Refer links above - Table 35-10. Specific MSRs Supported by Intel® Atomâ„¢ Processor C2000 Series with CPUID Signature 06_4DH - Table 35-12. MSRs in Next Generation Intel Atom Processors Based on the Goldmont Microarchitecture (Contd.) - Table 35-13. MSRs in Processors Based on Intel® Microarchitecture Code Name Nehalem (Contd.) - Table 35-14. Additional MSRs in Intel® Xeon® Processor 5500 and 3400 Series - Table 35-16. Additional MSRs Supported by Intel Processors (Based on Intel® Microarchitecture Code Name Westmere) - Table 35-19. MSRs Supported by 2nd Generation Intel® Coreâ„¢ Processors (Intel® microarchitecture code name Sandy Bridge) - Table 35-21. Selected MSRs Supported by Intel® Xeon® Processors E5 Family (based on Sandy Bridge microarchitecture) - Table 35-28. MSRs Supported by 4th Generation Intel® Coreâ„¢ Processors (Haswell microarchitecture) (Contd.) - Table 35-30. Additional MSRs Supported by Intel® Xeon® Processor E5 v3 Family - Table 35-33. Additional MSRs Supported by Intel® Coreâ„¢ M Processors and 5th Generation Intel® Coreâ„¢ Processors - Table 35-34. Additional MSRs Common to Intel® Xeon® Processor D and Intel Xeon Processors E5 v4 Family Based on the Broadwell Microarchitecture - Table 35-37. Additional MSRs Supported by 6th Generation Intel® Coreâ„¢ Processors Based on Skylake Microarchitecture - Table 35-40. Selected MSRs Supported by Next Generation Intel® Xeon Phiâ„¢ Processors with DisplayFamily_DisplayModel Signature 06_57H - MSR_TURBO_RATIO_LIMIT[7:0] is Maximum Ratio Limit for 1C */ - err = cpu_rdmsr_range(handle, MSR_TURBO_RATIO_LIMIT, 7, 0, ®); - if (!err) return (double) reg; - } - else if(id->vendor == VENDOR_AMD) { - /* Refer links above - MSRC001_0064 is Pb0 - Pb0 is the highest-performance boosted P-state */ - err = get_amd_multipliers(handle, id, internal, MSR_PSTATE_0, ®); - if (!err) return (double) reg; - } - - return (double) CPU_INVALID_VALUE / 100; -} - -static int get_info_temperature(struct msr_driver_t* handle, struct cpu_id_t *id, - struct internal_id_info_t *internal) -{ - int err; - uint64_t DigitalReadout, ReadingValid, TemperatureTarget; - - if(id->vendor == VENDOR_INTEL) { - /* Refer links above - Table 35-2. IA-32 Architectural MSRs - IA32_THERM_STATUS[22:16] is Digital Readout - IA32_THERM_STATUS[31] is Reading Valid - - Table 35-6. MSRs Common to the Silvermont Microarchitecture and Newer Microarchitectures for Intel® Atom - Table 35-13. MSRs in Processors Based on Intel® Microarchitecture Code Name Nehalem (Contd.) - Table 35-18. MSRs Supported by Intel® Processors based on Intel® microarchitecture code name Sandy Bridge (Contd.) - Table 35-24. MSRs Supported by Intel® Xeon® Processors E5 v2 Product Family (based on Ivy Bridge-E microarchitecture) (Contd.) - Table 35-34. Additional MSRs Common to Intel® Xeon® Processor D and Intel Xeon Processors E5 v4 Family Based on the Broadwell Microarchitecture - Table 35-40. Selected MSRs Supported by Next Generation Intel® Xeon Phiâ„¢ Processors with DisplayFamily_DisplayModel Signature 06_57H - MSR_TEMPERATURE_TARGET[23:16] is Temperature Target */ - err = cpu_rdmsr_range(handle, IA32_THERM_STATUS, 22, 16, &DigitalReadout); - err += cpu_rdmsr_range(handle, IA32_THERM_STATUS, 31, 31, &ReadingValid); - err += cpu_rdmsr_range(handle, MSR_TEMPERATURE_TARGET, 23, 16, &TemperatureTarget); - if(!err && ReadingValid) return (int) (TemperatureTarget - DigitalReadout); - } - - return CPU_INVALID_VALUE; -} - -static double get_info_voltage(struct msr_driver_t* handle, struct cpu_id_t *id, - struct internal_id_info_t *internal) -{ - int err; - uint64_t reg, CpuVid; - - if(id->vendor == VENDOR_INTEL) { - /* Refer links above - Table 35-18. MSRs Supported by Intel® Processors based on Intel® microarchitecture code name Sandy Bridge (Contd.) - MSR_PERF_STATUS[47:32] is Core Voltage - P-state core voltage can be computed by MSR_PERF_STATUS[37:32] * (float) 1/(2^13). */ - err = cpu_rdmsr_range(handle, MSR_PERF_STATUS, 47, 32, ®); - if (!err) return (double) reg / (1 << 13); - } - else if(id->vendor == VENDOR_AMD) { - /* Refer links above - MSRC001_00[6B:64][15:9] is CpuVid - MSRC001_0063[2:0] is P-state Status - 2.4.1.6.3 Serial VID (SVI) Encodings: voltage = 1.550V - 0.0125V * SviVid[6:0] */ - err = cpu_rdmsr_range(handle, MSR_PSTATE_S, 2, 0, ®); - err += cpu_rdmsr_range(handle, MSR_PSTATE_0 + (uint32_t) reg, 15, 9, &CpuVid); - if (!err && MSR_PSTATE_0 + (uint32_t) reg <= MSR_PSTATE_7) return 1.550 - 0.0125 * CpuVid; - } - - return (double) CPU_INVALID_VALUE / 100; -} - -static double get_info_bus_clock(struct msr_driver_t* handle, struct cpu_id_t *id, - struct internal_id_info_t *internal) -{ - int err; - static int clock = 0; - uint64_t reg; - - if(clock == 0) - clock = cpu_clock_measure(100, 1); - - if(id->vendor == VENDOR_INTEL) { - /* Refer links above - Table 35-12. MSRs in Next Generation Intel Atom Processors Based on the Goldmont Microarchitecture - Table 35-13. MSRs in Processors Based on Intel® Microarchitecture Code Name Nehalem - Table 35-18. MSRs Supported by Intel® Processors based on Intel® microarchitecture code name Sandy Bridge (Contd.) - Table 35-23. Additional MSRs Supported by 3rd Generation Intel® Coreâ„¢ Processors (based on Intel® microarchitecture code name Ivy Bridge) - Table 35-24. MSRs Supported by Intel® Xeon® Processors E5 v2 Product Family (based on Ivy Bridge-E microarchitecture) - Table 35-27. Additional MSRs Supported by Processors based on the Haswell or Haswell-E microarchitectures - Table 35-40. Selected MSRs Supported by Next Generation Intel® Xeon Phiâ„¢ Processors with DisplayFamily_DisplayModel Signature 06_57H - MSR_PLATFORM_INFO[15:8] is Maximum Non-Turbo Ratio */ - err = cpu_rdmsr_range(handle, MSR_PLATFORM_INFO, 15, 8, ®); - if (!err) return (double) clock / reg; - } - else if(id->vendor == VENDOR_AMD) { - /* Refer links above - MSRC001_0061[2:0] is CurPstateLimit - CurPstateLimit is the highest-performance non-boosted P-state */ - err = cpu_rdmsr_range(handle, MSR_PSTATE_L, 2, 0, ®); - err += get_amd_multipliers(handle, id, internal, MSR_PSTATE_0 + (uint32_t) reg, ®); - if (!err) return (double) clock / reg; - } - - return (double) CPU_INVALID_VALUE / 100; -} - -int cpu_rdmsr_range(struct msr_driver_t* handle, uint32_t msr_index, uint8_t highbit, - uint8_t lowbit, uint64_t* result) -{ - int err; - const uint8_t bits = highbit - lowbit + 1; - - if(highbit > 63 || lowbit > highbit) - return set_error(ERR_INVRANGE); - - err = cpu_rdmsr(handle, msr_index, result); - - if(!err && bits < 64) { - /* Show only part of register */ - *result >>= lowbit; - *result &= (1ULL << bits) - 1; - } - - return err; -} - -int cpu_msrinfo(struct msr_driver_t* handle, cpu_msrinfo_request_t which) -{ - struct cpu_raw_data_t raw; - static struct cpu_id_t id; - static struct internal_id_info_t internal; - internal.score = -1; - - if (handle == NULL) - return set_error(ERR_HANDLE); - - if (internal.score == -1) { - cpuid_get_raw_data(&raw); - cpu_ident_internal(&raw, &id, &internal); - } - - switch (which) { - case INFO_MPERF: - return perfmsr_measure(handle, IA32_MPERF); - case INFO_APERF: - return perfmsr_measure(handle, IA32_APERF); - case INFO_MIN_MULTIPLIER: - return (int) (get_info_min_multiplier(handle, &id, &internal) * 100); - case INFO_CUR_MULTIPLIER: - return (int) (get_info_cur_multiplier(handle, &id, &internal) * 100); - case INFO_MAX_MULTIPLIER: - return (int) (get_info_max_multiplier(handle, &id, &internal) * 100); - case INFO_TEMPERATURE: - return get_info_temperature(handle, &id, &internal); - case INFO_THROTTLING: - return CPU_INVALID_VALUE; - case INFO_VOLTAGE: - return (int) (get_info_voltage(handle, &id, &internal) * 100); - case INFO_BCLK: - case INFO_BUS_CLOCK: - return (int) (get_info_bus_clock(handle, &id, &internal) * 100); - default: - return CPU_INVALID_VALUE; - } -} - -#endif // RDMSR_UNSUPPORTED_OS diff --git a/contrib/libcpuid/include/libcpuid/rdtsc.c b/contrib/libcpuid/include/libcpuid/rdtsc.c deleted file mode 100644 index df4543946f51ad7427cd5c6e0c8cabb3e1b874de..0000000000000000000000000000000000000000 --- a/contrib/libcpuid/include/libcpuid/rdtsc.c +++ /dev/null @@ -1,320 +0,0 @@ -/* - * Copyright 2008 Veselin Georgiev, - * anrieffNOSPAM @ mgail_DOT.com (convert to gmail) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include -#include -#include "libcpuid.h" -#include "libcpuid_util.h" -#include "asm-bits.h" -#include "rdtsc.h" - -#ifdef _WIN32 -#include -void sys_precise_clock(uint64_t *result) -{ - double c, f; - LARGE_INTEGER freq, counter; - QueryPerformanceCounter(&counter); - QueryPerformanceFrequency(&freq); - c = (double) counter.QuadPart; - f = (double) freq.QuadPart; - *result = (uint64_t) ( c * 1000000.0 / f ); -} -#else -/* assuming Linux, Mac OS or other POSIX */ -#include -void sys_precise_clock(uint64_t *result) -{ - struct timeval tv; - gettimeofday(&tv, NULL); - *result = (uint64_t) tv.tv_sec * (uint64_t) 1000000 + - (uint64_t) tv.tv_usec; -} -#endif /* _WIN32 */ - -/* out = a - b */ -static void mark_t_subtract(struct cpu_mark_t* a, struct cpu_mark_t* b, struct cpu_mark_t *out) -{ - out->tsc = a->tsc - b->tsc; - out->sys_clock = a->sys_clock - b->sys_clock; -} - -void cpu_tsc_mark(struct cpu_mark_t* mark) -{ - cpu_rdtsc(&mark->tsc); - sys_precise_clock(&mark->sys_clock); -} - -void cpu_tsc_unmark(struct cpu_mark_t* mark) -{ - struct cpu_mark_t temp; - cpu_tsc_mark(&temp); - mark_t_subtract(&temp, mark, mark); -} - - -int cpu_clock_by_mark(struct cpu_mark_t* mark) -{ - uint64_t result; - - /* Check if some subtraction resulted in a negative number: */ - if ((mark->tsc >> 63) != 0 || (mark->sys_clock >> 63) != 0) return -1; - - /* Divide-by-zero check: */ - if (mark->sys_clock == 0) return -1; - - /* Check if the result fits in 32bits */ - result = mark->tsc / mark->sys_clock; - if (result > (uint64_t) 0x7fffffff) return -1; - return (int) result; -} - -#ifdef _WIN32 -int cpu_clock_by_os(void) -{ - HKEY key; - DWORD result; - DWORD size = 4; - - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"), 0, KEY_READ, &key) != ERROR_SUCCESS) - return -1; - - if (RegQueryValueEx(key, TEXT("~MHz"), NULL, NULL, (LPBYTE) &result, (LPDWORD) &size) != ERROR_SUCCESS) { - RegCloseKey(key); - return -1; - } - RegCloseKey(key); - - return (int)result; -} -#else -#ifdef __APPLE__ -#include -#include -/* Assuming Mac OS X with hw.cpufrequency sysctl */ -int cpu_clock_by_os(void) -{ - long long result = -1; - size_t size = sizeof(result); - if (sysctlbyname("hw.cpufrequency", &result, &size, NULL, 0)) - return -1; - return (int) (result / (long long) 1000000); -} -#else -/* Assuming Linux with /proc/cpuinfo */ -int cpu_clock_by_os(void) -{ - FILE *f; - char line[1024], *s; - int result; - - f = fopen("/proc/cpuinfo", "rt"); - if (!f) return -1; - - while (fgets(line, sizeof(line), f)) { - if (!strncmp(line, "cpu MHz", 7)) { - s = strchr(line, ':'); - if (s && 1 == sscanf(s, ":%d.", &result)) { - fclose(f); - return result; - } - } - } - fclose(f); - return -1; -} -#endif /* __APPLE__ */ -#endif /* _WIN32 */ - -/* Emulate doing useful CPU intensive work */ -static int busy_loop(int amount) -{ - int i, j, k, s = 0; - static volatile int data[42] = {32, 12, -1, 5, 23, 0 }; - for (i = 0; i < amount; i++) - for (j = 0; j < 65536; j++) - for (k = 0; k < 42; k++) - s += data[k]; - return s; -} - -int busy_loop_delay(int milliseconds) -{ - int cycles = 0, r = 0, first = 1; - uint64_t a, b, c; - sys_precise_clock(&a); - while (1) { - sys_precise_clock(&c); - if ((c - a) / 1000 > milliseconds) return r; - r += busy_loop(cycles); - if (first) { - first = 0; - } else { - if (c - b < 1000) cycles *= 2; - if (c - b > 10000) cycles /= 2; - } - b = c; - } -} - -int cpu_clock_measure(int millis, int quad_check) -{ - struct cpu_mark_t begin[4], end[4], temp, temp2; - int results[4], cycles, n, k, i, j, bi, bj, mdiff, diff, _zero = 0; - uint64_t tl; - - if (millis < 1) return -1; - tl = millis * (uint64_t) 1000; - if (quad_check) - tl /= 4; - n = quad_check ? 4 : 1; - cycles = 1; - for (k = 0; k < n; k++) { - cpu_tsc_mark(&begin[k]); - end[k] = begin[k]; - do { - /* Run busy loop, and fool the compiler that we USE the garbishy - value it calculates */ - _zero |= (1 & busy_loop(cycles)); - cpu_tsc_mark(&temp); - mark_t_subtract(&temp, &end[k], &temp2); - /* If busy loop is too short, increase it */ - if (temp2.sys_clock < tl / 8) - cycles *= 2; - end[k] = temp; - } while (end[k].sys_clock - begin[k].sys_clock < tl); - mark_t_subtract(&end[k], &begin[k], &temp); - results[k] = cpu_clock_by_mark(&temp); - } - if (n == 1) return results[0]; - mdiff = 0x7fffffff; - bi = bj = -1; - for (i = 0; i < 4; i++) { - for (j = i + 1; j < 4; j++) { - diff = results[i] - results[j]; - if (diff < 0) diff = -diff; - if (diff < mdiff) { - mdiff = diff; - bi = i; - bj = j; - } - } - } - if (results[bi] == -1) return -1; - return (results[bi] + results[bj] + _zero) / 2; -} - - -static void adjust_march_ic_multiplier(const struct cpu_id_t* id, int* numerator, int* denom) -{ - /* - * for cpu_clock_by_ic: we need to know how many clocks does a typical ADDPS instruction - * take, when issued in rapid succesion without dependencies. The whole idea of - * cpu_clock_by_ic was that this is easy to determine, at least it was back in 2010. Now - * it's getting progressively more hairy, but here are the current measurements: - * - * 1. For CPUs with 64-bit SSE units, ADDPS issue rate is 0.5 IPC (one insn in 2 clocks) - * 2. For CPUs with 128-bit SSE units, issue rate is exactly 1.0 IPC - * 3. For Bulldozer and later, it is 1.4 IPC (we multiply by 5/7) - * 4. For Skylake and later, it is 1.6 IPC (we multiply by 5/8) - */ - // - if (id->sse_size < 128) { - debugf(1, "SSE execution path is 64-bit\n"); - // on a CPU with half SSE unit length, SSE instructions execute at 0.5 IPC; - // the resulting value must be multiplied by 2: - *numerator = 2; - } else { - debugf(1, "SSE execution path is 128-bit\n"); - } - // - // Bulldozer or later: assume 1.4 IPC - if (id->vendor == VENDOR_AMD && id->ext_family >= 21) { - debugf(1, "cpu_clock_by_ic: Bulldozer (or later) detected, dividing result by 1.4\n"); - *numerator = 5; - *denom = 7; // multiply by 5/7, to divide by 1.4 - } - // - // Skylake or later: assume 1.6 IPC - if (id->vendor == VENDOR_INTEL && id->ext_model >= 94) { - debugf(1, "cpu_clock_by_ic: Skylake (or later) detected, dividing result by 1.6\n"); - *numerator = 5; - *denom = 8; // to divide by 1.6, multiply by 5/8 - } -} - -int cpu_clock_by_ic(int millis, int runs) -{ - int max_value = 0, cur_value, i, ri, cycles_inner, cycles_outer, c; - struct cpu_id_t* id; - uint64_t t0, t1, tl, hz; - int multiplier_numerator = 1, multiplier_denom = 1; - if (millis <= 0 || runs <= 0) return -2; - id = get_cached_cpuid(); - // if there aren't SSE instructions - we can't run the test at all - if (!id || !id->flags[CPU_FEATURE_SSE]) return -1; - // - adjust_march_ic_multiplier(id, &multiplier_numerator, &multiplier_denom); - // - tl = millis * 125; // (*1000 / 8) - cycles_inner = 128; - cycles_outer = 1; - do { - if (cycles_inner < 1000000000) cycles_inner *= 2; - else cycles_outer *= 2; - sys_precise_clock(&t0); - for (i = 0; i < cycles_outer; i++) - busy_sse_loop(cycles_inner); - sys_precise_clock(&t1); - } while (t1 - t0 < tl); - debugf(2, "inner: %d, outer: %d\n", cycles_inner, cycles_outer); - for (ri = 0; ri < runs; ri++) { - sys_precise_clock(&t0); - c = 0; - do { - c++; - for (i = 0; i < cycles_outer; i++) - busy_sse_loop(cycles_inner); - sys_precise_clock(&t1); - } while (t1 - t0 < tl * (uint64_t) 8); - // cpu_Hz = cycles_inner * cycles_outer * 256 / (t1 - t0) * 1000000 - debugf(2, "c = %d, td = %d\n", c, (int) (t1 - t0)); - hz = ((uint64_t) cycles_inner * (uint64_t) 256 + 12) * - (uint64_t) cycles_outer * (uint64_t) multiplier_numerator * (uint64_t) c * (uint64_t) 1000000 - / ((t1 - t0) * (uint64_t) multiplier_denom); - cur_value = (int) (hz / 1000000); - if (cur_value > max_value) max_value = cur_value; - } - return max_value; -} - -int cpu_clock(void) -{ - int result; - result = cpu_clock_by_os(); - if (result <= 0) - result = cpu_clock_measure(200, 1); - return result; -} diff --git a/contrib/libcpuid/include/libcpuid/rdtsc.h b/contrib/libcpuid/include/libcpuid/rdtsc.h deleted file mode 100644 index b4aaf99a570a8885fbd6533b1873a37c7b897c74..0000000000000000000000000000000000000000 --- a/contrib/libcpuid/include/libcpuid/rdtsc.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2010 Veselin Georgiev, - * anrieffNOSPAM @ mgail_DOT.com (convert to gmail) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __RDTSC_H__ -#define __RDTSC_H__ - -void sys_precise_clock(uint64_t *result); -int busy_loop_delay(int milliseconds); - - -#endif /* __RDTSC_H__ */ diff --git a/contrib/libcpuid/include/libcpuid/recog_amd.c b/contrib/libcpuid/include/libcpuid/recog_amd.c deleted file mode 100644 index 2e6c8a9ead8a521ad5a8668f2facfcdcc3a797ee..0000000000000000000000000000000000000000 --- a/contrib/libcpuid/include/libcpuid/recog_amd.c +++ /dev/null @@ -1,486 +0,0 @@ -/* - * Copyright 2008 Veselin Georgiev, - * anrieffNOSPAM @ mgail_DOT.com (convert to gmail) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include -#include -#include "libcpuid.h" -#include "libcpuid_util.h" -#include "libcpuid_internal.h" -#include "recog_amd.h" - -const struct amd_code_str { amd_code_t code; char *str; } amd_code_str[] = { - #define CODE(x) { x, #x } - #define CODE2(x, y) CODE(x) - #include "amd_code_t.h" - #undef CODE -}; - -const struct match_entry_t cpudb_amd[] = { - { -1, -1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown AMD CPU" }, - - /* 486 and the likes */ - { 4, -1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown AMD 486" }, - { 4, 3, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "AMD 486DX2" }, - { 4, 7, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "AMD 486DX2WB" }, - { 4, 8, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "AMD 486DX4" }, - { 4, 9, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "AMD 486DX4WB" }, - - /* Pentia clones */ - { 5, -1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown AMD 586" }, - { 5, 0, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "K5" }, - { 5, 1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "K5" }, - { 5, 2, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "K5" }, - { 5, 3, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "K5" }, - - /* The K6 */ - { 5, 6, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "K6" }, - { 5, 7, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "K6" }, - - { 5, 8, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "K6-2" }, - { 5, 9, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "K6-III" }, - { 5, 10, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown K6" }, - { 5, 11, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown K6" }, - { 5, 12, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown K6" }, - { 5, 13, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "K6-2+" }, - - /* Athlon et al. */ - { 6, 1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Athlon (Slot-A)" }, - { 6, 2, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Athlon (Slot-A)" }, - { 6, 3, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Duron (Spitfire)" }, - { 6, 4, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Athlon (ThunderBird)" }, - - { 6, 6, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown Athlon" }, - { 6, 6, -1, -1, -1, 1, -1, -1, ATHLON , 0, "Athlon (Palomino)" }, - { 6, 6, -1, -1, -1, 1, -1, -1, ATHLON_MP , 0, "Athlon MP (Palomino)" }, - { 6, 6, -1, -1, -1, 1, -1, -1, DURON , 0, "Duron (Palomino)" }, - { 6, 6, -1, -1, -1, 1, -1, -1, ATHLON_XP , 0, "Athlon XP" }, - - { 6, 7, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown Athlon XP" }, - { 6, 7, -1, -1, -1, 1, -1, -1, DURON , 0, "Duron (Morgan)" }, - - { 6, 8, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Athlon XP" }, - { 6, 8, -1, -1, -1, 1, -1, -1, ATHLON , 0, "Athlon XP (Thoroughbred)" }, - { 6, 8, -1, -1, -1, 1, -1, -1, ATHLON_XP , 0, "Athlon XP (Thoroughbred)" }, - { 6, 8, -1, -1, -1, 1, -1, -1, DURON , 0, "Duron (Applebred)" }, - { 6, 8, -1, -1, -1, 1, -1, -1, SEMPRON , 0, "Sempron (Thoroughbred)" }, - { 6, 8, -1, -1, -1, 1, 128, -1, SEMPRON , 0, "Sempron (Thoroughbred)" }, - { 6, 8, -1, -1, -1, 1, 256, -1, SEMPRON , 0, "Sempron (Thoroughbred)" }, - { 6, 8, -1, -1, -1, 1, -1, -1, ATHLON_MP , 0, "Athlon MP (Thoroughbred)" }, - { 6, 8, -1, -1, -1, 1, -1, -1, ATHLON_XP_M , 0, "Mobile Athlon (T-Bred)" }, - { 6, 8, -1, -1, -1, 1, -1, -1, ATHLON_XP_M_LV , 0, "Mobile Athlon (T-Bred)" }, - - { 6, 10, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Athlon XP (Barton)" }, - { 6, 10, -1, -1, -1, 1, 512, -1, ATHLON_XP , 0, "Athlon XP (Barton)" }, - { 6, 10, -1, -1, -1, 1, 512, -1, SEMPRON , 0, "Sempron (Barton)" }, - { 6, 10, -1, -1, -1, 1, 256, -1, SEMPRON , 0, "Sempron (Thorton)" }, - { 6, 10, -1, -1, -1, 1, 256, -1, ATHLON_XP , 0, "Athlon XP (Thorton)" }, - { 6, 10, -1, -1, -1, 1, -1, -1, ATHLON_MP , 0, "Athlon MP (Barton)" }, - { 6, 10, -1, -1, -1, 1, -1, -1, ATHLON_XP_M , 0, "Mobile Athlon (Barton)" }, - { 6, 10, -1, -1, -1, 1, -1, -1, ATHLON_XP_M_LV , 0, "Mobile Athlon (Barton)" }, - - /* K8 Architecture */ - { 15, -1, -1, 15, -1, 1, -1, -1, NO_CODE , 0, "Unknown K8" }, - { 15, -1, -1, 16, -1, 1, -1, -1, NO_CODE , 0, "Unknown K9" }, - - { 15, -1, -1, 15, -1, 1, -1, -1, NO_CODE , 0, "Unknown A64" }, - { 15, -1, -1, 15, -1, 1, -1, -1, OPTERON_SINGLE , 0, "Opteron" }, - { 15, -1, -1, 15, -1, 2, -1, -1, OPTERON_DUALCORE , 0, "Opteron (Dual Core)" }, - { 15, 3, -1, 15, -1, 1, -1, -1, OPTERON_SINGLE , 0, "Opteron" }, - { 15, 3, -1, 15, -1, 2, -1, -1, OPTERON_DUALCORE , 0, "Opteron (Dual Core)" }, - { 15, -1, -1, 15, -1, 1, 512, -1, ATHLON_64 , 0, "Athlon 64 (512K)" }, - { 15, -1, -1, 15, -1, 1, 1024, -1, ATHLON_64 , 0, "Athlon 64 (1024K)" }, - { 15, -1, -1, 15, -1, 1, -1, -1, ATHLON_FX , 0, "Athlon FX" }, - { 15, -1, -1, 15, -1, 1, -1, -1, ATHLON_64_FX , 0, "Athlon 64 FX" }, - { 15, 3, -1, 15, 35, 2, -1, -1, ATHLON_64_FX , 0, "Athlon 64 FX X2 (Toledo)" }, - { 15, -1, -1, 15, -1, 2, 512, -1, ATHLON_64_X2 , 0, "Athlon 64 X2 (512K)" }, - { 15, -1, -1, 15, -1, 2, 1024, -1, ATHLON_64_X2 , 0, "Athlon 64 X2 (1024K)" }, - { 15, -1, -1, 15, -1, 1, 512, -1, TURION_64 , 0, "Turion 64 (512K)" }, - { 15, -1, -1, 15, -1, 1, 1024, -1, TURION_64 , 0, "Turion 64 (1024K)" }, - { 15, -1, -1, 15, -1, 2, 512, -1, TURION_X2 , 0, "Turion 64 X2 (512K)" }, - { 15, -1, -1, 15, -1, 2, 1024, -1, TURION_X2 , 0, "Turion 64 X2 (1024K)" }, - { 15, -1, -1, 15, -1, 1, 128, -1, SEMPRON , 0, "A64 Sempron (128K)" }, - { 15, -1, -1, 15, -1, 1, 256, -1, SEMPRON , 0, "A64 Sempron (256K)" }, - { 15, -1, -1, 15, -1, 1, 512, -1, SEMPRON , 0, "A64 Sempron (512K)" }, - { 15, -1, -1, 15, 0x4f, 1, 512, -1, ATHLON_64 , 0, "Athlon 64 (Orleans/512K)" }, - { 15, -1, -1, 15, 0x5f, 1, 512, -1, ATHLON_64 , 0, "Athlon 64 (Orleans/512K)" }, - { 15, -1, -1, 15, 0x2f, 1, 512, -1, ATHLON_64 , 0, "Athlon 64 (Venice/512K)" }, - { 15, -1, -1, 15, 0x2c, 1, 512, -1, ATHLON_64 , 0, "Athlon 64 (Venice/512K)" }, - { 15, -1, -1, 15, 0x1f, 1, 512, -1, ATHLON_64 , 0, "Athlon 64 (Winchester/512K)" }, - { 15, -1, -1, 15, 0x0c, 1, 512, -1, ATHLON_64 , 0, "Athlon 64 (Newcastle/512K)" }, - { 15, -1, -1, 15, 0x27, 1, 512, -1, ATHLON_64 , 0, "Athlon 64 (San Diego/512K)" }, - { 15, -1, -1, 15, 0x37, 1, 512, -1, ATHLON_64 , 0, "Athlon 64 (San Diego/512K)" }, - { 15, -1, -1, 15, 0x04, 1, 512, -1, ATHLON_64 , 0, "Athlon 64 (ClawHammer/512K)" }, - - { 15, -1, -1, 15, 0x5f, 1, 1024, -1, ATHLON_64 , 0, "Athlon 64 (Orleans/1024K)" }, - { 15, -1, -1, 15, 0x27, 1, 1024, -1, ATHLON_64 , 0, "Athlon 64 (San Diego/1024K)" }, - { 15, -1, -1, 15, 0x04, 1, 1024, -1, ATHLON_64 , 0, "Athlon 64 (ClawHammer/1024K)" }, - - { 15, -1, -1, 15, 0x4b, 2, 256, -1, SEMPRON_DUALCORE , 0, "Athlon 64 X2 (Windsor/256K)" }, - - { 15, -1, -1, 15, 0x23, 2, 512, -1, ATHLON_64_X2 , 0, "Athlon 64 X2 (Toledo/512K)" }, - { 15, -1, -1, 15, 0x4b, 2, 512, -1, ATHLON_64_X2 , 0, "Athlon 64 X2 (Windsor/512K)" }, - { 15, -1, -1, 15, 0x43, 2, 512, -1, ATHLON_64_X2 , 0, "Athlon 64 X2 (Windsor/512K)" }, - { 15, -1, -1, 15, 0x6b, 2, 512, -1, ATHLON_64_X2 , 0, "Athlon 64 X2 (Brisbane/512K)" }, - { 15, -1, -1, 15, 0x2b, 2, 512, -1, ATHLON_64_X2 , 0, "Athlon 64 X2 (Manchester/512K)"}, - - { 15, -1, -1, 15, 0x23, 2, 1024, -1, ATHLON_64_X2 , 0, "Athlon 64 X2 (Toledo/1024K)" }, - { 15, -1, -1, 15, 0x43, 2, 1024, -1, ATHLON_64_X2 , 0, "Athlon 64 X2 (Windsor/1024K)" }, - - { 15, -1, -1, 15, 0x08, 1, 128, -1, M_SEMPRON , 0, "Mobile Sempron 64 (Dublin/128K)"}, - { 15, -1, -1, 15, 0x08, 1, 256, -1, M_SEMPRON , 0, "Mobile Sempron 64 (Dublin/256K)"}, - { 15, -1, -1, 15, 0x0c, 1, 256, -1, SEMPRON , 0, "Sempron 64 (Paris)" }, - { 15, -1, -1, 15, 0x1c, 1, 128, -1, SEMPRON , 0, "Sempron 64 (Palermo/128K)" }, - { 15, -1, -1, 15, 0x1c, 1, 256, -1, SEMPRON , 0, "Sempron 64 (Palermo/256K)" }, - { 15, -1, -1, 15, 0x1c, 1, 128, -1, M_SEMPRON , 0, "Mobile Sempron 64 (Sonora/128K)"}, - { 15, -1, -1, 15, 0x1c, 1, 256, -1, M_SEMPRON , 0, "Mobile Sempron 64 (Sonora/256K)"}, - { 15, -1, -1, 15, 0x2c, 1, 128, -1, SEMPRON , 0, "Sempron 64 (Palermo/128K)" }, - { 15, -1, -1, 15, 0x2c, 1, 256, -1, SEMPRON , 0, "Sempron 64 (Palermo/256K)" }, - { 15, -1, -1, 15, 0x2c, 1, 128, -1, M_SEMPRON , 0, "Mobile Sempron 64 (Albany/128K)"}, - { 15, -1, -1, 15, 0x2c, 1, 256, -1, M_SEMPRON , 0, "Mobile Sempron 64 (Albany/256K)"}, - { 15, -1, -1, 15, 0x2f, 1, 128, -1, SEMPRON , 0, "Sempron 64 (Palermo/128K)" }, - { 15, -1, -1, 15, 0x2f, 1, 256, -1, SEMPRON , 0, "Sempron 64 (Palermo/256K)" }, - { 15, -1, -1, 15, 0x4f, 1, 128, -1, SEMPRON , 0, "Sempron 64 (Manila/128K)" }, - { 15, -1, -1, 15, 0x4f, 1, 256, -1, SEMPRON , 0, "Sempron 64 (Manila/256K)" }, - { 15, -1, -1, 15, 0x5f, 1, 128, -1, SEMPRON , 0, "Sempron 64 (Manila/128K)" }, - { 15, -1, -1, 15, 0x5f, 1, 256, -1, SEMPRON , 0, "Sempron 64 (Manila/256K)" }, - { 15, -1, -1, 15, 0x6b, 2, 256, -1, SEMPRON , 0, "Sempron 64 Dual (Sherman/256K)"}, - { 15, -1, -1, 15, 0x6b, 2, 512, -1, SEMPRON , 0, "Sempron 64 Dual (Sherman/512K)"}, - { 15, -1, -1, 15, 0x7f, 1, 256, -1, SEMPRON , 0, "Sempron 64 (Sparta/256K)" }, - { 15, -1, -1, 15, 0x7f, 1, 512, -1, SEMPRON , 0, "Sempron 64 (Sparta/512K)" }, - { 15, -1, -1, 15, 0x4c, 1, 256, -1, M_SEMPRON , 0, "Mobile Sempron 64 (Keene/256K)"}, - { 15, -1, -1, 15, 0x4c, 1, 512, -1, M_SEMPRON , 0, "Mobile Sempron 64 (Keene/512K)"}, - { 15, -1, -1, 15, -1, 2, -1, -1, SEMPRON_DUALCORE , 0, "Sempron Dual Core" }, - - { 15, -1, -1, 15, 0x24, 1, 512, -1, TURION_64 , 0, "Turion 64 (Lancaster/512K)" }, - { 15, -1, -1, 15, 0x24, 1, 1024, -1, TURION_64 , 0, "Turion 64 (Lancaster/1024K)" }, - { 15, -1, -1, 15, 0x48, 2, 256, -1, TURION_X2 , 0, "Turion X2 (Taylor)" }, - { 15, -1, -1, 15, 0x48, 2, 512, -1, TURION_X2 , 0, "Turion X2 (Trinidad)" }, - { 15, -1, -1, 15, 0x4c, 1, 512, -1, TURION_64 , 0, "Turion 64 (Richmond)" }, - { 15, -1, -1, 15, 0x68, 2, 256, -1, TURION_X2 , 0, "Turion X2 (Tyler/256K)" }, - { 15, -1, -1, 15, 0x68, 2, 512, -1, TURION_X2 , 0, "Turion X2 (Tyler/512K)" }, - { 15, -1, -1, 17, 3, 2, 512, -1, TURION_X2 , 0, "Turion X2 (Griffin/512K)" }, - { 15, -1, -1, 17, 3, 2, 1024, -1, TURION_X2 , 0, "Turion X2 (Griffin/1024K)" }, - - /* K9 Architecture */ - { 15, -1, -1, 16, -1, 1, -1, -1, PHENOM , 0, "Unknown AMD Phenom" }, - { 15, 2, -1, 16, -1, 1, -1, -1, PHENOM , 0, "Phenom" }, - { 15, 2, -1, 16, -1, 3, -1, -1, PHENOM , 0, "Phenom X3 (Toliman)" }, - { 15, 2, -1, 16, -1, 4, -1, -1, PHENOM , 0, "Phenom X4 (Agena)" }, - { 15, 2, -1, 16, -1, 3, 512, -1, PHENOM , 0, "Phenom X3 (Toliman/256K)" }, - { 15, 2, -1, 16, -1, 3, 512, -1, PHENOM , 0, "Phenom X3 (Toliman/512K)" }, - { 15, 2, -1, 16, -1, 4, 128, -1, PHENOM , 0, "Phenom X4 (Agena/128K)" }, - { 15, 2, -1, 16, -1, 4, 256, -1, PHENOM , 0, "Phenom X4 (Agena/256K)" }, - { 15, 2, -1, 16, -1, 4, 512, -1, PHENOM , 0, "Phenom X4 (Agena/512K)" }, - { 15, 2, -1, 16, -1, 2, 512, -1, ATHLON_64_X2 , 0, "Athlon X2 (Kuma)" }, - /* Phenom II derivates: */ - { 15, 4, -1, 16, -1, 4, -1, -1, NO_CODE , 0, "Phenom (Deneb-based)" }, - { 15, 4, -1, 16, -1, 1, 1024, -1, SEMPRON , 0, "Sempron (Sargas)" }, - { 15, 4, -1, 16, -1, 2, 512, -1, PHENOM2 , 0, "Phenom II X2 (Callisto)" }, - { 15, 4, -1, 16, -1, 3, 512, -1, PHENOM2 , 0, "Phenom II X3 (Heka)" }, - { 15, 4, -1, 16, -1, 4, 512, -1, PHENOM2 , 0, "Phenom II X4" }, - { 15, 4, -1, 16, 4, 4, 512, -1, PHENOM2 , 0, "Phenom II X4 (Deneb)" }, - { 15, 5, -1, 16, 5, 4, 512, -1, PHENOM2 , 0, "Phenom II X4 (Deneb)" }, - { 15, 4, -1, 16, 10, 4, 512, -1, PHENOM2 , 0, "Phenom II X4 (Zosma)" }, - { 15, 4, -1, 16, 10, 6, 512, -1, PHENOM2 , 0, "Phenom II X6 (Thuban)" }, - - { 15, 6, -1, 16, 6, 2, 512, -1, ATHLON , 0, "Athlon II (Champlain)" }, - { 15, 6, -1, 16, 6, 2, 512, -1, ATHLON_64_X2 , 0, "Athlon II X2 (Regor)" }, - { 15, 6, -1, 16, 6, 2, 1024, -1, ATHLON_64_X2 , 0, "Athlon II X2 (Regor)" }, - { 15, 5, -1, 16, 5, 3, 512, -1, ATHLON_64_X3 , 0, "Athlon II X3 (Rana)" }, - { 15, 5, -1, 16, 5, 4, 512, -1, ATHLON_64_X4 , 0, "Athlon II X4 (Propus)" }, - - /* 2011 CPUs: K10 architecture: Llano */ - { 15, 1, -1, 18, 1, 2, 512, -1, FUSION_EA , 0, "Llano X2" }, - { 15, 1, -1, 18, 1, 2, 1024, -1, FUSION_EA , 0, "Llano X2" }, - { 15, 1, -1, 18, 1, 3, 1024, -1, FUSION_EA , 0, "Llano X3" }, - { 15, 1, -1, 18, 1, 4, 1024, -1, FUSION_EA , 0, "Llano X4" }, - /* 2011 CPUs: Bobcat architecture: Ontario, Zacate, Desna, Hondo */ - { 15, 2, -1, 20, -1, 1, 512, -1, FUSION_C , 0, "Brazos Ontario" }, - { 15, 2, -1, 20, -1, 2, 512, -1, FUSION_C , 0, "Brazos Ontario (Dual-core)" }, - { 15, 1, -1, 20, -1, 1, 512, -1, FUSION_E , 0, "Brazos Zacate" }, - { 15, 1, -1, 20, -1, 2, 512, -1, FUSION_E , 0, "Brazos Zacate (Dual-core)" }, - { 15, 2, -1, 20, -1, 2, 512, -1, FUSION_Z , 0, "Brazos Desna (Dual-core)" }, - /* 2012 CPUs: Piledriver architecture: Trinity and Richland */ - { 15, 0, -1, 21, 10, 2, 1024, -1, FUSION_A , 0, "Trinity X2" }, - { 15, 0, -1, 21, 16, 2, 1024, -1, FUSION_A , 0, "Trinity X2" }, - { 15, 0, -1, 21, 10, 4, 1024, -1, FUSION_A , 0, "Trinity X4" }, - { 15, 0, -1, 21, 16, 4, 1024, -1, FUSION_A , 0, "Trinity X4" }, - { 15, 3, -1, 21, 13, 2, 1024, -1, FUSION_A , 0, "Richland X2" }, - { 15, 3, -1, 21, 13, 4, 1024, -1, FUSION_A , 0, "Richland X4" }, - /* 2013 CPUs: Jaguar architecture: Kabini and Temash */ - { 15, 0, -1, 22, 0, 2, 1024, -1, FUSION_A , 0, "Kabini X2" }, - { 15, 0, -1, 22, 0, 4, 1024, -1, FUSION_A , 0, "Kabini X4" }, - /* 2014 CPUs: Steamroller architecture: Kaveri */ - { 15, 0, -1, 21, 30, 2, 1024, -1, FUSION_A , 0, "Kaveri X2" }, - { 15, 0, -1, 21, 30, 4, 1024, -1, FUSION_A , 0, "Kaveri X4" }, - /* 2014 CPUs: Puma architecture: Beema and Mullins */ - { 15, 0, -1, 22, 30, 2, 1024, -1, FUSION_E , 0, "Mullins X2" }, - { 15, 0, -1, 22, 30, 4, 1024, -1, FUSION_A , 0, "Mullins X4" }, - /* 2015 CPUs: Excavator architecture: Carrizo */ - { 15, 1, -1, 21, 60, 2, 1024, -1, FUSION_A , 0, "Carrizo X2" }, - { 15, 1, -1, 21, 60, 4, 1024, -1, FUSION_A , 0, "Carrizo X4" }, - /* 2015 CPUs: Steamroller architecture: Godavari */ - //TODO - /* 2016 CPUs: Excavator architecture: Bristol Ridge */ - //TODO - - /* Newer Opterons: */ - { 15, 9, -1, 22, 9, 8, -1, -1, OPTERON_GENERIC , 0, "Magny-Cours Opteron" }, - - /* Bulldozer CPUs: */ - { 15, -1, -1, 21, 0, 4, 2048, -1, NO_CODE , 0, "Bulldozer X2" }, - { 15, -1, -1, 21, 1, 4, 2048, -1, NO_CODE , 0, "Bulldozer X2" }, - { 15, -1, -1, 21, 1, 6, 2048, -1, NO_CODE , 0, "Bulldozer X3" }, - { 15, -1, -1, 21, 1, 8, 2048, -1, NO_CODE , 0, "Bulldozer X4" }, - /* Piledriver CPUs: */ - { 15, -1, -1, 21, 2, 4, 2048, -1, NO_CODE , 0, "Vishera X2" }, - { 15, -1, -1, 21, 2, 6, 2048, -1, NO_CODE , 0, "Vishera X3" }, - { 15, -1, -1, 21, 2, 8, 2048, -1, NO_CODE , 0, "Vishera X4" }, - /* Steamroller CPUs: */ - //TODO - /* Excavator CPUs: */ - //TODO - /* Zen CPUs: */ - //TODO -}; - - -static void load_amd_features(struct cpu_raw_data_t* raw, struct cpu_id_t* data) -{ - const struct feature_map_t matchtable_edx81[] = { - { 20, CPU_FEATURE_NX }, - { 22, CPU_FEATURE_MMXEXT }, - { 25, CPU_FEATURE_FXSR_OPT }, - { 30, CPU_FEATURE_3DNOWEXT }, - { 31, CPU_FEATURE_3DNOW }, - }; - const struct feature_map_t matchtable_ecx81[] = { - { 1, CPU_FEATURE_CMP_LEGACY }, - { 2, CPU_FEATURE_SVM }, - { 5, CPU_FEATURE_ABM }, - { 6, CPU_FEATURE_SSE4A }, - { 7, CPU_FEATURE_MISALIGNSSE }, - { 8, CPU_FEATURE_3DNOWPREFETCH }, - { 9, CPU_FEATURE_OSVW }, - { 10, CPU_FEATURE_IBS }, - { 11, CPU_FEATURE_XOP }, - { 12, CPU_FEATURE_SKINIT }, - { 13, CPU_FEATURE_WDT }, - { 16, CPU_FEATURE_FMA4 }, - { 21, CPU_FEATURE_TBM }, - }; - const struct feature_map_t matchtable_edx87[] = { - { 0, CPU_FEATURE_TS }, - { 1, CPU_FEATURE_FID }, - { 2, CPU_FEATURE_VID }, - { 3, CPU_FEATURE_TTP }, - { 4, CPU_FEATURE_TM_AMD }, - { 5, CPU_FEATURE_STC }, - { 6, CPU_FEATURE_100MHZSTEPS }, - { 7, CPU_FEATURE_HWPSTATE }, - /* id 8 is handled in common */ - { 9, CPU_FEATURE_CPB }, - { 10, CPU_FEATURE_APERFMPERF }, - { 11, CPU_FEATURE_PFI }, - { 12, CPU_FEATURE_PA }, - }; - if (raw->ext_cpuid[0][0] >= 0x80000001) { - match_features(matchtable_edx81, COUNT_OF(matchtable_edx81), raw->ext_cpuid[1][3], data); - match_features(matchtable_ecx81, COUNT_OF(matchtable_ecx81), raw->ext_cpuid[1][2], data); - } - if (raw->ext_cpuid[0][0] >= 0x80000007) - match_features(matchtable_edx87, COUNT_OF(matchtable_edx87), raw->ext_cpuid[7][3], data); - if (raw->ext_cpuid[0][0] >= 0x8000001a) { - /* We have the extended info about SSE unit size */ - data->detection_hints[CPU_HINT_SSE_SIZE_AUTH] = 1; - data->sse_size = (raw->ext_cpuid[0x1a][0] & 1) ? 128 : 64; - } -} - -static void decode_amd_cache_info(struct cpu_raw_data_t* raw, struct cpu_id_t* data) -{ - int l3_result; - const int assoc_table[16] = { - 0, 1, 2, 0, 4, 0, 8, 0, 16, 0, 32, 48, 64, 96, 128, 255 - }; - unsigned n = raw->ext_cpuid[0][0]; - - if (n >= 0x80000005) { - data->l1_data_cache = (raw->ext_cpuid[5][2] >> 24) & 0xff; - data->l1_assoc = (raw->ext_cpuid[5][2] >> 16) & 0xff; - data->l1_cacheline = (raw->ext_cpuid[5][2]) & 0xff; - data->l1_instruction_cache = (raw->ext_cpuid[5][3] >> 24) & 0xff; - } - if (n >= 0x80000006) { - data->l2_cache = (raw->ext_cpuid[6][2] >> 16) & 0xffff; - data->l2_assoc = assoc_table[(raw->ext_cpuid[6][2] >> 12) & 0xf]; - data->l2_cacheline = (raw->ext_cpuid[6][2]) & 0xff; - - l3_result = (raw->ext_cpuid[6][3] >> 18); - if (l3_result > 0) { - l3_result = 512 * l3_result; /* AMD spec says it's a range, - but we take the lower bound */ - data->l3_cache = l3_result; - data->l3_assoc = assoc_table[(raw->ext_cpuid[6][3] >> 12) & 0xf]; - data->l3_cacheline = (raw->ext_cpuid[6][3]) & 0xff; - } else { - data->l3_cache = 0; - } - } -} - -static void decode_amd_number_of_cores(struct cpu_raw_data_t* raw, struct cpu_id_t* data) -{ - int logical_cpus = -1, num_cores = -1; - - if (raw->basic_cpuid[0][0] >= 1) { - logical_cpus = (raw->basic_cpuid[1][1] >> 16) & 0xff; - if (raw->ext_cpuid[0][0] >= 8) { - num_cores = 1 + (raw->ext_cpuid[8][2] & 0xff); - } - } - if (data->flags[CPU_FEATURE_HT]) { - if (num_cores > 1) { - data->num_cores = num_cores; - data->num_logical_cpus = logical_cpus; - } else { - data->num_cores = 1; - data->num_logical_cpus = (logical_cpus >= 2 ? logical_cpus : 2); - } - } else { - data->num_cores = data->num_logical_cpus = 1; - } -} - -static int amd_has_turion_modelname(const char *bs) -{ - /* We search for something like TL-60. Ahh, I miss regexes...*/ - int i, l, k; - char code[3] = {0}; - const char* codes[] = { "ML", "MT", "MK", "TK", "TL", "RM", "ZM", "" }; - l = (int) strlen(bs); - for (i = 3; i < l - 2; i++) { - if (bs[i] == '-' && - isupper(bs[i-1]) && isupper(bs[i-2]) && !isupper(bs[i-3]) && - isdigit(bs[i+1]) && isdigit(bs[i+2]) && !isdigit(bs[i+3])) - { - code[0] = bs[i-2]; - code[1] = bs[i-1]; - for (k = 0; codes[k][0]; k++) - if (!strcmp(codes[k], code)) return 1; - } - } - return 0; -} - -static amd_code_t decode_amd_codename_part1(const char *bs) -{ - int is_dual = 0, is_quad = 0, is_tri = 0; - if (strstr(bs, "Dual Core") || - strstr(bs, "Dual-Core") || - strstr(bs, " X2 ")) - is_dual = 1; - if (strstr(bs, " X4 ")) is_quad = 1; - if (strstr(bs, " X3 ")) is_tri = 1; - if (strstr(bs, "Opteron")) { - return is_dual ? OPTERON_DUALCORE : OPTERON_SINGLE; - } - if (strstr(bs, "Phenom")) { - if (strstr(bs, "II")) return PHENOM2; - else return PHENOM; - } - if (amd_has_turion_modelname(bs)) { - return is_dual ? TURION_X2 : TURION_64; - } - if (strstr(bs, "Athlon(tm) 64 FX")) return ATHLON_64_FX; - if (strstr(bs, "Athlon(tm) FX")) return ATHLON_FX; - if (strstr(bs, "Athlon(tm) 64") || strstr(bs, "Athlon(tm) II X") || match_pattern(bs, "Athlon(tm) X#")) { - if (is_quad) return ATHLON_64_X4; - if (is_dual) return ATHLON_64_X2; - if (is_tri) return ATHLON_64_X3; - return ATHLON_64; - } - if (strstr(bs, "Turion")) { - return is_dual ? TURION_X2 : TURION_64; - } - - if (strstr(bs, "mobile") || strstr(bs, "Mobile")) { - if (strstr(bs, "Athlon(tm) XP-M (LV)")) return ATHLON_XP_M_LV; - if (strstr(bs, "Athlon(tm) XP")) return ATHLON_XP_M; - if (strstr(bs, "Sempron(tm)")) return M_SEMPRON; - if (strstr(bs, "Athlon")) return MOBILE_ATHLON64; - if (strstr(bs, "Duron")) return MOBILE_DURON; - - } else { - if (strstr(bs, "Athlon(tm) XP")) return ATHLON_XP; - if (strstr(bs, "Athlon(tm) MP")) return ATHLON_MP; - if (strstr(bs, "Sempron(tm)")) return SEMPRON; - if (strstr(bs, "Duron")) return DURON; - if (strstr(bs, "Athlon")) return ATHLON; - } - if (match_pattern(bs, "C-##")) return FUSION_C; - if (match_pattern(bs, "E-###")) return FUSION_E; - if (match_pattern(bs, "Z-##")) return FUSION_Z; - if (match_pattern(bs, "E#-####") || match_pattern(bs, "A#-####")) return FUSION_EA; - - return (amd_code_t) NO_CODE; -} - -static void decode_amd_codename(struct cpu_raw_data_t* raw, struct cpu_id_t* data, struct internal_id_info_t* internal) -{ - amd_code_t code = decode_amd_codename_part1(data->brand_str); - int i = 0; - char* code_str = NULL; - for (i = 0; i < COUNT_OF(amd_code_str); i++) { - if (code == amd_code_str[i].code) { - code_str = amd_code_str[i].str; - break; - } - } - if (code == ATHLON_64_X2 && data->l2_cache < 512) - code = SEMPRON_DUALCORE; - if (code_str) - debugf(2, "Detected AMD brand code: %d (%s)\n", code, code_str); - else - debugf(2, "Detected AMD brand code: %d\n", code); - internal->code.amd = code; - internal->score = match_cpu_codename(cpudb_amd, COUNT_OF(cpudb_amd), data, code, 0); -} - -int cpuid_identify_amd(struct cpu_raw_data_t* raw, struct cpu_id_t* data, struct internal_id_info_t* internal) -{ - load_amd_features(raw, data); - decode_amd_cache_info(raw, data); - decode_amd_number_of_cores(raw, data); - decode_amd_codename(raw, data, internal); - return 0; -} - -void cpuid_get_list_amd(struct cpu_list_t* list) -{ - generic_get_cpu_list(cpudb_amd, COUNT_OF(cpudb_amd), list); -} diff --git a/contrib/libcpuid/include/libcpuid/recog_amd.h b/contrib/libcpuid/include/libcpuid/recog_amd.h deleted file mode 100644 index 34e895983975e40874ec9fac4f0177f2f2657cd8..0000000000000000000000000000000000000000 --- a/contrib/libcpuid/include/libcpuid/recog_amd.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2008 Veselin Georgiev, - * anrieffNOSPAM @ mgail_DOT.com (convert to gmail) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __RECOG_AMD_H__ -#define __RECOG_AMD_H__ - -int cpuid_identify_amd(struct cpu_raw_data_t* raw, struct cpu_id_t* data, struct internal_id_info_t* internal); -void cpuid_get_list_amd(struct cpu_list_t* list); - -#endif /* __RECOG_AMD_H__ */ diff --git a/contrib/libcpuid/include/libcpuid/recog_intel.c b/contrib/libcpuid/include/libcpuid/recog_intel.c deleted file mode 100644 index 2ffc41c8a15518e584402bb27f96a35893ee65c2..0000000000000000000000000000000000000000 --- a/contrib/libcpuid/include/libcpuid/recog_intel.c +++ /dev/null @@ -1,897 +0,0 @@ -/* - * Copyright 2008 Veselin Georgiev, - * anrieffNOSPAM @ mgail_DOT.com (convert to gmail) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include -#include -#include "libcpuid.h" -#include "libcpuid_util.h" -#include "libcpuid_internal.h" -#include "recog_intel.h" - -const struct intel_bcode_str { intel_code_t code; char *str; } intel_bcode_str[] = { - #define CODE(x) { x, #x } - #define CODE2(x, y) CODE(x) - #include "intel_code_t.h" - #undef CODE -}; - -enum _intel_model_t { - UNKNOWN = -1, - _3000 = 100, - _3100, - _3200, - X3200, - _3300, - X3300, - _5100, - _5200, - _5300, - _5400, - _2xxx, /* Core i[357] 2xxx */ - _3xxx, /* Core i[357] 3xxx */ -}; -typedef enum _intel_model_t intel_model_t; - -const struct match_entry_t cpudb_intel[] = { - { -1, -1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown Intel CPU" }, - - /* i486 */ - { 4, -1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown i486" }, - { 4, 0, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "i486 DX-25/33" }, - { 4, 1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "i486 DX-50" }, - { 4, 2, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "i486 SX" }, - { 4, 3, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "i486 DX2" }, - { 4, 4, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "i486 SL" }, - { 4, 5, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "i486 SX2" }, - { 4, 7, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "i486 DX2 WriteBack" }, - { 4, 8, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "i486 DX4" }, - { 4, 9, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "i486 DX4 WriteBack" }, - - /* All Pentia: - Pentium 1 */ - { 5, -1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown Pentium" }, - { 5, 0, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium A-Step" }, - { 5, 1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium 1 (0.8u)" }, - { 5, 2, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium 1 (0.35u)" }, - { 5, 3, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium OverDrive" }, - { 5, 4, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium 1 (0.35u)" }, - { 5, 7, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium 1 (0.35u)" }, - { 5, 8, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium MMX (0.25u)" }, - - /* Pentium 2 / 3 / M / Conroe / whatsnext - all P6 based. */ - { 6, -1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown P6" }, - { 6, 0, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium Pro" }, - { 6, 1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium Pro" }, - { 6, 3, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium II (Klamath)" }, - { 6, 5, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium II (Deschutes)" }, - { 6, 5, -1, -1, -1, 1, -1, -1, MOBILE_PENTIUM , 0, "Mobile Pentium II (Tonga)"}, - { 6, 6, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium II (Dixon)" }, - - { 6, 3, -1, -1, -1, 1, -1, -1, XEON , 0, "P-II Xeon (Klamath)" }, - { 6, 5, -1, -1, -1, 1, -1, -1, XEON , 0, "P-II Xeon (Drake)" }, - { 6, 6, -1, -1, -1, 1, -1, -1, XEON , 0, "P-II Xeon (Dixon)" }, - - { 6, 5, -1, -1, -1, 1, -1, -1, CELERON , 0, "P-II Celeron (Covingtons" }, - { 6, 6, -1, -1, -1, 1, -1, -1, CELERON , 0, "P-II Celeron (Mendocino)" }, - - /* -------------------------------------------------- */ - - { 6, 7, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium III (Katmai)" }, - { 6, 8, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium III (Coppermine)"}, - { 6, 10, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium III (Coppermine)"}, - { 6, 11, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium III (Tualatin)" }, - - { 6, 7, -1, -1, -1, 1, -1, -1, XEON , 0, "P-III Xeon (Tanner)" }, - { 6, 8, -1, -1, -1, 1, -1, -1, XEON , 0, "P-III Xeon (Cascades)" }, - { 6, 10, -1, -1, -1, 1, -1, -1, XEON , 0, "P-III Xeon (Cascades)" }, - { 6, 11, -1, -1, -1, 1, -1, -1, XEON , 0, "P-III Xeon (Tualatin)" }, - - { 6, 7, -1, -1, -1, 1, -1, -1, CELERON , 0, "P-III Celeron (Katmai)" }, - { 6, 8, -1, -1, -1, 1, -1, -1, CELERON , 0, "P-III Celeron (Coppermine)" }, - { 6, 10, -1, -1, -1, 1, -1, -1, CELERON , 0, "P-III Celeron (Coppermine)" }, - { 6, 11, -1, -1, -1, 1, -1, -1, CELERON , 0, "P-III Celeron (Tualatin)" }, - - /* Netburst based (Pentium 4 and later) - classic P4s */ - { 15, -1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown Pentium 4" }, - { 15, -1, -1, 15, -1, 1, -1, -1, CELERON , 0, "Unknown P-4 Celeron" }, - { 15, -1, -1, 15, -1, 1, -1, -1, XEON , 0, "Unknown Xeon" }, - - { 15, 0, -1, 15, -1, 1, -1, -1, NO_CODE , 0, "Pentium 4 (Willamette)" }, - { 15, 1, -1, 15, -1, 1, -1, -1, NO_CODE , 0, "Pentium 4 (Willamette)" }, - { 15, 2, -1, 15, -1, 1, -1, -1, NO_CODE , 0, "Pentium 4 (Northwood)" }, - { 15, 3, -1, 15, -1, 1, -1, -1, NO_CODE , 0, "Pentium 4 (Prescott)" }, - { 15, 4, -1, 15, -1, 1, -1, -1, NO_CODE , 0, "Pentium 4 (Prescott)" }, - { 15, 6, -1, 15, -1, 1, -1, -1, NO_CODE , 0, "Pentium 4 (Cedar Mill)" }, - { 15, 0, -1, 15, -1, 1, -1, -1, MOBILE_PENTIUM , 0, "Mobile P-4 (Willamette)" }, - { 15, 1, -1, 15, -1, 1, -1, -1, MOBILE_PENTIUM , 0, "Mobile P-4 (Willamette)" }, - { 15, 2, -1, 15, -1, 1, -1, -1, MOBILE_PENTIUM , 0, "Mobile P-4 (Northwood)" }, - { 15, 3, -1, 15, -1, 1, -1, -1, MOBILE_PENTIUM , 0, "Mobile P-4 (Prescott)" }, - { 15, 4, -1, 15, -1, 1, -1, -1, MOBILE_PENTIUM , 0, "Mobile P-4 (Prescott)" }, - { 15, 6, -1, 15, -1, 1, -1, -1, MOBILE_PENTIUM , 0, "Mobile P-4 (Cedar Mill)" }, - - /* server CPUs */ - { 15, 0, -1, 15, -1, 1, -1, -1, XEON , 0, "Xeon (Foster)" }, - { 15, 1, -1, 15, -1, 1, -1, -1, XEON , 0, "Xeon (Foster)" }, - { 15, 2, -1, 15, -1, 1, -1, -1, XEON , 0, "Xeon (Prestonia)" }, - { 15, 2, -1, 15, -1, 1, -1, -1, XEONMP , 0, "Xeon (Gallatin)" }, - { 15, 3, -1, 15, -1, 1, -1, -1, XEON , 0, "Xeon (Nocona)" }, - { 15, 4, -1, 15, -1, 1, -1, -1, XEON , 0, "Xeon (Nocona)" }, - { 15, 4, -1, 15, -1, 1, -1, -1, XEON_IRWIN , 0, "Xeon (Irwindale)" }, - { 15, 4, -1, 15, -1, 1, -1, -1, XEONMP , 0, "Xeon (Cranford)" }, - { 15, 4, -1, 15, -1, 1, -1, -1, XEON_POTOMAC , 0, "Xeon (Potomac)" }, - { 15, 6, -1, 15, -1, 1, -1, -1, XEON , 0, "Xeon (Dempsey)" }, - - /* Pentium Ds */ - { 15, 4, 4, 15, -1, 1, -1, -1, NO_CODE , 0, "Pentium D (SmithField)" }, - { 15, 4, -1, 15, -1, 1, -1, -1, PENTIUM_D , 0, "Pentium D (SmithField)" }, - { 15, 4, 7, 15, -1, 1, -1, -1, NO_CODE , 0, "Pentium D (SmithField)" }, - { 15, 6, -1, 15, -1, 1, -1, -1, PENTIUM_D , 0, "Pentium D (Presler)" }, - - /* Celeron and Celeron Ds */ - { 15, 1, -1, 15, -1, 1, -1, -1, CELERON , 0, "P-4 Celeron (Willamette)" }, - { 15, 2, -1, 15, -1, 1, -1, -1, CELERON , 0, "P-4 Celeron (Northwood)" }, - { 15, 3, -1, 15, -1, 1, -1, -1, CELERON , 0, "P-4 Celeron D (Prescott)" }, - { 15, 4, -1, 15, -1, 1, -1, -1, CELERON , 0, "P-4 Celeron D (Prescott)" }, - { 15, 6, -1, 15, -1, 1, -1, -1, CELERON , 0, "P-4 Celeron D (Cedar Mill)" }, - - /* -------------------------------------------------- */ - /* Intel Core microarchitecture - P6-based */ - - { 6, 9, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown Pentium M" }, - { 6, 9, -1, -1, -1, 1, -1, -1, MOBILE_PENTIUM_M , 0, "Unknown Pentium M" }, - { 6, 9, -1, -1, -1, 1, -1, -1, PENTIUM , 0, "Pentium M (Banias)" }, - { 6, 9, -1, -1, -1, 1, -1, -1, MOBILE_PENTIUM_M , 0, "Pentium M (Banias)" }, - { 6, 9, -1, -1, -1, 1, -1, -1, CELERON , 0, "Celeron M" }, - { 6, 13, -1, -1, -1, 1, -1, -1, PENTIUM , 0, "Pentium M (Dothan)" }, - { 6, 13, -1, -1, -1, 1, -1, -1, MOBILE_PENTIUM_M , 0, "Pentium M (Dothan)" }, - { 6, 13, -1, -1, -1, 1, -1, -1, CELERON , 0, "Celeron M" }, - - { 6, 12, -1, -1, -1, -1, -1, -1, ATOM_UNKNOWN , 0, "Unknown Atom" }, - { 6, 12, -1, -1, -1, -1, -1, -1, ATOM_DIAMONDVILLE , 0, "Atom (Diamondville)" }, - { 6, 12, -1, -1, -1, -1, -1, -1, ATOM_SILVERTHORNE , 0, "Atom (Silverthorne)" }, - { 6, 12, -1, -1, -1, -1, -1, -1, ATOM_CEDARVIEW , 0, "Atom (Cedarview)" }, - { 6, 6, -1, -1, -1, -1, -1, -1, ATOM_CEDARVIEW , 0, "Atom (Cedarview)" }, - { 6, 12, -1, -1, -1, -1, -1, -1, ATOM_PINEVIEW , 0, "Atom (Pineview)" }, - - /* -------------------------------------------------- */ - - { 6, 14, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown Yonah" }, - { 6, 14, -1, -1, -1, 1, -1, -1, CORE_SOLO , 0, "Yonah (Core Solo)" }, - { 6, 14, -1, -1, -1, 2, -1, -1, CORE_DUO , 0, "Yonah (Core Duo)" }, - { 6, 14, -1, -1, -1, 1, -1, -1, MOBILE_CORE_SOLO , 0, "Yonah (Core Solo)" }, - { 6, 14, -1, -1, -1, 2, -1, -1, MOBILE_CORE_DUO , 0, "Yonah (Core Duo)" }, - { 6, 14, -1, -1, -1, 1, -1, -1, CORE_SOLO , 0, "Yonah (Core Solo)" }, - - { 6, 15, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown Core 2" }, - { 6, 15, -1, -1, -1, 2, 4096, -1, CORE_DUO , 0, "Conroe (Core 2 Duo)" }, - { 6, 15, -1, -1, -1, 2, 1024, -1, CORE_DUO , 0, "Conroe (Core 2 Duo) 1024K" }, - { 6, 15, -1, -1, -1, 2, 512, -1, CORE_DUO , 0, "Conroe (Core 2 Duo) 512K" }, - { 6, 15, -1, -1, -1, 4, -1, -1, QUAD_CORE , 0, "Kentsfield (Core 2 Quad)" }, - { 6, 15, -1, -1, -1, 4, 4096, -1, QUAD_CORE , 0, "Kentsfield (Core 2 Quad)" }, - { 6, 15, -1, -1, -1, 400, -1, -1, MORE_THAN_QUADCORE, 0, "More than quad-core" }, - { 6, 15, -1, -1, -1, 2, 2048, -1, CORE_DUO , 0, "Allendale (Core 2 Duo)" }, - { 6, 15, -1, -1, -1, 2, -1, -1, MOBILE_CORE_DUO , 0, "Merom (Core 2 Duo)" }, - { 6, 15, -1, -1, -1, 2, 2048, -1, MEROM , 0, "Merom (Core 2 Duo) 2048K" }, - { 6, 15, -1, -1, -1, 2, 4096, -1, MEROM , 0, "Merom (Core 2 Duo) 4096K" }, - - { 6, 15, -1, -1, 15, 1, -1, -1, CELERON , 0, "Conroe-L (Celeron)" }, - { 6, 6, -1, -1, 22, 1, -1, -1, CELERON , 0, "Conroe-L (Celeron)" }, - { 6, 15, -1, -1, 15, 2, -1, -1, CELERON , 0, "Conroe-L (Allendale)" }, - { 6, 6, -1, -1, 22, 2, -1, -1, CELERON , 0, "Conroe-L (Allendale)" }, - - - { 6, 6, -1, -1, 22, 1, -1, -1, NO_CODE , 0, "Unknown Core ?" }, - { 6, 7, -1, -1, 23, 1, -1, -1, NO_CODE , 0, "Unknown Core ?" }, - { 6, 6, -1, -1, 22, 400, -1, -1, MORE_THAN_QUADCORE, 0, "More than quad-core" }, - { 6, 7, -1, -1, 23, 400, -1, -1, MORE_THAN_QUADCORE, 0, "More than quad-core" }, - - { 6, 7, -1, -1, 23, 1, -1, -1, CORE_SOLO , 0, "Unknown Core 45nm" }, - { 6, 7, -1, -1, 23, 1, -1, -1, CORE_DUO , 0, "Unknown Core 45nm" }, - { 6, 7, -1, -1, 23, 2, 1024, -1, WOLFDALE , 0, "Celeron Wolfdale 1M" }, - { 6, 7, -1, -1, 23, 2, 2048, -1, WOLFDALE , 0, "Wolfdale (Core 2 Duo) 2M" }, - { 6, 7, -1, -1, 23, 2, 3072, -1, WOLFDALE , 0, "Wolfdale (Core 2 Duo) 3M" }, - { 6, 7, -1, -1, 23, 2, 6144, -1, WOLFDALE , 0, "Wolfdale (Core 2 Duo) 6M" }, - { 6, 7, -1, -1, 23, 1, -1, -1, MOBILE_CORE_DUO , 0, "Penryn (Core 2 Duo)" }, - { 6, 7, -1, -1, 23, 2, 1024, -1, PENRYN , 0, "Penryn (Core 2 Duo)" }, - { 6, 7, -1, -1, 23, 2, 3072, -1, PENRYN , 0, "Penryn (Core 2 Duo) 3M" }, - { 6, 7, -1, -1, 23, 2, 6144, -1, PENRYN , 0, "Penryn (Core 2 Duo) 6M" }, - { 6, 7, -1, -1, 23, 4, 2048, -1, QUAD_CORE , 0, "Yorkfield (Core 2 Quad) 2M"}, - { 6, 7, -1, -1, 23, 4, 3072, -1, QUAD_CORE , 0, "Yorkfield (Core 2 Quad) 3M"}, - { 6, 7, -1, -1, 23, 4, 6144, -1, QUAD_CORE , 0, "Yorkfield (Core 2 Quad) 6M"}, - - /* Core microarchitecture-based Xeons: */ - { 6, 14, -1, -1, 14, 1, -1, -1, XEON , 0, "Xeon LV" }, - { 6, 15, -1, -1, 15, 2, 4096, -1, XEON , _5100, "Xeon (Woodcrest)" }, - { 6, 15, -1, -1, 15, 2, 2048, -1, XEON , _3000, "Xeon (Conroe/2M)" }, - { 6, 15, -1, -1, 15, 2, 4096, -1, XEON , _3000, "Xeon (Conroe/4M)" }, - { 6, 15, -1, -1, 15, 4, 4096, -1, XEON , X3200, "Xeon (Kentsfield)" }, - { 6, 15, -1, -1, 15, 4, 4096, -1, XEON , _5300, "Xeon (Clovertown)" }, - { 6, 7, -1, -1, 23, 2, 6144, -1, XEON , _3100, "Xeon (Wolfdale)" }, - { 6, 7, -1, -1, 23, 2, 6144, -1, XEON , _5200, "Xeon (Wolfdale DP)" }, - { 6, 7, -1, -1, 23, 4, 6144, -1, XEON , _5400, "Xeon (Harpertown)" }, - { 6, 7, -1, -1, 23, 4, 3072, -1, XEON , X3300, "Xeon (Yorkfield/3M)" }, - { 6, 7, -1, -1, 23, 4, 6144, -1, XEON , X3300, "Xeon (Yorkfield/6M)" }, - - /* Nehalem CPUs (45nm): */ - { 6, 10, -1, -1, 26, 4, -1, -1, XEON_GAINESTOWN , 0, "Gainestown (Xeon)" }, - { 6, 10, -1, -1, 26, 4, -1, 4096, XEON_GAINESTOWN , 0, "Gainestown 4M (Xeon)" }, - { 6, 10, -1, -1, 26, 4, -1, 8192, XEON_GAINESTOWN , 0, "Gainestown 8M (Xeon)" }, - { 6, 10, -1, -1, 26, 4, -1, -1, XEON_I7 , 0, "Bloomfield (Xeon)" }, - { 6, 10, -1, -1, 26, 4, -1, -1, CORE_I7 , 0, "Bloomfield (Core i7)" }, - { 6, 10, -1, -1, 30, 4, -1, -1, CORE_I7 , 0, "Lynnfield (Core i7)" }, - { 6, 5, -1, -1, 37, 4, -1, 8192, CORE_I5 , 0, "Lynnfield (Core i5)" }, - - /* Westmere CPUs (32nm): */ - { 6, 5, -1, -1, 37, 2, -1, -1, NO_CODE , 0, "Unknown Core i3/i5" }, - { 6, 12, -1, -1, 44, -1, -1, -1, XEON_WESTMERE , 0, "Westmere (Xeon)" }, - { 6, 12, -1, -1, 44, -1, -1, 12288, XEON_WESTMERE , 0, "Gulftown (Xeon)" }, - { 6, 12, -1, -1, 44, 4, -1, 12288, CORE_I7 , 0, "Gulftown (Core i7)" }, - { 6, 5, -1, -1, 37, 2, -1, 4096, CORE_I5 , 0, "Clarkdale (Core i5)" }, - { 6, 5, -1, -1, 37, 2, -1, 4096, CORE_I3 , 0, "Clarkdale (Core i3)" }, - { 6, 5, -1, -1, 37, 2, -1, -1, PENTIUM , 0, "Arrandale" }, - { 6, 5, -1, -1, 37, 2, -1, 4096, CORE_I7 , 0, "Arrandale (Core i7)" }, - { 6, 5, -1, -1, 37, 2, -1, 3072, CORE_I5 , 0, "Arrandale (Core i5)" }, - { 6, 5, -1, -1, 37, 2, -1, 3072, CORE_I3 , 0, "Arrandale (Core i3)" }, - - /* Sandy Bridge CPUs (32nm): */ - { 6, 10, -1, -1, 42, -1, -1, -1, NO_CODE , 0, "Unknown Sandy Bridge" }, - { 6, 10, -1, -1, 42, -1, -1, -1, XEON , 0, "Sandy Bridge (Xeon)" }, - { 6, 10, -1, -1, 42, -1, -1, -1, CORE_I7 , 0, "Sandy Bridge (Core i7)" }, - { 6, 10, -1, -1, 42, 4, -1, -1, CORE_I7 , 0, "Sandy Bridge (Core i7)" }, - { 6, 10, -1, -1, 42, 4, -1, -1, CORE_I5 , 0, "Sandy Bridge (Core i5)" }, - { 6, 10, -1, -1, 42, 2, -1, -1, CORE_I3 , 0, "Sandy Bridge (Core i3)" }, - { 6, 10, -1, -1, 42, 2, -1, -1, PENTIUM , 0, "Sandy Bridge (Pentium)" }, - { 6, 10, -1, -1, 42, 1, -1, -1, CELERON , 0, "Sandy Bridge (Celeron)" }, - { 6, 10, -1, -1, 42, 2, -1, -1, CELERON , 0, "Sandy Bridge (Celeron)" }, - { 6, 13, -1, -1, 45, -1, -1, -1, NO_CODE , 0, "Sandy Bridge-E" }, - { 6, 13, -1, -1, 45, -1, -1, -1, XEON , 0, "Sandy Bridge-E (Xeon)" }, - - /* Ivy Bridge CPUs (22nm): */ - { 6, 10, -1, -1, 58, -1, -1, -1, XEON , 0, "Ivy Bridge (Xeon)" }, - { 6, 10, -1, -1, 58, 4, -1, -1, CORE_IVY7 , 0, "Ivy Bridge (Core i7)" }, - { 6, 10, -1, -1, 58, 4, -1, -1, CORE_IVY5 , 0, "Ivy Bridge (Core i5)" }, - { 6, 10, -1, -1, 58, 2, -1, -1, CORE_IVY3 , 0, "Ivy Bridge (Core i3)" }, - { 6, 10, -1, -1, 58, 2, -1, -1, PENTIUM , 0, "Ivy Bridge (Pentium)" }, - { 6, 10, -1, -1, 58, 1, -1, -1, CELERON , 0, "Ivy Bridge (Celeron)" }, - { 6, 10, -1, -1, 58, 2, -1, -1, CELERON , 0, "Ivy Bridge (Celeron)" }, - { 6, 14, -1, -1, 62, -1, -1, -1, NO_CODE , 0, "Ivy Bridge-E" }, - - /* Haswell CPUs (22nm): */ - { 6, 12, -1, -1, 60, -1, -1, -1, XEON , 0, "Haswell (Xeon)" }, - { 6, 12, -1, -1, 60, 4, -1, -1, CORE_HASWELL7 , 0, "Haswell (Core i7)" }, - { 6, 5, -1, -1, 69, 4, -1, -1, CORE_HASWELL7 , 0, "Haswell (Core i7)" }, - { 6, 12, -1, -1, 60, 4, -1, -1, CORE_HASWELL5 , 0, "Haswell (Core i5)" }, - { 6, 5, -1, -1, 69, 4, -1, -1, CORE_HASWELL5 , 0, "Haswell (Core i5)" }, - { 6, 12, -1, -1, 60, 2, -1, -1, CORE_HASWELL3 , 0, "Haswell (Core i3)" }, - { 6, 5, -1, -1, 69, 2, -1, -1, CORE_HASWELL3 , 0, "Haswell (Core i3)" }, - { 6, 12, -1, -1, 60, 2, -1, -1, PENTIUM , 0, "Haswell (Pentium)" }, - { 6, 12, -1, -1, 60, 2, -1, -1, CELERON , 0, "Haswell (Celeron)" }, - { 6, 12, -1, -1, 60, 1, -1, -1, CELERON , 0, "Haswell (Celeron)" }, - { 6, 15, -1, -1, 63, -1, -1, -1, NO_CODE , 0, "Haswell-E" }, - - /* Broadwell CPUs (14nm): */ - { 6, 7, -1, -1, 71, 4, -1, -1, CORE_BROADWELL7 , 0, "Broadwell (Core i7)" }, - { 6, 7, -1, -1, 71, 4, -1, -1, CORE_BROADWELL5 , 0, "Broadwell (Core i5)" }, - { 6, 13, -1, -1, 61, 4, -1, -1, CORE_BROADWELL7 , 0, "Broadwell-U (Core i7)" }, - { 6, 13, -1, -1, 61, 2, -1, -1, CORE_BROADWELL7 , 0, "Broadwell-U (Core i7)" }, - { 6, 13, -1, -1, 61, 2, -1, -1, CORE_BROADWELL5 , 0, "Broadwell-U (Core i5)" }, - { 6, 13, -1, -1, 61, 2, -1, -1, CORE_BROADWELL3 , 0, "Broadwell-U (Core i3)" }, - { 6, 13, -1, -1, 61, 2, -1, -1, PENTIUM , 0, "Broadwell-U (Pentium)" }, - { 6, 13, -1, -1, 61, 2, -1, -1, CELERON , 0, "Broadwell-U (Celeron)" }, - { 6, 13, -1, -1, 61, 2, -1, -1, NA , 0, "Broadwell-U (Core M)" }, - { 6, 15, -1, -1, 79, 2, -1, -1, CORE_BROADWELL3 , 0, "Broadwell-E (Core i3)" }, - { 6, 15, -1, -1, 79, 2, -1, -1, CORE_BROADWELL5 , 0, "Broadwell-E (Core i5)" }, - { 6, 15, -1, -1, 79, 4, -1, -1, CORE_BROADWELL5 , 0, "Broadwell-E (Core i5)" }, - { 6, 15, -1, -1, 79, 2, -1, -1, CORE_BROADWELL7 , 0, "Broadwell-E (Core i7)" }, - { 6, 15, -1, -1, 79, 4, -1, -1, CORE_BROADWELL7 , 0, "Broadwell-E (Core i7)" }, - - /* Skylake CPUs (14nm): */ - { 6, 14, -1, -1, 94, 4, -1, -1, CORE_BROADWELL7 , 0, "Skylake (Core i7)" }, - { 6, 14, -1, -1, 94, 4, -1, -1, CORE_BROADWELL5 , 0, "Skylake (Core i5)" }, - { 6, 14, -1, -1, 94, 4, -1, -1, CORE_BROADWELL3 , 0, "Skylake (Core i3)" }, - { 6, 14, -1, -1, 94, 4, -1, -1, PENTIUM , 0, "Skylake (Pentium)" }, - - /* Itaniums */ - { 7, -1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Itanium" }, - { 15, -1, -1, 16, -1, 1, -1, -1, NO_CODE , 0, "Itanium 2" }, - -}; - - -static void load_intel_features(struct cpu_raw_data_t* raw, struct cpu_id_t* data) -{ - const struct feature_map_t matchtable_edx1[] = { - { 18, CPU_FEATURE_PN }, - { 21, CPU_FEATURE_DTS }, - { 22, CPU_FEATURE_ACPI }, - { 27, CPU_FEATURE_SS }, - { 29, CPU_FEATURE_TM }, - { 30, CPU_FEATURE_IA64 }, - { 31, CPU_FEATURE_PBE }, - }; - const struct feature_map_t matchtable_ecx1[] = { - { 2, CPU_FEATURE_DTS64 }, - { 4, CPU_FEATURE_DS_CPL }, - { 5, CPU_FEATURE_VMX }, - { 6, CPU_FEATURE_SMX }, - { 7, CPU_FEATURE_EST }, - { 8, CPU_FEATURE_TM2 }, - { 10, CPU_FEATURE_CID }, - { 14, CPU_FEATURE_XTPR }, - { 15, CPU_FEATURE_PDCM }, - { 18, CPU_FEATURE_DCA }, - { 21, CPU_FEATURE_X2APIC }, - }; - const struct feature_map_t matchtable_edx81[] = { - { 20, CPU_FEATURE_XD }, - }; - const struct feature_map_t matchtable_ebx7[] = { - { 2, CPU_FEATURE_SGX }, - { 4, CPU_FEATURE_HLE }, - { 11, CPU_FEATURE_RTM }, - { 16, CPU_FEATURE_AVX512F }, - { 17, CPU_FEATURE_AVX512DQ }, - { 18, CPU_FEATURE_RDSEED }, - { 19, CPU_FEATURE_ADX }, - { 26, CPU_FEATURE_AVX512PF }, - { 27, CPU_FEATURE_AVX512ER }, - { 28, CPU_FEATURE_AVX512CD }, - { 29, CPU_FEATURE_SHA_NI }, - { 30, CPU_FEATURE_AVX512BW }, - { 31, CPU_FEATURE_AVX512VL }, - }; - if (raw->basic_cpuid[0][0] >= 1) { - match_features(matchtable_edx1, COUNT_OF(matchtable_edx1), raw->basic_cpuid[1][3], data); - match_features(matchtable_ecx1, COUNT_OF(matchtable_ecx1), raw->basic_cpuid[1][2], data); - } - if (raw->ext_cpuid[0][0] >= 1) { - match_features(matchtable_edx81, COUNT_OF(matchtable_edx81), raw->ext_cpuid[1][3], data); - } - // detect TSX/AVX512: - if (raw->basic_cpuid[0][0] >= 7) { - match_features(matchtable_ebx7, COUNT_OF(matchtable_ebx7), raw->basic_cpuid[7][1], data); - } -} - -enum _cache_type_t { - L1I, - L1D, - L2, - L3, - L4 -}; -typedef enum _cache_type_t cache_type_t; - -static void check_case(uint8_t on, cache_type_t cache, int size, int assoc, int linesize, struct cpu_id_t* data) -{ - if (!on) return; - switch (cache) { - case L1I: - data->l1_instruction_cache = size; - break; - case L1D: - data->l1_data_cache = size; - data->l1_assoc = assoc; - data->l1_cacheline = linesize; - break; - case L2: - data->l2_cache = size; - data->l2_assoc = assoc; - data->l2_cacheline = linesize; - break; - case L3: - data->l3_cache = size; - data->l3_assoc = assoc; - data->l3_cacheline = linesize; - break; - case L4: - data->l4_cache = size; - data->l4_assoc = assoc; - data->l4_cacheline = linesize; - break; - default: - break; - } -} - -static void decode_intel_oldstyle_cache_info(struct cpu_raw_data_t* raw, struct cpu_id_t* data) -{ - uint8_t f[256] = {0}; - int reg, off; - uint32_t x; - for (reg = 0; reg < 4; reg++) { - x = raw->basic_cpuid[2][reg]; - if (x & 0x80000000) continue; - for (off = 0; off < 4; off++) { - f[x & 0xff] = 1; - x >>= 8; - } - } - - check_case(f[0x06], L1I, 8, 4, 32, data); - check_case(f[0x08], L1I, 16, 4, 32, data); - check_case(f[0x0A], L1D, 8, 2, 32, data); - check_case(f[0x0C], L1D, 16, 4, 32, data); - check_case(f[0x22], L3, 512, 4, 64, data); - check_case(f[0x23], L3, 1024, 8, 64, data); - check_case(f[0x25], L3, 2048, 8, 64, data); - check_case(f[0x29], L3, 4096, 8, 64, data); - check_case(f[0x2C], L1D, 32, 8, 64, data); - check_case(f[0x30], L1I, 32, 8, 64, data); - check_case(f[0x39], L2, 128, 4, 64, data); - check_case(f[0x3A], L2, 192, 6, 64, data); - check_case(f[0x3B], L2, 128, 2, 64, data); - check_case(f[0x3C], L2, 256, 4, 64, data); - check_case(f[0x3D], L2, 384, 6, 64, data); - check_case(f[0x3E], L2, 512, 4, 64, data); - check_case(f[0x41], L2, 128, 4, 32, data); - check_case(f[0x42], L2, 256, 4, 32, data); - check_case(f[0x43], L2, 512, 4, 32, data); - check_case(f[0x44], L2, 1024, 4, 32, data); - check_case(f[0x45], L2, 2048, 4, 32, data); - check_case(f[0x46], L3, 4096, 4, 64, data); - check_case(f[0x47], L3, 8192, 8, 64, data); - check_case(f[0x4A], L3, 6144, 12, 64, data); - check_case(f[0x4B], L3, 8192, 16, 64, data); - check_case(f[0x4C], L3, 12288, 12, 64, data); - check_case(f[0x4D], L3, 16384, 16, 64, data); - check_case(f[0x4E], L2, 6144, 24, 64, data); - check_case(f[0x60], L1D, 16, 8, 64, data); - check_case(f[0x66], L1D, 8, 4, 64, data); - check_case(f[0x67], L1D, 16, 4, 64, data); - check_case(f[0x68], L1D, 32, 4, 64, data); - /* The following four entries are trace cache. Intel does not - * specify a cache-line size, so we use -1 instead - */ - check_case(f[0x70], L1I, 12, 8, -1, data); - check_case(f[0x71], L1I, 16, 8, -1, data); - check_case(f[0x72], L1I, 32, 8, -1, data); - check_case(f[0x73], L1I, 64, 8, -1, data); - - check_case(f[0x78], L2, 1024, 4, 64, data); - check_case(f[0x79], L2, 128, 8, 64, data); - check_case(f[0x7A], L2, 256, 8, 64, data); - check_case(f[0x7B], L2, 512, 8, 64, data); - check_case(f[0x7C], L2, 1024, 8, 64, data); - check_case(f[0x7D], L2, 2048, 8, 64, data); - check_case(f[0x7F], L2, 512, 2, 64, data); - check_case(f[0x82], L2, 256, 8, 32, data); - check_case(f[0x83], L2, 512, 8, 32, data); - check_case(f[0x84], L2, 1024, 8, 32, data); - check_case(f[0x85], L2, 2048, 8, 32, data); - check_case(f[0x86], L2, 512, 4, 64, data); - check_case(f[0x87], L2, 1024, 8, 64, data); - - if (f[0x49]) { - /* This flag is overloaded with two meanings. On Xeon MP - * (family 0xf, model 0x6) this means L3 cache. On all other - * CPUs (notably Conroe et al), this is L2 cache. In both cases - * it means 4MB, 16-way associative, 64-byte line size. - */ - if (data->family == 0xf && data->model == 0x6) { - data->l3_cache = 4096; - data->l3_assoc = 16; - data->l3_cacheline = 64; - } else { - data->l2_cache = 4096; - data->l2_assoc = 16; - data->l2_cacheline = 64; - } - } - if (f[0x40]) { - /* Again, a special flag. It means: - * 1) If no L2 is specified, then CPU is w/o L2 (0 KB) - * 2) If L2 is specified by other flags, then, CPU is w/o L3. - */ - if (data->l2_cache == -1) { - data->l2_cache = 0; - } else { - data->l3_cache = 0; - } - } -} - -static void decode_intel_deterministic_cache_info(struct cpu_raw_data_t* raw, - struct cpu_id_t* data) -{ - int ecx; - int ways, partitions, linesize, sets, size, level, typenumber; - cache_type_t type; - for (ecx = 0; ecx < MAX_INTELFN4_LEVEL; ecx++) { - typenumber = raw->intel_fn4[ecx][0] & 0x1f; - if (typenumber == 0) break; - level = (raw->intel_fn4[ecx][0] >> 5) & 0x7; - if (level == 1 && typenumber == 1) - type = L1D; - else if (level == 1 && typenumber == 2) - type = L1I; - else if (level == 2 && typenumber == 3) - type = L2; - else if (level == 3 && typenumber == 3) - type = L3; - else if (level == 4 && typenumber == 3) - type = L4; - else { - warnf("deterministic_cache: unknown level/typenumber combo (%d/%d), cannot\n", level, typenumber); - warnf("deterministic_cache: recognize cache type\n"); - continue; - } - ways = ((raw->intel_fn4[ecx][1] >> 22) & 0x3ff) + 1; - partitions = ((raw->intel_fn4[ecx][1] >> 12) & 0x3ff) + 1; - linesize = (raw->intel_fn4[ecx][1] & 0xfff) + 1; - sets = raw->intel_fn4[ecx][2] + 1; - size = ways * partitions * linesize * sets / 1024; - check_case(1, type, size, ways, linesize, data); - } -} - -static int decode_intel_extended_topology(struct cpu_raw_data_t* raw, - struct cpu_id_t* data) -{ - int i, level_type, num_smt = -1, num_core = -1; - for (i = 0; i < MAX_INTELFN11_LEVEL; i++) { - level_type = (raw->intel_fn11[i][2] & 0xff00) >> 8; - switch (level_type) { - case 0x01: - num_smt = raw->intel_fn11[i][1] & 0xffff; - break; - case 0x02: - num_core = raw->intel_fn11[i][1] & 0xffff; - break; - default: - break; - } - } - if (num_smt == -1 || num_core == -1) return 0; - data->num_logical_cpus = num_core; - data->num_cores = num_core / num_smt; - // make sure num_cores is at least 1. In VMs, the CPUID instruction - // is rigged and may give nonsensical results, but we should at least - // avoid outputs like data->num_cores == 0. - if (data->num_cores <= 0) data->num_cores = 1; - return 1; -} - -static void decode_intel_number_of_cores(struct cpu_raw_data_t* raw, - struct cpu_id_t* data) -{ - int logical_cpus = -1, num_cores = -1; - - if (raw->basic_cpuid[0][0] >= 11) { - if (decode_intel_extended_topology(raw, data)) return; - } - - if (raw->basic_cpuid[0][0] >= 1) { - logical_cpus = (raw->basic_cpuid[1][1] >> 16) & 0xff; - if (raw->basic_cpuid[0][0] >= 4) { - num_cores = 1 + ((raw->basic_cpuid[4][0] >> 26) & 0x3f); - } - } - if (data->flags[CPU_FEATURE_HT]) { - if (num_cores > 1) { - data->num_cores = num_cores; - data->num_logical_cpus = logical_cpus; - } else { - data->num_cores = 1; - data->num_logical_cpus = (logical_cpus >= 1 ? logical_cpus : 1); - if (data->num_logical_cpus == 1) - data->flags[CPU_FEATURE_HT] = 0; - } - } else { - data->num_cores = data->num_logical_cpus = 1; - } -} - -static intel_code_t get_brand_code(struct cpu_id_t* data) -{ - intel_code_t code = (intel_code_t) NO_CODE; - int i, need_matchtable = 1, core_ix_base = 0; - const char* bs = data->brand_str; - const char* s; - const struct { intel_code_t c; const char *search; } matchtable[] = { - { XEONMP, "Xeon MP" }, - { XEONMP, "Xeon(TM) MP" }, - { XEON, "Xeon" }, - { CELERON, "Celeron" }, - { MOBILE_PENTIUM_M, "Pentium(R) M" }, - { CORE_SOLO, "Pentium(R) Dual CPU" }, - { CORE_SOLO, "Pentium(R) Dual-Core" }, - { PENTIUM_D, "Pentium(R) D" }, - { PENTIUM, "Pentium" }, - { CORE_SOLO, "Genuine Intel(R) CPU" }, - { CORE_SOLO, "Intel(R) Core(TM)" }, - { ATOM_DIAMONDVILLE, "Atom(TM) CPU [N ][23]## " }, - { ATOM_SILVERTHORNE, "Atom(TM) CPU Z" }, - { ATOM_PINEVIEW, "Atom(TM) CPU [ND][45]## " }, - { ATOM_CEDARVIEW, "Atom(TM) CPU [ND]#### " }, - { ATOM_UNKNOWN, "Atom(TM) CPU" }, - }; - - if (strstr(bs, "Mobile")) { - need_matchtable = 0; - if (strstr(bs, "Celeron")) - code = MOBILE_CELERON; - else if (strstr(bs, "Pentium")) - code = MOBILE_PENTIUM; - } - if ((i = match_pattern(bs, "Core(TM) i[357]")) != 0) { - /* Core i3, Core i5 or Core i7 */ - need_matchtable = 0; - - core_ix_base = CORE_I3; - - /* if it has RdRand, then it is at least Ivy Bridge */ - if (data->flags[CPU_FEATURE_RDRAND]) - core_ix_base = CORE_IVY3; - /* if it has FMA, then it is at least Haswell */ - if (data->flags[CPU_FEATURE_FMA3]) - core_ix_base = CORE_HASWELL3; - /* if it has RTM, then it is at least a Broadwell-E or Skylake */ - if (data->flags[CPU_FEATURE_RDSEED]) - core_ix_base = CORE_BROADWELL3; - - switch (bs[i + 9]) { - case '3': code = core_ix_base + 0; break; - case '5': code = core_ix_base + 1; break; - case '7': code = core_ix_base + 2; break; - } - } - if (need_matchtable) { - for (i = 0; i < COUNT_OF(matchtable); i++) - if (match_pattern(bs, matchtable[i].search)) { - code = matchtable[i].c; - break; - } - debugf(2, "intel matchtable result is %d\n", code); - } - if (code == XEON) { - if (match_pattern(bs, "W35##") || match_pattern(bs, "[ELXW]75##")) - code = XEON_I7; - else if (match_pattern(bs, "[ELXW]55##")) - code = XEON_GAINESTOWN; - else if (match_pattern(bs, "[ELXW]56##")) - code = XEON_WESTMERE; - else if (data->l3_cache > 0 && data->family == 16) - /* restrict by family, since later Xeons also have L3 ... */ - code = XEON_IRWIN; - } - if (code == XEONMP && data->l3_cache > 0) - code = XEON_POTOMAC; - if (code == CORE_SOLO) { - s = strstr(bs, "CPU"); - if (s) { - s += 3; - while (*s == ' ') s++; - if (*s == 'T') - code = (data->num_cores == 1) ? MOBILE_CORE_SOLO : MOBILE_CORE_DUO; - } - } - if (code == CORE_SOLO) { - switch (data->num_cores) { - case 1: break; - case 2: - { - code = CORE_DUO; - if (data->num_logical_cpus > 2) - code = DUAL_CORE_HT; - break; - } - case 4: - { - code = QUAD_CORE; - if (data->num_logical_cpus > 4) - code = QUAD_CORE_HT; - break; - } - default: - code = MORE_THAN_QUADCORE; break; - } - } - - if (code == CORE_DUO && data->ext_model >= 23) { - code = WOLFDALE; - } - if (code == PENTIUM_D && data->ext_model >= 23) { - code = WOLFDALE; - } - if (code == MOBILE_CORE_DUO && data->model != 14) { - if (data->ext_model < 23) { - code = MEROM; - } else { - code = PENRYN; - } - } - return code; -} - -static intel_model_t get_model_code(struct cpu_id_t* data) -{ - int i = 0; - int l = (int) strlen(data->brand_str); - const char *bs = data->brand_str; - int mod_flags = 0, model_no = 0, ndigs = 0; - /* If the CPU is a Core ix, then just return the model number generation: */ - if ((i = match_pattern(bs, "Core(TM) i[357]")) != 0) { - i += 11; - if (i + 4 >= l) return UNKNOWN; - if (bs[i] == '2') return _2xxx; - if (bs[i] == '3') return _3xxx; - return UNKNOWN; - } - - /* For Core2-based Xeons: */ - while (i < l - 3) { - if (bs[i] == 'C' && bs[i+1] == 'P' && bs[i+2] == 'U') - break; - i++; - } - if (i >= l - 3) return UNKNOWN; - i += 3; - while (i < l - 4 && bs[i] == ' ') i++; - if (i >= l - 4) return UNKNOWN; - while (i < l - 4 && !isdigit(bs[i])) { - if (bs[i] >= 'A' && bs[i] <= 'Z') - mod_flags |= (1 << (bs[i] - 'A')); - i++; - } - if (i >= l - 4) return UNKNOWN; - while (isdigit(bs[i])) { - ndigs++; - model_no = model_no * 10 + (int) (bs[i] - '0'); - i++; - } - if (ndigs != 4) return UNKNOWN; -#define HAVE(ch, flags) ((flags & (1 << ((int)(ch-'A')))) != 0) - switch (model_no / 100) { - case 30: return _3000; - case 31: return _3100; - case 32: - { - return (HAVE('X', mod_flags)) ? X3200 : _3200; - } - case 33: - { - return (HAVE('X', mod_flags)) ? X3300 : _3300; - } - case 51: return _5100; - case 52: return _5200; - case 53: return _5300; - case 54: return _5400; - default: - return UNKNOWN; - } -#undef HAVE -} - -static void decode_intel_sgx_features(const struct cpu_raw_data_t* raw, struct cpu_id_t* data) -{ - struct cpu_epc_t epc; - int i; - - if (raw->basic_cpuid[0][0] < 0x12) return; // no 12h leaf - if (raw->basic_cpuid[0x12][0] == 0) return; // no sub-leafs available, probably it's disabled by BIOS - - // decode sub-leaf 0: - if (raw->basic_cpuid[0x12][0] & 1) data->sgx.flags[INTEL_SGX1] = 1; - if (raw->basic_cpuid[0x12][0] & 2) data->sgx.flags[INTEL_SGX2] = 1; - if (data->sgx.flags[INTEL_SGX1] || data->sgx.flags[INTEL_SGX2]) - data->sgx.present = 1; - data->sgx.misc_select = raw->basic_cpuid[0x12][1]; - data->sgx.max_enclave_32bit = (raw->basic_cpuid[0x12][3] ) & 0xff; - data->sgx.max_enclave_64bit = (raw->basic_cpuid[0x12][3] >> 8) & 0xff; - - // decode sub-leaf 1: - data->sgx.secs_attributes = raw->intel_fn12h[1][0] | (((uint64_t) raw->intel_fn12h[1][1]) << 32); - data->sgx.secs_xfrm = raw->intel_fn12h[1][2] | (((uint64_t) raw->intel_fn12h[1][3]) << 32); - - // decode higher-order subleafs, whenever present: - data->sgx.num_epc_sections = -1; - for (i = 0; i < 1000000; i++) { - epc = cpuid_get_epc(i, raw); - if (epc.length == 0) { - debugf(2, "SGX: epc section request for %d returned null, no more EPC sections.\n", i); - data->sgx.num_epc_sections = i; - break; - } - } - if (data->sgx.num_epc_sections == -1) { - debugf(1, "SGX: warning: seems to be infinitude of EPC sections.\n"); - data->sgx.num_epc_sections = 1000000; - } -} - -struct cpu_epc_t cpuid_get_epc(int index, const struct cpu_raw_data_t* raw) -{ - uint32_t regs[4]; - struct cpu_epc_t retval = {0, 0}; - if (raw && index < MAX_INTELFN12H_LEVEL - 2) { - // this was queried already, use the data: - memcpy(regs, raw->intel_fn12h[2 + index], sizeof(regs)); - } else { - // query this ourselves: - regs[0] = 0x12; - regs[2] = 2 + index; - regs[1] = regs[3] = 0; - cpu_exec_cpuid_ext(regs); - } - - // decode values: - if ((regs[0] & 0xf) == 0x1) { - retval.start_addr |= (regs[0] & 0xfffff000); // bits [12, 32) -> bits [12, 32) - retval.start_addr |= ((uint64_t) (regs[1] & 0x000fffff)) << 32; // bits [0, 20) -> bits [32, 52) - retval.length |= (regs[2] & 0xfffff000); // bits [12, 32) -> bits [12, 32) - retval.length |= ((uint64_t) (regs[3] & 0x000fffff)) << 32; // bits [0, 20) -> bits [32, 52) - } - return retval; -} - -int cpuid_identify_intel(struct cpu_raw_data_t* raw, struct cpu_id_t* data, struct internal_id_info_t* internal) -{ - intel_code_t brand_code; - intel_model_t model_code; - int i; - char* brand_code_str = NULL; - - load_intel_features(raw, data); - if (raw->basic_cpuid[0][0] >= 4) { - /* Deterministic way is preferred, being more generic */ - decode_intel_deterministic_cache_info(raw, data); - } else if (raw->basic_cpuid[0][0] >= 2) { - decode_intel_oldstyle_cache_info(raw, data); - } - decode_intel_number_of_cores(raw, data); - - brand_code = get_brand_code(data); - model_code = get_model_code(data); - for (i = 0; i < COUNT_OF(intel_bcode_str); i++) { - if (brand_code == intel_bcode_str[i].code) { - brand_code_str = intel_bcode_str[i].str; - break; - } - } - if (brand_code_str) - debugf(2, "Detected Intel brand code: %d (%s)\n", brand_code, brand_code_str); - else - debugf(2, "Detected Intel brand code: %d\n", brand_code); - debugf(2, "Detected Intel model code: %d\n", model_code); - - internal->code.intel = brand_code; - - if (data->flags[CPU_FEATURE_SGX]) { - debugf(2, "SGX seems to be present, decoding...\n"); - // if SGX is indicated by the CPU, verify its presence: - decode_intel_sgx_features(raw, data); - } - - internal->score = match_cpu_codename(cpudb_intel, COUNT_OF(cpudb_intel), data, - brand_code, model_code); - return 0; -} - -void cpuid_get_list_intel(struct cpu_list_t* list) -{ - generic_get_cpu_list(cpudb_intel, COUNT_OF(cpudb_intel), list); -} diff --git a/contrib/libcpuid/include/libcpuid/recog_intel.h b/contrib/libcpuid/include/libcpuid/recog_intel.h deleted file mode 100644 index b99c783bf4397b8634bc6d731c3e7e9cb25b7374..0000000000000000000000000000000000000000 --- a/contrib/libcpuid/include/libcpuid/recog_intel.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2008 Veselin Georgiev, - * anrieffNOSPAM @ mgail_DOT.com (convert to gmail) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __RECOG_INTEL_H__ -#define __RECOG_INTEL_H__ - -int cpuid_identify_intel(struct cpu_raw_data_t* raw, struct cpu_id_t* data, struct internal_id_info_t* internal); -void cpuid_get_list_intel(struct cpu_list_t* list); - -#endif /*__RECOG_INTEL_H__*/ diff --git a/contrib/poco-cmake/CMakeLists.txt b/contrib/poco-cmake/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..59b6c84a1d1968846c801cf97c5fd2535f16b5dc --- /dev/null +++ b/contrib/poco-cmake/CMakeLists.txt @@ -0,0 +1,19 @@ +option (USE_INTERNAL_POCO_LIBRARY "Use internal Poco library" ${NOT_UNBUNDLED}) + +if (USE_INTERNAL_POCO_LIBRARY) + set (LIBRARY_DIR ${ClickHouse_SOURCE_DIR}/contrib/poco) +else () + find_path (ROOT_DIR NAMES Foundation/include/Poco/Poco.h include/Poco/Poco.h) +endif () + +add_subdirectory (Crypto) +add_subdirectory (Data) +add_subdirectory (Data/ODBC) +add_subdirectory (Foundation) +add_subdirectory (JSON) +add_subdirectory (MongoDB) +add_subdirectory (Net) +add_subdirectory (Net/SSL) +add_subdirectory (Redis) +add_subdirectory (Util) +add_subdirectory (XML) diff --git a/contrib/poco-cmake/Crypto/CMakeLists.txt b/contrib/poco-cmake/Crypto/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..85f768b07b13b3e885f6a2cbc42de79f522ab7f8 --- /dev/null +++ b/contrib/poco-cmake/Crypto/CMakeLists.txt @@ -0,0 +1,51 @@ +if (ENABLE_SSL) + if (USE_INTERNAL_POCO_LIBRARY) + set (SRCS + ${LIBRARY_DIR}/Crypto/src/Cipher.cpp + ${LIBRARY_DIR}/Crypto/src/CipherFactory.cpp + ${LIBRARY_DIR}/Crypto/src/CipherImpl.cpp + ${LIBRARY_DIR}/Crypto/src/CipherKey.cpp + ${LIBRARY_DIR}/Crypto/src/CipherKeyImpl.cpp + ${LIBRARY_DIR}/Crypto/src/CryptoException.cpp + ${LIBRARY_DIR}/Crypto/src/CryptoStream.cpp + ${LIBRARY_DIR}/Crypto/src/CryptoTransform.cpp + ${LIBRARY_DIR}/Crypto/src/DigestEngine.cpp + ${LIBRARY_DIR}/Crypto/src/ECDSADigestEngine.cpp + ${LIBRARY_DIR}/Crypto/src/ECKey.cpp + ${LIBRARY_DIR}/Crypto/src/ECKeyImpl.cpp + ${LIBRARY_DIR}/Crypto/src/EVPPKey.cpp + ${LIBRARY_DIR}/Crypto/src/KeyPair.cpp + ${LIBRARY_DIR}/Crypto/src/KeyPairImpl.cpp + ${LIBRARY_DIR}/Crypto/src/OpenSSLInitializer.cpp + ${LIBRARY_DIR}/Crypto/src/PKCS12Container.cpp + ${LIBRARY_DIR}/Crypto/src/RSACipherImpl.cpp + ${LIBRARY_DIR}/Crypto/src/RSADigestEngine.cpp + ${LIBRARY_DIR}/Crypto/src/RSAKey.cpp + ${LIBRARY_DIR}/Crypto/src/RSAKeyImpl.cpp + ${LIBRARY_DIR}/Crypto/src/X509Certificate.cpp + ) + + add_library (_poco_crypto ${SRCS}) + add_library (Poco::Crypto ALIAS _poco_crypto) + + target_compile_options (_poco_crypto PUBLIC -Wno-newline-eof) + target_include_directories (_poco_crypto PUBLIC ${LIBRARY_DIR}/Crypto/include) + target_link_libraries (_poco_crypto PUBLIC Poco::Foundation ssl) + else () + add_library (Poco::Crypto UNKNOWN IMPORTED GLOBAL) + + find_library(LIBRARY_POCO_CRYPTO PocoCrypto) + find_path(INCLUDE_POCO_CRYPTO Poco/Crypto/Crypto.h) + set_target_properties (Poco::Crypto PROPERTIES IMPORTED_LOCATION ${LIBRARY_POCO_CRYPTO}) + set_target_properties (Poco::Crypto PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${INCLUDE_POCO_CRYPTO}) + + target_link_libraries (Poco::Crypto INTERFACE Poco::Foundation) + endif () + + message (STATUS "Using Poco::Crypto") +else () + add_library (_poco_crypto INTERFACE) + add_library (Poco::Crypto ALIAS _poco_crypto) + + message (STATUS "Not using Poco::Crypto") +endif () diff --git a/contrib/poco-cmake/Data/CMakeLists.txt b/contrib/poco-cmake/Data/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..49143a6319c35dc8eb14f9965cc7ef2f6fabfacd --- /dev/null +++ b/contrib/poco-cmake/Data/CMakeLists.txt @@ -0,0 +1,60 @@ +if (USE_INTERNAL_POCO_LIBRARY) + set (SRCS + ${LIBRARY_DIR}/Data/src/AbstractBinder.cpp + ${LIBRARY_DIR}/Data/src/AbstractBinding.cpp + ${LIBRARY_DIR}/Data/src/AbstractExtraction.cpp + ${LIBRARY_DIR}/Data/src/AbstractExtractor.cpp + ${LIBRARY_DIR}/Data/src/AbstractPreparation.cpp + ${LIBRARY_DIR}/Data/src/AbstractPreparator.cpp + ${LIBRARY_DIR}/Data/src/ArchiveStrategy.cpp + ${LIBRARY_DIR}/Data/src/Bulk.cpp + ${LIBRARY_DIR}/Data/src/Connector.cpp + ${LIBRARY_DIR}/Data/src/DataException.cpp + ${LIBRARY_DIR}/Data/src/Date.cpp + ${LIBRARY_DIR}/Data/src/DynamicLOB.cpp + ${LIBRARY_DIR}/Data/src/Limit.cpp + ${LIBRARY_DIR}/Data/src/MetaColumn.cpp + ${LIBRARY_DIR}/Data/src/PooledSessionHolder.cpp + ${LIBRARY_DIR}/Data/src/PooledSessionImpl.cpp + ${LIBRARY_DIR}/Data/src/Position.cpp + ${LIBRARY_DIR}/Data/src/Range.cpp + ${LIBRARY_DIR}/Data/src/RecordSet.cpp + ${LIBRARY_DIR}/Data/src/Row.cpp + ${LIBRARY_DIR}/Data/src/RowFilter.cpp + ${LIBRARY_DIR}/Data/src/RowFormatter.cpp + ${LIBRARY_DIR}/Data/src/RowIterator.cpp + ${LIBRARY_DIR}/Data/src/Session.cpp + ${LIBRARY_DIR}/Data/src/SessionFactory.cpp + ${LIBRARY_DIR}/Data/src/SessionImpl.cpp + ${LIBRARY_DIR}/Data/src/SessionPool.cpp + ${LIBRARY_DIR}/Data/src/SessionPoolContainer.cpp + ${LIBRARY_DIR}/Data/src/SimpleRowFormatter.cpp + ${LIBRARY_DIR}/Data/src/SQLChannel.cpp + ${LIBRARY_DIR}/Data/src/Statement.cpp + ${LIBRARY_DIR}/Data/src/StatementCreator.cpp + ${LIBRARY_DIR}/Data/src/StatementImpl.cpp + ${LIBRARY_DIR}/Data/src/Time.cpp + ${LIBRARY_DIR}/Data/src/Transaction.cpp + ) + + add_library (_poco_data ${SRCS}) + add_library (Poco::Data ALIAS _poco_data) + + if (COMPILER_GCC) + target_compile_options (_poco_data PUBLIC -Wno-deprecated-copy) + endif () + target_include_directories (_poco_data PUBLIC ${LIBRARY_DIR}/Data/include) + target_link_libraries (_poco_data PUBLIC Poco::Foundation) +else () + # NOTE: don't know why, but the GLOBAL is required here. + add_library (Poco::Data UNKNOWN IMPORTED GLOBAL) + + find_library(LIBRARY_POCO_DATA PocoData) + find_path(INCLUDE_POCO_DATA Poco/Data/Data.h) + set_target_properties (Poco::Data PROPERTIES IMPORTED_LOCATION ${LIBRARY_POCO_DATA}) + set_target_properties (Poco::Data PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${INCLUDE_POCO_DATA}) + + target_link_libraries (Poco::Data INTERFACE Poco::Foundation) + + message (STATUS "Using Poco::Data: ${LIBRARY_POCO_DATA} ${INCLUDE_POCO_DATA}") +endif () diff --git a/contrib/poco-cmake/Data/ODBC/CMakeLists.txt b/contrib/poco-cmake/Data/ODBC/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..2d49e6e6a8ad66122dcbe5cdad46e0ae8d0d71a2 --- /dev/null +++ b/contrib/poco-cmake/Data/ODBC/CMakeLists.txt @@ -0,0 +1,44 @@ +if (ENABLE_ODBC) + if (USE_INTERNAL_POCO_LIBRARY) + set (SRCS + ${LIBRARY_DIR}/Data/ODBC/src/Binder.cpp + ${LIBRARY_DIR}/Data/ODBC/src/ConnectionHandle.cpp + ${LIBRARY_DIR}/Data/ODBC/src/Connector.cpp + ${LIBRARY_DIR}/Data/ODBC/src/EnvironmentHandle.cpp + ${LIBRARY_DIR}/Data/ODBC/src/Extractor.cpp + ${LIBRARY_DIR}/Data/ODBC/src/ODBCException.cpp + ${LIBRARY_DIR}/Data/ODBC/src/ODBCMetaColumn.cpp + ${LIBRARY_DIR}/Data/ODBC/src/ODBCStatementImpl.cpp + ${LIBRARY_DIR}/Data/ODBC/src/Parameter.cpp + ${LIBRARY_DIR}/Data/ODBC/src/Preparator.cpp + ${LIBRARY_DIR}/Data/ODBC/src/SessionImpl.cpp + ${LIBRARY_DIR}/Data/ODBC/src/TypeInfo.cpp + ${LIBRARY_DIR}/Data/ODBC/src/Unicode.cpp + ${LIBRARY_DIR}/Data/ODBC/src/Utility.cpp + ) + + add_library (_poco_data_odbc ${SRCS}) + add_library (Poco::Data::ODBC ALIAS _poco_data_odbc) + + target_compile_options (_poco_data_odbc PUBLIC -Wno-unused-variable) + target_include_directories (_poco_data_odbc PUBLIC ${LIBRARY_DIR}/Data/ODBC/include) + target_link_libraries (_poco_data_odbc PUBLIC Poco::Data unixodbc) + else () + add_library (Poco::Data::ODBC UNKNOWN IMPORTED) + + find_library(LIBRARY_POCO_DATA_ODBC PocoDataODBC) + find_path(INCLUDE_POCO_DATA_ODBC Poco/Data/ODBC/ODBC.h) + set_target_properties (Poco::Data::ODBC PROPERTIES IMPORTED_LOCATION ${LIBRARY_POCO_DATA_ODBC}) + set_target_properties (Poco::Data::ODBC PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${INCLUDE_POCO_DATA_ODBC}) + + target_link_libraries (Poco::Data::ODBC INTERFACE Poco::Data) + endif () + + message (STATUS "Using Poco::Data::ODBC") +else () + add_library (_poco_data_odbc INTERFACE) + add_library (Poco::Data::ODBC ALIAS _poco_data_odbc) + target_link_libraries (_poco_data_odbc INTERFACE unixodbc) + + message (STATUS "Not using Poco::Data::ODBC") +endif () diff --git a/contrib/poco-cmake/Foundation/CMakeLists.txt b/contrib/poco-cmake/Foundation/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..e59ffe664bd4448fe4aea69f9ec1d6a63206b276 --- /dev/null +++ b/contrib/poco-cmake/Foundation/CMakeLists.txt @@ -0,0 +1,235 @@ +if (USE_INTERNAL_POCO_LIBRARY) + # Foundation (pcre) + + set (SRCS_PCRE + ${LIBRARY_DIR}/Foundation/src/pcre_config.c + ${LIBRARY_DIR}/Foundation/src/pcre_byte_order.c + ${LIBRARY_DIR}/Foundation/src/pcre_chartables.c + ${LIBRARY_DIR}/Foundation/src/pcre_compile.c + ${LIBRARY_DIR}/Foundation/src/pcre_exec.c + ${LIBRARY_DIR}/Foundation/src/pcre_fullinfo.c + ${LIBRARY_DIR}/Foundation/src/pcre_globals.c + ${LIBRARY_DIR}/Foundation/src/pcre_maketables.c + ${LIBRARY_DIR}/Foundation/src/pcre_newline.c + ${LIBRARY_DIR}/Foundation/src/pcre_ord2utf8.c + ${LIBRARY_DIR}/Foundation/src/pcre_study.c + ${LIBRARY_DIR}/Foundation/src/pcre_tables.c + ${LIBRARY_DIR}/Foundation/src/pcre_dfa_exec.c + ${LIBRARY_DIR}/Foundation/src/pcre_get.c + ${LIBRARY_DIR}/Foundation/src/pcre_jit_compile.c + ${LIBRARY_DIR}/Foundation/src/pcre_refcount.c + ${LIBRARY_DIR}/Foundation/src/pcre_string_utils.c + ${LIBRARY_DIR}/Foundation/src/pcre_version.c + ${LIBRARY_DIR}/Foundation/src/pcre_ucd.c + ${LIBRARY_DIR}/Foundation/src/pcre_valid_utf8.c + ${LIBRARY_DIR}/Foundation/src/pcre_xclass.c + ) + + add_library (_poco_foundation_pcre ${SRCS_PCRE}) + add_library (Poco::Foundation::PCRE ALIAS _poco_foundation_pcre) + + target_compile_options (_poco_foundation_pcre PRIVATE -Wno-sign-compare) + + # Foundation + + set (SRCS + ${LIBRARY_DIR}/Foundation/src/AbstractObserver.cpp + ${LIBRARY_DIR}/Foundation/src/ActiveDispatcher.cpp + ${LIBRARY_DIR}/Foundation/src/ArchiveStrategy.cpp + ${LIBRARY_DIR}/Foundation/src/Ascii.cpp + ${LIBRARY_DIR}/Foundation/src/ASCIIEncoding.cpp + ${LIBRARY_DIR}/Foundation/src/AsyncChannel.cpp + ${LIBRARY_DIR}/Foundation/src/AtomicCounter.cpp + ${LIBRARY_DIR}/Foundation/src/Base32Decoder.cpp + ${LIBRARY_DIR}/Foundation/src/Base32Encoder.cpp + ${LIBRARY_DIR}/Foundation/src/Base64Decoder.cpp + ${LIBRARY_DIR}/Foundation/src/Base64Encoder.cpp + ${LIBRARY_DIR}/Foundation/src/BinaryReader.cpp + ${LIBRARY_DIR}/Foundation/src/BinaryWriter.cpp + ${LIBRARY_DIR}/Foundation/src/Bugcheck.cpp + ${LIBRARY_DIR}/Foundation/src/ByteOrder.cpp + ${LIBRARY_DIR}/Foundation/src/Channel.cpp + ${LIBRARY_DIR}/Foundation/src/Checksum.cpp + ${LIBRARY_DIR}/Foundation/src/Clock.cpp + ${LIBRARY_DIR}/Foundation/src/Condition.cpp + ${LIBRARY_DIR}/Foundation/src/Configurable.cpp + ${LIBRARY_DIR}/Foundation/src/ConsoleChannel.cpp + ${LIBRARY_DIR}/Foundation/src/CountingStream.cpp + ${LIBRARY_DIR}/Foundation/src/DateTime.cpp + ${LIBRARY_DIR}/Foundation/src/DateTimeFormat.cpp + ${LIBRARY_DIR}/Foundation/src/DateTimeFormatter.cpp + ${LIBRARY_DIR}/Foundation/src/DateTimeParser.cpp + ${LIBRARY_DIR}/Foundation/src/Debugger.cpp + ${LIBRARY_DIR}/Foundation/src/DeflatingStream.cpp + ${LIBRARY_DIR}/Foundation/src/DigestEngine.cpp + ${LIBRARY_DIR}/Foundation/src/DigestStream.cpp + ${LIBRARY_DIR}/Foundation/src/DirectoryIterator.cpp + ${LIBRARY_DIR}/Foundation/src/DirectoryIteratorStrategy.cpp + ${LIBRARY_DIR}/Foundation/src/DirectoryWatcher.cpp + ${LIBRARY_DIR}/Foundation/src/Environment.cpp + ${LIBRARY_DIR}/Foundation/src/Error.cpp + ${LIBRARY_DIR}/Foundation/src/ErrorHandler.cpp + ${LIBRARY_DIR}/Foundation/src/Event.cpp + ${LIBRARY_DIR}/Foundation/src/EventArgs.cpp + ${LIBRARY_DIR}/Foundation/src/EventChannel.cpp + ${LIBRARY_DIR}/Foundation/src/Exception.cpp + ${LIBRARY_DIR}/Foundation/src/FIFOBufferStream.cpp + ${LIBRARY_DIR}/Foundation/src/File.cpp + ${LIBRARY_DIR}/Foundation/src/FileChannel.cpp + ${LIBRARY_DIR}/Foundation/src/FileStream.cpp + ${LIBRARY_DIR}/Foundation/src/FileStreamFactory.cpp + ${LIBRARY_DIR}/Foundation/src/Format.cpp + ${LIBRARY_DIR}/Foundation/src/Formatter.cpp + ${LIBRARY_DIR}/Foundation/src/FormattingChannel.cpp + ${LIBRARY_DIR}/Foundation/src/FPEnvironment.cpp + ${LIBRARY_DIR}/Foundation/src/Glob.cpp + ${LIBRARY_DIR}/Foundation/src/Hash.cpp + ${LIBRARY_DIR}/Foundation/src/HashStatistic.cpp + ${LIBRARY_DIR}/Foundation/src/HexBinaryDecoder.cpp + ${LIBRARY_DIR}/Foundation/src/HexBinaryEncoder.cpp + ${LIBRARY_DIR}/Foundation/src/InflatingStream.cpp + ${LIBRARY_DIR}/Foundation/src/JSONString.cpp + ${LIBRARY_DIR}/Foundation/src/Latin1Encoding.cpp + ${LIBRARY_DIR}/Foundation/src/Latin2Encoding.cpp + ${LIBRARY_DIR}/Foundation/src/Latin9Encoding.cpp + ${LIBRARY_DIR}/Foundation/src/LineEndingConverter.cpp + ${LIBRARY_DIR}/Foundation/src/LocalDateTime.cpp + ${LIBRARY_DIR}/Foundation/src/LogFile.cpp + ${LIBRARY_DIR}/Foundation/src/Logger.cpp + ${LIBRARY_DIR}/Foundation/src/LoggingFactory.cpp + ${LIBRARY_DIR}/Foundation/src/LoggingRegistry.cpp + ${LIBRARY_DIR}/Foundation/src/LogStream.cpp + ${LIBRARY_DIR}/Foundation/src/Manifest.cpp + ${LIBRARY_DIR}/Foundation/src/MD4Engine.cpp + ${LIBRARY_DIR}/Foundation/src/MD5Engine.cpp + ${LIBRARY_DIR}/Foundation/src/MemoryPool.cpp + ${LIBRARY_DIR}/Foundation/src/MemoryStream.cpp + ${LIBRARY_DIR}/Foundation/src/Message.cpp + ${LIBRARY_DIR}/Foundation/src/Mutex.cpp + ${LIBRARY_DIR}/Foundation/src/NamedEvent.cpp + ${LIBRARY_DIR}/Foundation/src/NamedMutex.cpp + ${LIBRARY_DIR}/Foundation/src/NestedDiagnosticContext.cpp + ${LIBRARY_DIR}/Foundation/src/Notification.cpp + ${LIBRARY_DIR}/Foundation/src/NotificationCenter.cpp + ${LIBRARY_DIR}/Foundation/src/NotificationQueue.cpp + ${LIBRARY_DIR}/Foundation/src/NullChannel.cpp + ${LIBRARY_DIR}/Foundation/src/NullStream.cpp + ${LIBRARY_DIR}/Foundation/src/NumberFormatter.cpp + ${LIBRARY_DIR}/Foundation/src/NumberParser.cpp + ${LIBRARY_DIR}/Foundation/src/NumericString.cpp + ${LIBRARY_DIR}/Foundation/src/Path.cpp + ${LIBRARY_DIR}/Foundation/src/PatternFormatter.cpp + ${LIBRARY_DIR}/Foundation/src/Pipe.cpp + ${LIBRARY_DIR}/Foundation/src/PipeImpl.cpp + ${LIBRARY_DIR}/Foundation/src/PipeStream.cpp + ${LIBRARY_DIR}/Foundation/src/PriorityNotificationQueue.cpp + ${LIBRARY_DIR}/Foundation/src/Process.cpp + ${LIBRARY_DIR}/Foundation/src/PurgeStrategy.cpp + ${LIBRARY_DIR}/Foundation/src/Random.cpp + ${LIBRARY_DIR}/Foundation/src/RandomStream.cpp + ${LIBRARY_DIR}/Foundation/src/RefCountedObject.cpp + ${LIBRARY_DIR}/Foundation/src/RegularExpression.cpp + ${LIBRARY_DIR}/Foundation/src/RotateStrategy.cpp + ${LIBRARY_DIR}/Foundation/src/Runnable.cpp + ${LIBRARY_DIR}/Foundation/src/RWLock.cpp + ${LIBRARY_DIR}/Foundation/src/Semaphore.cpp + ${LIBRARY_DIR}/Foundation/src/SHA1Engine.cpp + ${LIBRARY_DIR}/Foundation/src/SharedLibrary.cpp + ${LIBRARY_DIR}/Foundation/src/SharedMemory.cpp + ${LIBRARY_DIR}/Foundation/src/SignalHandler.cpp + ${LIBRARY_DIR}/Foundation/src/SimpleFileChannel.cpp + ${LIBRARY_DIR}/Foundation/src/SortedDirectoryIterator.cpp + ${LIBRARY_DIR}/Foundation/src/SplitterChannel.cpp + ${LIBRARY_DIR}/Foundation/src/Stopwatch.cpp + ${LIBRARY_DIR}/Foundation/src/StreamChannel.cpp + ${LIBRARY_DIR}/Foundation/src/StreamConverter.cpp + ${LIBRARY_DIR}/Foundation/src/StreamCopier.cpp + ${LIBRARY_DIR}/Foundation/src/StreamTokenizer.cpp + ${LIBRARY_DIR}/Foundation/src/String.cpp + ${LIBRARY_DIR}/Foundation/src/StringTokenizer.cpp + ${LIBRARY_DIR}/Foundation/src/SynchronizedObject.cpp + ${LIBRARY_DIR}/Foundation/src/SyslogChannel.cpp + ${LIBRARY_DIR}/Foundation/src/Task.cpp + ${LIBRARY_DIR}/Foundation/src/TaskManager.cpp + ${LIBRARY_DIR}/Foundation/src/TaskNotification.cpp + ${LIBRARY_DIR}/Foundation/src/TeeStream.cpp + ${LIBRARY_DIR}/Foundation/src/TemporaryFile.cpp + ${LIBRARY_DIR}/Foundation/src/TextBufferIterator.cpp + ${LIBRARY_DIR}/Foundation/src/TextConverter.cpp + ${LIBRARY_DIR}/Foundation/src/TextEncoding.cpp + ${LIBRARY_DIR}/Foundation/src/TextIterator.cpp + ${LIBRARY_DIR}/Foundation/src/Thread.cpp + ${LIBRARY_DIR}/Foundation/src/ThreadLocal.cpp + ${LIBRARY_DIR}/Foundation/src/ThreadPool.cpp + ${LIBRARY_DIR}/Foundation/src/ThreadTarget.cpp + ${LIBRARY_DIR}/Foundation/src/TimedNotificationQueue.cpp + ${LIBRARY_DIR}/Foundation/src/Timer.cpp + ${LIBRARY_DIR}/Foundation/src/Timespan.cpp + ${LIBRARY_DIR}/Foundation/src/Timestamp.cpp + ${LIBRARY_DIR}/Foundation/src/Timezone.cpp + ${LIBRARY_DIR}/Foundation/src/Token.cpp + ${LIBRARY_DIR}/Foundation/src/Unicode.cpp + ${LIBRARY_DIR}/Foundation/src/UnicodeConverter.cpp + ${LIBRARY_DIR}/Foundation/src/URI.cpp + ${LIBRARY_DIR}/Foundation/src/URIStreamFactory.cpp + ${LIBRARY_DIR}/Foundation/src/URIStreamOpener.cpp + ${LIBRARY_DIR}/Foundation/src/UTF16Encoding.cpp + ${LIBRARY_DIR}/Foundation/src/UTF32Encoding.cpp + ${LIBRARY_DIR}/Foundation/src/UTF8Encoding.cpp + ${LIBRARY_DIR}/Foundation/src/UTF8String.cpp + ${LIBRARY_DIR}/Foundation/src/UUID.cpp + ${LIBRARY_DIR}/Foundation/src/UUIDGenerator.cpp + ${LIBRARY_DIR}/Foundation/src/Var.cpp + ${LIBRARY_DIR}/Foundation/src/VarHolder.cpp + ${LIBRARY_DIR}/Foundation/src/VarIterator.cpp + ${LIBRARY_DIR}/Foundation/src/Void.cpp + ${LIBRARY_DIR}/Foundation/src/Windows1250Encoding.cpp + ${LIBRARY_DIR}/Foundation/src/Windows1251Encoding.cpp + ${LIBRARY_DIR}/Foundation/src/Windows1252Encoding.cpp + ) + + add_library (_poco_foundation ${SRCS}) + add_library (Poco::Foundation ALIAS _poco_foundation) + + if (COMPILER_GCC) + target_compile_options (_poco_foundation + PUBLIC + -Wno-suggest-override + ) + elseif (COMPILER_CLANG) + target_compile_options (_poco_foundation + PUBLIC + -Wno-atomic-implicit-seq-cst + -Wno-deprecated + -Wno-extra-semi-stmt + -Wno-zero-as-null-pointer-constant + -Wno-implicit-int-float-conversion + -Wno-thread-safety-analysis + -Wno-thread-safety-negative + ) + endif () + target_compile_options (_poco_foundation + PUBLIC + -Wno-sign-compare + -Wno-unused-parameter + ) + target_compile_definitions (_poco_foundation + PRIVATE + POCO_UNBUNDLED + POCO_UNBUNDLED_ZLIB + PUBLIC + POCO_ENABLE_CPP11 + POCO_OS_FAMILY_UNIX + ) + target_include_directories (_poco_foundation PUBLIC ${LIBRARY_DIR}/Foundation/include) + target_link_libraries (_poco_foundation PRIVATE Poco::Foundation::PCRE zlib) +else () + add_library (Poco::Foundation UNKNOWN IMPORTED GLOBAL) + + find_library (LIBRARY_POCO_FOUNDATION PocoFoundation) + find_path (INCLUDE_POCO_FOUNDATION Poco/Foundation.h) + set_target_properties (Poco::Foundation PROPERTIES IMPORTED_LOCATION ${LIBRARY_POCO_FOUNDATION}) + set_target_properties (Poco::Foundation PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${INCLUDE_POCO_FOUNDATION}) + + message (STATUS "Using Poco::Foundation: ${LIBRARY_POCO_FOUNDATION} ${INCLUDE_POCO_FOUNDATION}") +endif () diff --git a/contrib/poco-cmake/JSON/CMakeLists.txt b/contrib/poco-cmake/JSON/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..36b4779d7e799605946c8af88128a61db75ba3a0 --- /dev/null +++ b/contrib/poco-cmake/JSON/CMakeLists.txt @@ -0,0 +1,42 @@ +if (USE_INTERNAL_POCO_LIBRARY) + # Poco::JSON (pdjson) + + set (SRCS_PDJSON + ${LIBRARY_DIR}/JSON/src/pdjson.c + ) + + add_library (_poco_json_pdjson ${SRCS_PDJSON}) + add_library (Poco::JSON::Pdjson ALIAS _poco_json_pdjson) + + # Poco::JSON + + set (SRCS + ${LIBRARY_DIR}/JSON/src/Array.cpp + ${LIBRARY_DIR}/JSON/src/Handler.cpp + ${LIBRARY_DIR}/JSON/src/JSONException.cpp + ${LIBRARY_DIR}/JSON/src/Object.cpp + ${LIBRARY_DIR}/JSON/src/ParseHandler.cpp + ${LIBRARY_DIR}/JSON/src/Parser.cpp + ${LIBRARY_DIR}/JSON/src/ParserImpl.cpp + ${LIBRARY_DIR}/JSON/src/PrintHandler.cpp + ${LIBRARY_DIR}/JSON/src/Query.cpp + ${LIBRARY_DIR}/JSON/src/Stringifier.cpp + ${LIBRARY_DIR}/JSON/src/Template.cpp + ${LIBRARY_DIR}/JSON/src/TemplateCache.cpp + ) + + add_library (_poco_json ${SRCS}) + add_library (Poco::JSON ALIAS _poco_json) + + target_include_directories (_poco_json PUBLIC ${LIBRARY_DIR}/JSON/include) + target_link_libraries (_poco_json PUBLIC Poco::Foundation Poco::JSON::Pdjson) +else () + add_library (Poco::JSON UNKNOWN IMPORTED GLOBAL) + + find_library (LIBRARY_POCO_JSON PocoJSON) + find_path (INCLUDE_POCO_JSON Poco/JSON/JSON.h) + set_target_properties (Poco::JSON PROPERTIES IMPORTED_LOCATION ${LIBRARY_POCO_JSON}) + set_target_properties (Poco::JSON PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${INCLUDE_POCO_JSON}) + + message (STATUS "Using Poco::JSON: ${LIBRARY_POCO_JSON} ${INCLUDE_POCO_JSON}") +endif () diff --git a/contrib/poco-cmake/MongoDB/CMakeLists.txt b/contrib/poco-cmake/MongoDB/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..8d63d50ba25c67a49b652930ed31ec8e7ca0bfdd --- /dev/null +++ b/contrib/poco-cmake/MongoDB/CMakeLists.txt @@ -0,0 +1,40 @@ +if (USE_INTERNAL_POCO_LIBRARY) + set (SRCS + ${LIBRARY_DIR}/MongoDB/src/Array.cpp + ${LIBRARY_DIR}/MongoDB/src/Binary.cpp + ${LIBRARY_DIR}/MongoDB/src/Connection.cpp + ${LIBRARY_DIR}/MongoDB/src/Cursor.cpp + ${LIBRARY_DIR}/MongoDB/src/Database.cpp + ${LIBRARY_DIR}/MongoDB/src/DeleteRequest.cpp + ${LIBRARY_DIR}/MongoDB/src/Document.cpp + ${LIBRARY_DIR}/MongoDB/src/Element.cpp + ${LIBRARY_DIR}/MongoDB/src/GetMoreRequest.cpp + ${LIBRARY_DIR}/MongoDB/src/InsertRequest.cpp + ${LIBRARY_DIR}/MongoDB/src/JavaScriptCode.cpp + ${LIBRARY_DIR}/MongoDB/src/KillCursorsRequest.cpp + ${LIBRARY_DIR}/MongoDB/src/Message.cpp + ${LIBRARY_DIR}/MongoDB/src/MessageHeader.cpp + ${LIBRARY_DIR}/MongoDB/src/ObjectId.cpp + ${LIBRARY_DIR}/MongoDB/src/QueryRequest.cpp + ${LIBRARY_DIR}/MongoDB/src/RegularExpression.cpp + ${LIBRARY_DIR}/MongoDB/src/ReplicaSet.cpp + ${LIBRARY_DIR}/MongoDB/src/RequestMessage.cpp + ${LIBRARY_DIR}/MongoDB/src/ResponseMessage.cpp + ${LIBRARY_DIR}/MongoDB/src/UpdateRequest.cpp + ) + + add_library (_poco_mongodb ${SRCS}) + add_library (Poco::MongoDB ALIAS _poco_mongodb) + + target_include_directories (_poco_mongodb PUBLIC ${LIBRARY_DIR}/MongoDB/include) + target_link_libraries (_poco_mongodb PUBLIC Poco::Net) +else () + add_library (Poco::MongoDB UNKNOWN IMPORTED GLOBAL) + + find_library (LIBRARY_POCO_MONGODB PocoMongoDB) + find_path (INCLUDE_POCO_MONGODB Poco/MongoDB/MongoDB.h) + set_target_properties (Poco::MongoDB PROPERTIES IMPORTED_LOCATION ${LIBRARY_POCO_MONGODB}) + set_target_properties (Poco::MongoDB PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${INCLUDE_POCO_MONGODB}) + + message (STATUS "Using Poco::MongoDB: ${LIBRARY_POCO_MONGODB} ${INCLUDE_POCO_MONGODB}") +endif () diff --git a/contrib/poco-cmake/Net/CMakeLists.txt b/contrib/poco-cmake/Net/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..3385d101987b37afccf9c922cbfa72505baff369 --- /dev/null +++ b/contrib/poco-cmake/Net/CMakeLists.txt @@ -0,0 +1,140 @@ +if (USE_INTERNAL_POCO_LIBRARY) + set (SRCS + ${LIBRARY_DIR}/Net/src/AbstractHTTPRequestHandler.cpp + ${LIBRARY_DIR}/Net/src/DatagramSocket.cpp + ${LIBRARY_DIR}/Net/src/DatagramSocketImpl.cpp + ${LIBRARY_DIR}/Net/src/DialogSocket.cpp + ${LIBRARY_DIR}/Net/src/DNS.cpp + ${LIBRARY_DIR}/Net/src/FilePartSource.cpp + ${LIBRARY_DIR}/Net/src/FTPClientSession.cpp + ${LIBRARY_DIR}/Net/src/FTPStreamFactory.cpp + ${LIBRARY_DIR}/Net/src/HostEntry.cpp + ${LIBRARY_DIR}/Net/src/HTMLForm.cpp + ${LIBRARY_DIR}/Net/src/HTTPAuthenticationParams.cpp + ${LIBRARY_DIR}/Net/src/HTTPBasicCredentials.cpp + ${LIBRARY_DIR}/Net/src/HTTPBufferAllocator.cpp + ${LIBRARY_DIR}/Net/src/HTTPChunkedStream.cpp + ${LIBRARY_DIR}/Net/src/HTTPClientSession.cpp + ${LIBRARY_DIR}/Net/src/HTTPCookie.cpp + ${LIBRARY_DIR}/Net/src/HTTPCredentials.cpp + ${LIBRARY_DIR}/Net/src/HTTPDigestCredentials.cpp + ${LIBRARY_DIR}/Net/src/HTTPFixedLengthStream.cpp + ${LIBRARY_DIR}/Net/src/HTTPHeaderStream.cpp + ${LIBRARY_DIR}/Net/src/HTTPIOStream.cpp + ${LIBRARY_DIR}/Net/src/HTTPMessage.cpp + ${LIBRARY_DIR}/Net/src/HTTPRequest.cpp + ${LIBRARY_DIR}/Net/src/HTTPRequestHandler.cpp + ${LIBRARY_DIR}/Net/src/HTTPRequestHandlerFactory.cpp + ${LIBRARY_DIR}/Net/src/HTTPResponse.cpp + ${LIBRARY_DIR}/Net/src/HTTPServer.cpp + ${LIBRARY_DIR}/Net/src/HTTPServerConnection.cpp + ${LIBRARY_DIR}/Net/src/HTTPServerConnectionFactory.cpp + ${LIBRARY_DIR}/Net/src/HTTPServerParams.cpp + ${LIBRARY_DIR}/Net/src/HTTPServerRequest.cpp + ${LIBRARY_DIR}/Net/src/HTTPServerRequestImpl.cpp + ${LIBRARY_DIR}/Net/src/HTTPServerResponse.cpp + ${LIBRARY_DIR}/Net/src/HTTPServerResponseImpl.cpp + ${LIBRARY_DIR}/Net/src/HTTPServerSession.cpp + ${LIBRARY_DIR}/Net/src/HTTPSession.cpp + ${LIBRARY_DIR}/Net/src/HTTPSessionFactory.cpp + ${LIBRARY_DIR}/Net/src/HTTPSessionInstantiator.cpp + ${LIBRARY_DIR}/Net/src/HTTPStream.cpp + ${LIBRARY_DIR}/Net/src/HTTPStreamFactory.cpp + ${LIBRARY_DIR}/Net/src/ICMPClient.cpp + ${LIBRARY_DIR}/Net/src/ICMPEventArgs.cpp + ${LIBRARY_DIR}/Net/src/ICMPPacket.cpp + ${LIBRARY_DIR}/Net/src/ICMPPacketImpl.cpp + ${LIBRARY_DIR}/Net/src/ICMPSocket.cpp + ${LIBRARY_DIR}/Net/src/ICMPSocketImpl.cpp + ${LIBRARY_DIR}/Net/src/ICMPv4PacketImpl.cpp + ${LIBRARY_DIR}/Net/src/IPAddress.cpp + ${LIBRARY_DIR}/Net/src/IPAddressImpl.cpp + ${LIBRARY_DIR}/Net/src/MailMessage.cpp + ${LIBRARY_DIR}/Net/src/MailRecipient.cpp + ${LIBRARY_DIR}/Net/src/MailStream.cpp + ${LIBRARY_DIR}/Net/src/MediaType.cpp + ${LIBRARY_DIR}/Net/src/MessageHeader.cpp + ${LIBRARY_DIR}/Net/src/MulticastSocket.cpp + ${LIBRARY_DIR}/Net/src/MultipartReader.cpp + ${LIBRARY_DIR}/Net/src/MultipartWriter.cpp + ${LIBRARY_DIR}/Net/src/NameValueCollection.cpp + ${LIBRARY_DIR}/Net/src/Net.cpp + ${LIBRARY_DIR}/Net/src/NetException.cpp + ${LIBRARY_DIR}/Net/src/NetworkInterface.cpp + ${LIBRARY_DIR}/Net/src/NTPClient.cpp + ${LIBRARY_DIR}/Net/src/NTPEventArgs.cpp + ${LIBRARY_DIR}/Net/src/NTPPacket.cpp + ${LIBRARY_DIR}/Net/src/NullPartHandler.cpp + ${LIBRARY_DIR}/Net/src/OAuth10Credentials.cpp + ${LIBRARY_DIR}/Net/src/OAuth20Credentials.cpp + ${LIBRARY_DIR}/Net/src/PartHandler.cpp + ${LIBRARY_DIR}/Net/src/PartSource.cpp + ${LIBRARY_DIR}/Net/src/PartStore.cpp + ${LIBRARY_DIR}/Net/src/PollSet.cpp + ${LIBRARY_DIR}/Net/src/POP3ClientSession.cpp + ${LIBRARY_DIR}/Net/src/QuotedPrintableDecoder.cpp + ${LIBRARY_DIR}/Net/src/QuotedPrintableEncoder.cpp + ${LIBRARY_DIR}/Net/src/RawSocket.cpp + ${LIBRARY_DIR}/Net/src/RawSocketImpl.cpp + ${LIBRARY_DIR}/Net/src/RemoteSyslogChannel.cpp + ${LIBRARY_DIR}/Net/src/RemoteSyslogListener.cpp + ${LIBRARY_DIR}/Net/src/ServerSocket.cpp + ${LIBRARY_DIR}/Net/src/ServerSocketImpl.cpp + ${LIBRARY_DIR}/Net/src/SMTPChannel.cpp + ${LIBRARY_DIR}/Net/src/SMTPClientSession.cpp + ${LIBRARY_DIR}/Net/src/Socket.cpp + ${LIBRARY_DIR}/Net/src/SocketAddress.cpp + ${LIBRARY_DIR}/Net/src/SocketAddressImpl.cpp + ${LIBRARY_DIR}/Net/src/SocketImpl.cpp + ${LIBRARY_DIR}/Net/src/SocketNotification.cpp + ${LIBRARY_DIR}/Net/src/SocketNotifier.cpp + ${LIBRARY_DIR}/Net/src/SocketReactor.cpp + ${LIBRARY_DIR}/Net/src/SocketStream.cpp + ${LIBRARY_DIR}/Net/src/StreamSocket.cpp + ${LIBRARY_DIR}/Net/src/StreamSocketImpl.cpp + ${LIBRARY_DIR}/Net/src/StringPartSource.cpp + ${LIBRARY_DIR}/Net/src/TCPServer.cpp + ${LIBRARY_DIR}/Net/src/TCPServerConnection.cpp + ${LIBRARY_DIR}/Net/src/TCPServerConnectionFactory.cpp + ${LIBRARY_DIR}/Net/src/TCPServerDispatcher.cpp + ${LIBRARY_DIR}/Net/src/TCPServerParams.cpp + ${LIBRARY_DIR}/Net/src/WebSocket.cpp + ${LIBRARY_DIR}/Net/src/WebSocketImpl.cpp + ) + + add_library (_poco_net ${SRCS}) + add_library (Poco::Net ALIAS _poco_net) + + if (OS_LINUX) + target_compile_definitions (_poco_net PUBLIC POCO_HAVE_FD_EPOLL) + elseif (OS_DARWIN OR OS_FREEBSD) + target_compile_definitions (_poco_net PUBLIC POCO_HAVE_FD_POLL) + endif () + + if (COMPILER_CLANG) + # clang-specific warnings + target_compile_options (_poco_net + PRIVATE + -Wno-atomic-implicit-seq-cst + -Wno-extra-semi-stmt + PUBLIC + -Wno-extra-semi + ) + endif () + target_compile_options (_poco_net + PRIVATE + -Wno-deprecated + -Wno-extra-semi + ) + target_include_directories (_poco_net PUBLIC ${LIBRARY_DIR}/Net/include) + target_link_libraries (_poco_net PUBLIC Poco::Foundation) +else () + add_library (Poco::Net UNKNOWN IMPORTED GLOBAL) + + find_library (LIBRARY_POCO_NET PocoNet) + find_path (INCLUDE_POCO_NET Poco/Net/Net.h) + set_target_properties (Poco::Net PROPERTIES IMPORTED_LOCATION ${LIBRARY_POCO_NET}) + set_target_properties (Poco::Net PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${INCLUDE_POCO_NET}) + + message (STATUS "Using Poco::Net: ${LIBRARY_POCO_NET} ${INCLUDE_POCO_NET}") +endif () diff --git a/contrib/poco-cmake/Net/SSL/CMakeLists.txt b/contrib/poco-cmake/Net/SSL/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..508ec5cb2c11e90b4333e41256838e0d011cf5a9 --- /dev/null +++ b/contrib/poco-cmake/Net/SSL/CMakeLists.txt @@ -0,0 +1,53 @@ +if (ENABLE_SSL) + if (USE_INTERNAL_POCO_LIBRARY) + set (SRCS + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/AcceptCertificateHandler.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/CertificateHandlerFactory.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/CertificateHandlerFactoryMgr.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/ConsoleCertificateHandler.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/Context.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/HTTPSClientSession.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/HTTPSSessionInstantiator.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/HTTPSStreamFactory.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/InvalidCertificateHandler.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/KeyConsoleHandler.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/KeyFileHandler.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/PrivateKeyFactory.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/PrivateKeyFactoryMgr.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/PrivateKeyPassphraseHandler.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/RejectCertificateHandler.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/SecureServerSocket.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/SecureServerSocketImpl.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/SecureSMTPClientSession.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/SecureSocketImpl.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/SecureStreamSocket.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/SecureStreamSocketImpl.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/Session.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/SSLException.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/SSLManager.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/Utility.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/VerificationErrorArgs.cpp + ${LIBRARY_DIR}/NetSSL_OpenSSL/src/X509Certificate.cpp + ) + + add_library (_poco_net_ssl ${SRCS}) + add_library (Poco::Net::SSL ALIAS _poco_net_ssl) + + target_include_directories (_poco_net_ssl PUBLIC ${LIBRARY_DIR}/NetSSL_OpenSSL/include) + target_link_libraries (_poco_net_ssl PUBLIC Poco::Crypto Poco::Net Poco::Util) + else () + add_library (Poco::Net::SSL UNKNOWN IMPORTED GLOBAL) + + find_library (LIBRARY_POCO_NET_SSL PocoNetSSL) + find_path (INCLUDE_POCO_NET_SSL Poco/Net/NetSSL.h) + set_target_properties (Poco::Net::SSL PROPERTIES IMPORTED_LOCATION ${LIBRARY_POCO_NET_SSL}) + set_target_properties (Poco::Net::SSL PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${INCLUDE_POCO_NET_SSL}) + + message (STATUS "Using Poco::Net::SSL: ${LIBRARY_POCO_NET_SSL} ${INCLUDE_POCO_NET_SSL}") + endif () +else () + add_library (_poco_net_ssl INTERFACE) + add_library (Poco::Net::SSL ALIAS _poco_net_ssl) + + message (STATUS "Not using Poco::Net::SSL") +endif () diff --git a/contrib/poco-cmake/Redis/CMakeLists.txt b/contrib/poco-cmake/Redis/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..d90204ef41d84c71135bff219778b68516f3c514 --- /dev/null +++ b/contrib/poco-cmake/Redis/CMakeLists.txt @@ -0,0 +1,34 @@ +if (USE_INTERNAL_POCO_LIBRARY) + set (SRCS + ${LIBRARY_DIR}/Redis/src/Array.cpp + ${LIBRARY_DIR}/Redis/src/AsyncReader.cpp + ${LIBRARY_DIR}/Redis/src/Client.cpp + ${LIBRARY_DIR}/Redis/src/Command.cpp + ${LIBRARY_DIR}/Redis/src/Error.cpp + ${LIBRARY_DIR}/Redis/src/Exception.cpp + ${LIBRARY_DIR}/Redis/src/RedisEventArgs.cpp + ${LIBRARY_DIR}/Redis/src/RedisStream.cpp + ${LIBRARY_DIR}/Redis/src/Type.cpp + ) + + add_library (_poco_redis ${SRCS}) + add_library (Poco::Redis ALIAS _poco_redis) + + if (COMPILER_GCC) + target_compile_options (_poco_redis PUBLIC -Wno-deprecated-copy) + endif () + target_compile_options (_poco_redis PUBLIC -Wno-shadow) + target_include_directories (_poco_redis PUBLIC ${LIBRARY_DIR}/Redis/include) + target_link_libraries (_poco_redis PUBLIC Poco::Net) +else () + add_library (Poco::Redis UNKNOWN IMPORTED GLOBAL) + + find_library (LIBRARY_POCO_REDIS PocoRedis) + find_path (INCLUDE_POCO_REDIS Poco/Redis/Redis.h) + set_target_properties (Poco::Redis PROPERTIES IMPORTED_LOCATION ${LIBRARY_POCO_REDIS}) + set_target_properties (Poco::Redis PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${INCLUDE_POCO_REDIS}) + + target_link_libraries (Poco::Redis INTERFACE Poco::Net) + + message (STATUS "Using Poco::Redis: ${LIBRARY_POCO_REDIS} ${INCLUDE_POCO_REDIS}") +endif () diff --git a/contrib/poco-cmake/Util/CMakeLists.txt b/contrib/poco-cmake/Util/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..01b537dcc51321711a04bd447cfada7b67ebbdf9 --- /dev/null +++ b/contrib/poco-cmake/Util/CMakeLists.txt @@ -0,0 +1,46 @@ +if (USE_INTERNAL_POCO_LIBRARY) + set (SRCS + ${LIBRARY_DIR}/Util/src/AbstractConfiguration.cpp + ${LIBRARY_DIR}/Util/src/Application.cpp + ${LIBRARY_DIR}/Util/src/ConfigurationMapper.cpp + ${LIBRARY_DIR}/Util/src/ConfigurationView.cpp + ${LIBRARY_DIR}/Util/src/FilesystemConfiguration.cpp + ${LIBRARY_DIR}/Util/src/HelpFormatter.cpp + ${LIBRARY_DIR}/Util/src/IniFileConfiguration.cpp + ${LIBRARY_DIR}/Util/src/IntValidator.cpp + ${LIBRARY_DIR}/Util/src/JSONConfiguration.cpp + ${LIBRARY_DIR}/Util/src/LayeredConfiguration.cpp + ${LIBRARY_DIR}/Util/src/LoggingConfigurator.cpp + ${LIBRARY_DIR}/Util/src/LoggingSubsystem.cpp + ${LIBRARY_DIR}/Util/src/MapConfiguration.cpp + ${LIBRARY_DIR}/Util/src/Option.cpp + ${LIBRARY_DIR}/Util/src/OptionCallback.cpp + ${LIBRARY_DIR}/Util/src/OptionException.cpp + ${LIBRARY_DIR}/Util/src/OptionProcessor.cpp + ${LIBRARY_DIR}/Util/src/OptionSet.cpp + ${LIBRARY_DIR}/Util/src/PropertyFileConfiguration.cpp + ${LIBRARY_DIR}/Util/src/RegExpValidator.cpp + ${LIBRARY_DIR}/Util/src/ServerApplication.cpp + ${LIBRARY_DIR}/Util/src/Subsystem.cpp + ${LIBRARY_DIR}/Util/src/SystemConfiguration.cpp + ${LIBRARY_DIR}/Util/src/Timer.cpp + ${LIBRARY_DIR}/Util/src/TimerTask.cpp + ${LIBRARY_DIR}/Util/src/Validator.cpp + ${LIBRARY_DIR}/Util/src/XMLConfiguration.cpp + ) + + add_library (_poco_util ${SRCS}) + add_library (Poco::Util ALIAS _poco_util) + + target_include_directories (_poco_util PUBLIC ${LIBRARY_DIR}/Util/include) + target_link_libraries (_poco_util PUBLIC Poco::JSON Poco::XML) +else () + add_library (Poco::Util UNKNOWN IMPORTED GLOBAL) + + find_library (LIBRARY_POCO_UTIL PocoUtil) + find_path (INCLUDE_POCO_UTIL Poco/Util/Util.h) + set_target_properties (Poco::Util PROPERTIES IMPORTED_LOCATION ${LIBRARY_POCO_UTIL}) + set_target_properties (Poco::Util PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${INCLUDE_POCO_UTIL}) + + message (STATUS "Using Poco::Util: ${LIBRARY_POCO_UTIL} ${INCLUDE_POCO_UTIL}") +endif () diff --git a/contrib/poco-cmake/XML/CMakeLists.txt b/contrib/poco-cmake/XML/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..5e1e8a23d9b1ef6321f9d75d39cc64f754a3b14a --- /dev/null +++ b/contrib/poco-cmake/XML/CMakeLists.txt @@ -0,0 +1,110 @@ +if (USE_INTERNAL_POCO_LIBRARY) + # Poco::XML (expat) + + set (SRCS_EXPAT + ${LIBRARY_DIR}/XML/src/xmlrole.c + ${LIBRARY_DIR}/XML/src/xmltok_impl.c + ${LIBRARY_DIR}/XML/src/xmltok_ns.c + ${LIBRARY_DIR}/XML/src/xmltok.c + ) + + add_library (_poco_xml_expat ${SRCS_EXPAT}) + add_library (Poco::XML::Expat ALIAS _poco_xml_expat) + + target_include_directories (_poco_xml_expat PUBLIC ${LIBRARY_DIR}/XML/include) + + # Poco::XML + + set (SRCS + ${LIBRARY_DIR}/XML/src/AbstractContainerNode.cpp + ${LIBRARY_DIR}/XML/src/AbstractNode.cpp + ${LIBRARY_DIR}/XML/src/Attr.cpp + ${LIBRARY_DIR}/XML/src/Attributes.cpp + ${LIBRARY_DIR}/XML/src/AttributesImpl.cpp + ${LIBRARY_DIR}/XML/src/AttrMap.cpp + ${LIBRARY_DIR}/XML/src/CDATASection.cpp + ${LIBRARY_DIR}/XML/src/CharacterData.cpp + ${LIBRARY_DIR}/XML/src/ChildNodesList.cpp + ${LIBRARY_DIR}/XML/src/Comment.cpp + ${LIBRARY_DIR}/XML/src/ContentHandler.cpp + ${LIBRARY_DIR}/XML/src/DeclHandler.cpp + ${LIBRARY_DIR}/XML/src/DefaultHandler.cpp + ${LIBRARY_DIR}/XML/src/Document.cpp + ${LIBRARY_DIR}/XML/src/DocumentEvent.cpp + ${LIBRARY_DIR}/XML/src/DocumentFragment.cpp + ${LIBRARY_DIR}/XML/src/DocumentType.cpp + ${LIBRARY_DIR}/XML/src/DOMBuilder.cpp + ${LIBRARY_DIR}/XML/src/DOMException.cpp + ${LIBRARY_DIR}/XML/src/DOMImplementation.cpp + ${LIBRARY_DIR}/XML/src/DOMObject.cpp + ${LIBRARY_DIR}/XML/src/DOMParser.cpp + ${LIBRARY_DIR}/XML/src/DOMSerializer.cpp + ${LIBRARY_DIR}/XML/src/DOMWriter.cpp + ${LIBRARY_DIR}/XML/src/DTDHandler.cpp + ${LIBRARY_DIR}/XML/src/DTDMap.cpp + ${LIBRARY_DIR}/XML/src/Element.cpp + ${LIBRARY_DIR}/XML/src/ElementsByTagNameList.cpp + ${LIBRARY_DIR}/XML/src/Entity.cpp + ${LIBRARY_DIR}/XML/src/EntityReference.cpp + ${LIBRARY_DIR}/XML/src/EntityResolver.cpp + ${LIBRARY_DIR}/XML/src/EntityResolverImpl.cpp + ${LIBRARY_DIR}/XML/src/ErrorHandler.cpp + ${LIBRARY_DIR}/XML/src/Event.cpp + ${LIBRARY_DIR}/XML/src/EventDispatcher.cpp + ${LIBRARY_DIR}/XML/src/EventException.cpp + ${LIBRARY_DIR}/XML/src/EventListener.cpp + ${LIBRARY_DIR}/XML/src/EventTarget.cpp + ${LIBRARY_DIR}/XML/src/InputSource.cpp + ${LIBRARY_DIR}/XML/src/LexicalHandler.cpp + ${LIBRARY_DIR}/XML/src/Locator.cpp + ${LIBRARY_DIR}/XML/src/LocatorImpl.cpp + ${LIBRARY_DIR}/XML/src/MutationEvent.cpp + ${LIBRARY_DIR}/XML/src/Name.cpp + ${LIBRARY_DIR}/XML/src/NamedNodeMap.cpp + ${LIBRARY_DIR}/XML/src/NamePool.cpp + ${LIBRARY_DIR}/XML/src/NamespaceStrategy.cpp + ${LIBRARY_DIR}/XML/src/NamespaceSupport.cpp + ${LIBRARY_DIR}/XML/src/Node.cpp + ${LIBRARY_DIR}/XML/src/NodeAppender.cpp + ${LIBRARY_DIR}/XML/src/NodeFilter.cpp + ${LIBRARY_DIR}/XML/src/NodeIterator.cpp + ${LIBRARY_DIR}/XML/src/NodeList.cpp + ${LIBRARY_DIR}/XML/src/Notation.cpp + ${LIBRARY_DIR}/XML/src/ParserEngine.cpp + ${LIBRARY_DIR}/XML/src/ProcessingInstruction.cpp + ${LIBRARY_DIR}/XML/src/QName.cpp + ${LIBRARY_DIR}/XML/src/SAXException.cpp + ${LIBRARY_DIR}/XML/src/SAXParser.cpp + ${LIBRARY_DIR}/XML/src/Text.cpp + ${LIBRARY_DIR}/XML/src/TreeWalker.cpp + ${LIBRARY_DIR}/XML/src/ValueTraits.cpp + ${LIBRARY_DIR}/XML/src/WhitespaceFilter.cpp + ${LIBRARY_DIR}/XML/src/XMLException.cpp + ${LIBRARY_DIR}/XML/src/XMLFilter.cpp + ${LIBRARY_DIR}/XML/src/XMLFilterImpl.cpp + ${LIBRARY_DIR}/XML/src/XMLReader.cpp + ${LIBRARY_DIR}/XML/src/XMLStreamParser.cpp + ${LIBRARY_DIR}/XML/src/XMLStreamParserException.cpp + ${LIBRARY_DIR}/XML/src/XMLString.cpp + ${LIBRARY_DIR}/XML/src/XMLWriter.cpp + + # expat + ${LIBRARY_DIR}/XML/src/xmlparse.cpp + ) + + add_library (_poco_xml ${SRCS}) + add_library (Poco::XML ALIAS _poco_xml) + + target_compile_options (_poco_xml PUBLIC -Wno-old-style-cast) + target_include_directories (_poco_xml PUBLIC ${LIBRARY_DIR}/XML/include) + target_link_libraries (_poco_xml PUBLIC Poco::Foundation Poco::XML::Expat) +else () + add_library (Poco::XML UNKNOWN IMPORTED GLOBAL) + + find_library (LIBRARY_POCO_XML PocoXML) + find_path (INCLUDE_POCO_XML Poco/XML/XML.h) + set_target_properties (Poco::XML PROPERTIES IMPORTED_LOCATION ${LIBRARY_POCO_XML}) + set_target_properties (Poco::XML PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${INCLUDE_POCO_XML}) + + message (STATUS "Using Poco::XML: ${LIBRARY_POCO_XML} ${INCLUDE_POCO_XML}") +endif () diff --git a/contrib/replxx-cmake/CMakeLists.txt b/contrib/replxx-cmake/CMakeLists.txt index cc428d957cf8b5223c40cfdf3173c082b64ed0d7..b8a3e51a6db0ce1c29b8cf327a71ad3808b1a2e2 100644 --- a/contrib/replxx-cmake/CMakeLists.txt +++ b/contrib/replxx-cmake/CMakeLists.txt @@ -45,7 +45,7 @@ if (ENABLE_REPLXX) endif () endif () - if (NOT (COMPILER_GCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)) + if (COMPILER_CLANG) target_compile_options(replxx PUBLIC -Wno-documentation) endif () diff --git a/contrib/unixodbc-cmake/CMakeLists.txt b/contrib/unixodbc-cmake/CMakeLists.txt index 1715747191cfffec944f4c8cffe9665ce3b23158..9a88fec7f3d7528263e70054710c2d62c64d2e7c 100644 --- a/contrib/unixodbc-cmake/CMakeLists.txt +++ b/contrib/unixodbc-cmake/CMakeLists.txt @@ -1,288 +1,319 @@ -set(ODBC_SOURCE_DIR ${ClickHouse_SOURCE_DIR}/contrib/unixodbc) -set(ODBC_BINARY_DIR ${ClickHouse_BINARY_DIR}/contrib/unixodbc) +option (ENABLE_ODBC "Enable ODBC library" ${ENABLE_LIBRARIES}) +if (NOT OS_LINUX) + set (ENABLE_ODBC OFF CACHE INTERNAL "") +endif () -set(SRCS -${ODBC_SOURCE_DIR}/libltdl/lt__alloc.c -${ODBC_SOURCE_DIR}/libltdl/lt__strl.c -${ODBC_SOURCE_DIR}/libltdl/ltdl.c -${ODBC_SOURCE_DIR}/libltdl/lt_dlloader.c -${ODBC_SOURCE_DIR}/libltdl/slist.c -${ODBC_SOURCE_DIR}/libltdl/lt_error.c -${ODBC_SOURCE_DIR}/libltdl/loaders/dlopen.c -${ODBC_SOURCE_DIR}/libltdl/loaders/preopen.c -#${ODBC_SOURCE_DIR}/libltdl/lt__dirent.c -#${ODBC_SOURCE_DIR}/libltdl/lt__argz.c -#${ODBC_SOURCE_DIR}/libltdl/loaders/dld_link.c -#${ODBC_SOURCE_DIR}/libltdl/loaders/load_add_on.c -#${ODBC_SOURCE_DIR}/libltdl/loaders/shl_load.c -#${ODBC_SOURCE_DIR}/libltdl/loaders/loadlibrary.c -#${ODBC_SOURCE_DIR}/libltdl/loaders/dyld.c +if (ENABLE_ODBC) + option (USE_INTERNAL_ODBC_LIBRARY "Use internal ODBC library" ${NOT_UNBUNDLED}) -# This file is generated by 'libtool' inside libltdl directory and then removed. -${CMAKE_CURRENT_SOURCE_DIR}/linux_x86_64/libltdl/libltdlcS.c -) + if (USE_INTERNAL_ODBC_LIBRARY) + set (LIBRARY_DIR ${ClickHouse_SOURCE_DIR}/contrib/unixodbc) -add_library(ltdl ${SRCS}) + # ltdl -target_include_directories(ltdl PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/linux_x86_64/libltdl) -target_include_directories(ltdl PUBLIC ${ODBC_SOURCE_DIR}/libltdl) -target_include_directories(ltdl PUBLIC ${ODBC_SOURCE_DIR}/libltdl/libltdl) + set (SRCS_LTDL + # This file is generated by 'libtool' inside libltdl directory and then removed. + linux_x86_64/libltdl/libltdlcS.c -target_compile_definitions(ltdl PRIVATE -DHAVE_CONFIG_H -DLTDL -DLTDLOPEN=libltdlc) + ${LIBRARY_DIR}/libltdl/lt__alloc.c + ${LIBRARY_DIR}/libltdl/lt__strl.c + ${LIBRARY_DIR}/libltdl/ltdl.c + ${LIBRARY_DIR}/libltdl/lt_dlloader.c + ${LIBRARY_DIR}/libltdl/slist.c + ${LIBRARY_DIR}/libltdl/lt_error.c + ${LIBRARY_DIR}/libltdl/loaders/dlopen.c + ${LIBRARY_DIR}/libltdl/loaders/preopen.c + ) -target_compile_options(ltdl PRIVATE -Wno-constant-logical-operand -Wno-unknown-warning-option -O2) + add_library (ltdl ${SRCS_LTDL}) + target_include_directories(ltdl + PRIVATE + linux_x86_64/libltdl + PUBLIC + ${LIBRARY_DIR}/libltdl + ${LIBRARY_DIR}/libltdl/libltdl + ) + target_compile_definitions(ltdl PRIVATE -DHAVE_CONFIG_H -DLTDL -DLTDLOPEN=libltdlc) + target_compile_options(ltdl PRIVATE -Wno-constant-logical-operand -Wno-unknown-warning-option -O2) -set(SRCS -${ODBC_SOURCE_DIR}/DriverManager/__attribute.c -${ODBC_SOURCE_DIR}/DriverManager/__connection.c -${ODBC_SOURCE_DIR}/DriverManager/__handles.c -${ODBC_SOURCE_DIR}/DriverManager/__info.c -${ODBC_SOURCE_DIR}/DriverManager/__stats.c -${ODBC_SOURCE_DIR}/DriverManager/SQLAllocConnect.c -${ODBC_SOURCE_DIR}/DriverManager/SQLAllocEnv.c -${ODBC_SOURCE_DIR}/DriverManager/SQLAllocHandle.c -${ODBC_SOURCE_DIR}/DriverManager/SQLAllocHandleStd.c -${ODBC_SOURCE_DIR}/DriverManager/SQLAllocStmt.c -${ODBC_SOURCE_DIR}/DriverManager/SQLBindCol.c -${ODBC_SOURCE_DIR}/DriverManager/SQLBindParam.c -${ODBC_SOURCE_DIR}/DriverManager/SQLBindParameter.c -${ODBC_SOURCE_DIR}/DriverManager/SQLBrowseConnect.c -${ODBC_SOURCE_DIR}/DriverManager/SQLBrowseConnectW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLBulkOperations.c -${ODBC_SOURCE_DIR}/DriverManager/SQLCancel.c -${ODBC_SOURCE_DIR}/DriverManager/SQLCancelHandle.c -${ODBC_SOURCE_DIR}/DriverManager/SQLCloseCursor.c -${ODBC_SOURCE_DIR}/DriverManager/SQLColAttribute.c -${ODBC_SOURCE_DIR}/DriverManager/SQLColAttributes.c -${ODBC_SOURCE_DIR}/DriverManager/SQLColAttributesW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLColAttributeW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLColumnPrivileges.c -${ODBC_SOURCE_DIR}/DriverManager/SQLColumnPrivilegesW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLColumns.c -${ODBC_SOURCE_DIR}/DriverManager/SQLColumnsW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLConnect.c -${ODBC_SOURCE_DIR}/DriverManager/SQLConnectW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLCopyDesc.c -${ODBC_SOURCE_DIR}/DriverManager/SQLDataSources.c -${ODBC_SOURCE_DIR}/DriverManager/SQLDataSourcesW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLDescribeCol.c -${ODBC_SOURCE_DIR}/DriverManager/SQLDescribeColW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLDescribeParam.c -${ODBC_SOURCE_DIR}/DriverManager/SQLDisconnect.c -${ODBC_SOURCE_DIR}/DriverManager/SQLDriverConnect.c -${ODBC_SOURCE_DIR}/DriverManager/SQLDriverConnectW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLDrivers.c -${ODBC_SOURCE_DIR}/DriverManager/SQLDriversW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLEndTran.c -${ODBC_SOURCE_DIR}/DriverManager/SQLError.c -${ODBC_SOURCE_DIR}/DriverManager/SQLErrorW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLExecDirect.c -${ODBC_SOURCE_DIR}/DriverManager/SQLExecDirectW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLExecute.c -${ODBC_SOURCE_DIR}/DriverManager/SQLExtendedFetch.c -${ODBC_SOURCE_DIR}/DriverManager/SQLFetch.c -${ODBC_SOURCE_DIR}/DriverManager/SQLFetchScroll.c -${ODBC_SOURCE_DIR}/DriverManager/SQLForeignKeys.c -${ODBC_SOURCE_DIR}/DriverManager/SQLForeignKeysW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLFreeConnect.c -${ODBC_SOURCE_DIR}/DriverManager/SQLFreeEnv.c -${ODBC_SOURCE_DIR}/DriverManager/SQLFreeHandle.c -${ODBC_SOURCE_DIR}/DriverManager/SQLFreeStmt.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetConnectAttr.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetConnectAttrW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetConnectOption.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetConnectOptionW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetCursorName.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetCursorNameW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetData.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetDescField.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetDescFieldW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetDescRec.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetDescRecW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetDiagField.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetDiagFieldW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetDiagRec.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetDiagRecW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetEnvAttr.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetFunctions.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetInfo.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetInfoW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetStmtAttr.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetStmtAttrW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetStmtOption.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetTypeInfo.c -${ODBC_SOURCE_DIR}/DriverManager/SQLGetTypeInfoW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLMoreResults.c -${ODBC_SOURCE_DIR}/DriverManager/SQLNativeSql.c -${ODBC_SOURCE_DIR}/DriverManager/SQLNativeSqlW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLNumParams.c -${ODBC_SOURCE_DIR}/DriverManager/SQLNumResultCols.c -${ODBC_SOURCE_DIR}/DriverManager/SQLParamData.c -${ODBC_SOURCE_DIR}/DriverManager/SQLParamOptions.c -${ODBC_SOURCE_DIR}/DriverManager/SQLPrepare.c -${ODBC_SOURCE_DIR}/DriverManager/SQLPrepareW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLPrimaryKeys.c -${ODBC_SOURCE_DIR}/DriverManager/SQLPrimaryKeysW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLProcedureColumns.c -${ODBC_SOURCE_DIR}/DriverManager/SQLProcedureColumnsW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLProcedures.c -${ODBC_SOURCE_DIR}/DriverManager/SQLProceduresW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLPutData.c -${ODBC_SOURCE_DIR}/DriverManager/SQLRowCount.c -${ODBC_SOURCE_DIR}/DriverManager/SQLSetConnectAttr.c -${ODBC_SOURCE_DIR}/DriverManager/SQLSetConnectAttrW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLSetConnectOption.c -${ODBC_SOURCE_DIR}/DriverManager/SQLSetConnectOptionW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLSetCursorName.c -${ODBC_SOURCE_DIR}/DriverManager/SQLSetCursorNameW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLSetDescField.c -${ODBC_SOURCE_DIR}/DriverManager/SQLSetDescFieldW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLSetDescRec.c -${ODBC_SOURCE_DIR}/DriverManager/SQLSetEnvAttr.c -${ODBC_SOURCE_DIR}/DriverManager/SQLSetParam.c -${ODBC_SOURCE_DIR}/DriverManager/SQLSetPos.c -${ODBC_SOURCE_DIR}/DriverManager/SQLSetScrollOptions.c -${ODBC_SOURCE_DIR}/DriverManager/SQLSetStmtAttr.c -${ODBC_SOURCE_DIR}/DriverManager/SQLSetStmtAttrW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLSetStmtOption.c -${ODBC_SOURCE_DIR}/DriverManager/SQLSetStmtOptionW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLSpecialColumns.c -${ODBC_SOURCE_DIR}/DriverManager/SQLSpecialColumnsW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLStatistics.c -${ODBC_SOURCE_DIR}/DriverManager/SQLStatisticsW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLTablePrivileges.c -${ODBC_SOURCE_DIR}/DriverManager/SQLTablePrivilegesW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLTables.c -${ODBC_SOURCE_DIR}/DriverManager/SQLTablesW.c -${ODBC_SOURCE_DIR}/DriverManager/SQLTransact.c + # odbc -${ODBC_SOURCE_DIR}/odbcinst/_logging.c -${ODBC_SOURCE_DIR}/odbcinst/_odbcinst_ConfigModeINI.c -${ODBC_SOURCE_DIR}/odbcinst/ODBCINSTConstructProperties.c -${ODBC_SOURCE_DIR}/odbcinst/ODBCINSTDestructProperties.c -${ODBC_SOURCE_DIR}/odbcinst/_odbcinst_GetEntries.c -${ODBC_SOURCE_DIR}/odbcinst/_odbcinst_GetSections.c -${ODBC_SOURCE_DIR}/odbcinst/ODBCINSTSetProperty.c -${ODBC_SOURCE_DIR}/odbcinst/_odbcinst_SystemINI.c -${ODBC_SOURCE_DIR}/odbcinst/_odbcinst_UserINI.c -${ODBC_SOURCE_DIR}/odbcinst/ODBCINSTValidateProperties.c -${ODBC_SOURCE_DIR}/odbcinst/ODBCINSTValidateProperty.c -${ODBC_SOURCE_DIR}/odbcinst/SQLConfigDataSource.c -${ODBC_SOURCE_DIR}/odbcinst/SQLConfigDriver.c -${ODBC_SOURCE_DIR}/odbcinst/SQLCreateDataSource.c -${ODBC_SOURCE_DIR}/odbcinst/_SQLDriverConnectPrompt.c -${ODBC_SOURCE_DIR}/odbcinst/SQLGetAvailableDrivers.c -${ODBC_SOURCE_DIR}/odbcinst/SQLGetConfigMode.c -${ODBC_SOURCE_DIR}/odbcinst/_SQLGetInstalledDrivers.c -${ODBC_SOURCE_DIR}/odbcinst/SQLGetInstalledDrivers.c -${ODBC_SOURCE_DIR}/odbcinst/SQLGetPrivateProfileString.c -${ODBC_SOURCE_DIR}/odbcinst/SQLGetTranslator.c -${ODBC_SOURCE_DIR}/odbcinst/SQLInstallDriverEx.c -${ODBC_SOURCE_DIR}/odbcinst/SQLInstallDriverManager.c -${ODBC_SOURCE_DIR}/odbcinst/SQLInstallerError.c -${ODBC_SOURCE_DIR}/odbcinst/SQLInstallODBC.c -${ODBC_SOURCE_DIR}/odbcinst/SQLInstallTranslatorEx.c -${ODBC_SOURCE_DIR}/odbcinst/SQLManageDataSources.c -${ODBC_SOURCE_DIR}/odbcinst/SQLPostInstallerError.c -${ODBC_SOURCE_DIR}/odbcinst/SQLReadFileDSN.c -${ODBC_SOURCE_DIR}/odbcinst/SQLRemoveDriver.c -${ODBC_SOURCE_DIR}/odbcinst/SQLRemoveDriverManager.c -${ODBC_SOURCE_DIR}/odbcinst/SQLRemoveDSNFromIni.c -${ODBC_SOURCE_DIR}/odbcinst/SQLRemoveTranslator.c -${ODBC_SOURCE_DIR}/odbcinst/SQLSetConfigMode.c -${ODBC_SOURCE_DIR}/odbcinst/SQLValidDSN.c -${ODBC_SOURCE_DIR}/odbcinst/SQLWriteDSNToIni.c -${ODBC_SOURCE_DIR}/odbcinst/SQLWriteFileDSN.c -${ODBC_SOURCE_DIR}/odbcinst/_SQLWriteInstalledDrivers.c -${ODBC_SOURCE_DIR}/odbcinst/SQLWritePrivateProfileString.c + set (SRCS + ${LIBRARY_DIR}/DriverManager/__attribute.c + ${LIBRARY_DIR}/DriverManager/__connection.c + ${LIBRARY_DIR}/DriverManager/__handles.c + ${LIBRARY_DIR}/DriverManager/__info.c + ${LIBRARY_DIR}/DriverManager/__stats.c + ${LIBRARY_DIR}/DriverManager/SQLAllocConnect.c + ${LIBRARY_DIR}/DriverManager/SQLAllocEnv.c + ${LIBRARY_DIR}/DriverManager/SQLAllocHandle.c + ${LIBRARY_DIR}/DriverManager/SQLAllocHandleStd.c + ${LIBRARY_DIR}/DriverManager/SQLAllocStmt.c + ${LIBRARY_DIR}/DriverManager/SQLBindCol.c + ${LIBRARY_DIR}/DriverManager/SQLBindParam.c + ${LIBRARY_DIR}/DriverManager/SQLBindParameter.c + ${LIBRARY_DIR}/DriverManager/SQLBrowseConnect.c + ${LIBRARY_DIR}/DriverManager/SQLBrowseConnectW.c + ${LIBRARY_DIR}/DriverManager/SQLBulkOperations.c + ${LIBRARY_DIR}/DriverManager/SQLCancel.c + ${LIBRARY_DIR}/DriverManager/SQLCancelHandle.c + ${LIBRARY_DIR}/DriverManager/SQLCloseCursor.c + ${LIBRARY_DIR}/DriverManager/SQLColAttribute.c + ${LIBRARY_DIR}/DriverManager/SQLColAttributes.c + ${LIBRARY_DIR}/DriverManager/SQLColAttributesW.c + ${LIBRARY_DIR}/DriverManager/SQLColAttributeW.c + ${LIBRARY_DIR}/DriverManager/SQLColumnPrivileges.c + ${LIBRARY_DIR}/DriverManager/SQLColumnPrivilegesW.c + ${LIBRARY_DIR}/DriverManager/SQLColumns.c + ${LIBRARY_DIR}/DriverManager/SQLColumnsW.c + ${LIBRARY_DIR}/DriverManager/SQLConnect.c + ${LIBRARY_DIR}/DriverManager/SQLConnectW.c + ${LIBRARY_DIR}/DriverManager/SQLCopyDesc.c + ${LIBRARY_DIR}/DriverManager/SQLDataSources.c + ${LIBRARY_DIR}/DriverManager/SQLDataSourcesW.c + ${LIBRARY_DIR}/DriverManager/SQLDescribeCol.c + ${LIBRARY_DIR}/DriverManager/SQLDescribeColW.c + ${LIBRARY_DIR}/DriverManager/SQLDescribeParam.c + ${LIBRARY_DIR}/DriverManager/SQLDisconnect.c + ${LIBRARY_DIR}/DriverManager/SQLDriverConnect.c + ${LIBRARY_DIR}/DriverManager/SQLDriverConnectW.c + ${LIBRARY_DIR}/DriverManager/SQLDrivers.c + ${LIBRARY_DIR}/DriverManager/SQLDriversW.c + ${LIBRARY_DIR}/DriverManager/SQLEndTran.c + ${LIBRARY_DIR}/DriverManager/SQLError.c + ${LIBRARY_DIR}/DriverManager/SQLErrorW.c + ${LIBRARY_DIR}/DriverManager/SQLExecDirect.c + ${LIBRARY_DIR}/DriverManager/SQLExecDirectW.c + ${LIBRARY_DIR}/DriverManager/SQLExecute.c + ${LIBRARY_DIR}/DriverManager/SQLExtendedFetch.c + ${LIBRARY_DIR}/DriverManager/SQLFetch.c + ${LIBRARY_DIR}/DriverManager/SQLFetchScroll.c + ${LIBRARY_DIR}/DriverManager/SQLForeignKeys.c + ${LIBRARY_DIR}/DriverManager/SQLForeignKeysW.c + ${LIBRARY_DIR}/DriverManager/SQLFreeConnect.c + ${LIBRARY_DIR}/DriverManager/SQLFreeEnv.c + ${LIBRARY_DIR}/DriverManager/SQLFreeHandle.c + ${LIBRARY_DIR}/DriverManager/SQLFreeStmt.c + ${LIBRARY_DIR}/DriverManager/SQLGetConnectAttr.c + ${LIBRARY_DIR}/DriverManager/SQLGetConnectAttrW.c + ${LIBRARY_DIR}/DriverManager/SQLGetConnectOption.c + ${LIBRARY_DIR}/DriverManager/SQLGetConnectOptionW.c + ${LIBRARY_DIR}/DriverManager/SQLGetCursorName.c + ${LIBRARY_DIR}/DriverManager/SQLGetCursorNameW.c + ${LIBRARY_DIR}/DriverManager/SQLGetData.c + ${LIBRARY_DIR}/DriverManager/SQLGetDescField.c + ${LIBRARY_DIR}/DriverManager/SQLGetDescFieldW.c + ${LIBRARY_DIR}/DriverManager/SQLGetDescRec.c + ${LIBRARY_DIR}/DriverManager/SQLGetDescRecW.c + ${LIBRARY_DIR}/DriverManager/SQLGetDiagField.c + ${LIBRARY_DIR}/DriverManager/SQLGetDiagFieldW.c + ${LIBRARY_DIR}/DriverManager/SQLGetDiagRec.c + ${LIBRARY_DIR}/DriverManager/SQLGetDiagRecW.c + ${LIBRARY_DIR}/DriverManager/SQLGetEnvAttr.c + ${LIBRARY_DIR}/DriverManager/SQLGetFunctions.c + ${LIBRARY_DIR}/DriverManager/SQLGetInfo.c + ${LIBRARY_DIR}/DriverManager/SQLGetInfoW.c + ${LIBRARY_DIR}/DriverManager/SQLGetStmtAttr.c + ${LIBRARY_DIR}/DriverManager/SQLGetStmtAttrW.c + ${LIBRARY_DIR}/DriverManager/SQLGetStmtOption.c + ${LIBRARY_DIR}/DriverManager/SQLGetTypeInfo.c + ${LIBRARY_DIR}/DriverManager/SQLGetTypeInfoW.c + ${LIBRARY_DIR}/DriverManager/SQLMoreResults.c + ${LIBRARY_DIR}/DriverManager/SQLNativeSql.c + ${LIBRARY_DIR}/DriverManager/SQLNativeSqlW.c + ${LIBRARY_DIR}/DriverManager/SQLNumParams.c + ${LIBRARY_DIR}/DriverManager/SQLNumResultCols.c + ${LIBRARY_DIR}/DriverManager/SQLParamData.c + ${LIBRARY_DIR}/DriverManager/SQLParamOptions.c + ${LIBRARY_DIR}/DriverManager/SQLPrepare.c + ${LIBRARY_DIR}/DriverManager/SQLPrepareW.c + ${LIBRARY_DIR}/DriverManager/SQLPrimaryKeys.c + ${LIBRARY_DIR}/DriverManager/SQLPrimaryKeysW.c + ${LIBRARY_DIR}/DriverManager/SQLProcedureColumns.c + ${LIBRARY_DIR}/DriverManager/SQLProcedureColumnsW.c + ${LIBRARY_DIR}/DriverManager/SQLProcedures.c + ${LIBRARY_DIR}/DriverManager/SQLProceduresW.c + ${LIBRARY_DIR}/DriverManager/SQLPutData.c + ${LIBRARY_DIR}/DriverManager/SQLRowCount.c + ${LIBRARY_DIR}/DriverManager/SQLSetConnectAttr.c + ${LIBRARY_DIR}/DriverManager/SQLSetConnectAttrW.c + ${LIBRARY_DIR}/DriverManager/SQLSetConnectOption.c + ${LIBRARY_DIR}/DriverManager/SQLSetConnectOptionW.c + ${LIBRARY_DIR}/DriverManager/SQLSetCursorName.c + ${LIBRARY_DIR}/DriverManager/SQLSetCursorNameW.c + ${LIBRARY_DIR}/DriverManager/SQLSetDescField.c + ${LIBRARY_DIR}/DriverManager/SQLSetDescFieldW.c + ${LIBRARY_DIR}/DriverManager/SQLSetDescRec.c + ${LIBRARY_DIR}/DriverManager/SQLSetEnvAttr.c + ${LIBRARY_DIR}/DriverManager/SQLSetParam.c + ${LIBRARY_DIR}/DriverManager/SQLSetPos.c + ${LIBRARY_DIR}/DriverManager/SQLSetScrollOptions.c + ${LIBRARY_DIR}/DriverManager/SQLSetStmtAttr.c + ${LIBRARY_DIR}/DriverManager/SQLSetStmtAttrW.c + ${LIBRARY_DIR}/DriverManager/SQLSetStmtOption.c + ${LIBRARY_DIR}/DriverManager/SQLSetStmtOptionW.c + ${LIBRARY_DIR}/DriverManager/SQLSpecialColumns.c + ${LIBRARY_DIR}/DriverManager/SQLSpecialColumnsW.c + ${LIBRARY_DIR}/DriverManager/SQLStatistics.c + ${LIBRARY_DIR}/DriverManager/SQLStatisticsW.c + ${LIBRARY_DIR}/DriverManager/SQLTablePrivileges.c + ${LIBRARY_DIR}/DriverManager/SQLTablePrivilegesW.c + ${LIBRARY_DIR}/DriverManager/SQLTables.c + ${LIBRARY_DIR}/DriverManager/SQLTablesW.c + ${LIBRARY_DIR}/DriverManager/SQLTransact.c + ${LIBRARY_DIR}/ini/_iniDump.c + ${LIBRARY_DIR}/ini/_iniObjectRead.c + ${LIBRARY_DIR}/ini/_iniPropertyRead.c + ${LIBRARY_DIR}/ini/_iniScanUntilObject.c + ${LIBRARY_DIR}/ini/iniAllTrim.c + ${LIBRARY_DIR}/ini/iniAppend.c + ${LIBRARY_DIR}/ini/iniClose.c + ${LIBRARY_DIR}/ini/iniCommit.c + ${LIBRARY_DIR}/ini/iniCursor.c + ${LIBRARY_DIR}/ini/iniDelete.c + ${LIBRARY_DIR}/ini/iniElement.c + ${LIBRARY_DIR}/ini/iniElementCount.c + ${LIBRARY_DIR}/ini/iniGetBookmark.c + ${LIBRARY_DIR}/ini/iniGotoBookmark.c + ${LIBRARY_DIR}/ini/iniObject.c + ${LIBRARY_DIR}/ini/iniObjectDelete.c + ${LIBRARY_DIR}/ini/iniObjectEOL.c + ${LIBRARY_DIR}/ini/iniObjectFirst.c + ${LIBRARY_DIR}/ini/iniObjectInsert.c + ${LIBRARY_DIR}/ini/iniObjectLast.c + ${LIBRARY_DIR}/ini/iniObjectNext.c + ${LIBRARY_DIR}/ini/iniObjectSeek.c + ${LIBRARY_DIR}/ini/iniObjectSeekSure.c + ${LIBRARY_DIR}/ini/iniObjectUpdate.c + ${LIBRARY_DIR}/ini/iniOpen.c + ${LIBRARY_DIR}/ini/iniProperty.c + ${LIBRARY_DIR}/ini/iniPropertyDelete.c + ${LIBRARY_DIR}/ini/iniPropertyEOL.c + ${LIBRARY_DIR}/ini/iniPropertyFirst.c + ${LIBRARY_DIR}/ini/iniPropertyInsert.c + ${LIBRARY_DIR}/ini/iniPropertyLast.c + ${LIBRARY_DIR}/ini/iniPropertyNext.c + ${LIBRARY_DIR}/ini/iniPropertySeek.c + ${LIBRARY_DIR}/ini/iniPropertySeekSure.c + ${LIBRARY_DIR}/ini/iniPropertyUpdate.c + ${LIBRARY_DIR}/ini/iniPropertyValue.c + ${LIBRARY_DIR}/ini/iniToUpper.c + ${LIBRARY_DIR}/ini/iniValue.c + ${LIBRARY_DIR}/log/_logFreeMsg.c + ${LIBRARY_DIR}/log/logClear.c + ${LIBRARY_DIR}/log/logClose.c + ${LIBRARY_DIR}/log/logOn.c + ${LIBRARY_DIR}/log/logOpen.c + ${LIBRARY_DIR}/log/logPeekMsg.c + ${LIBRARY_DIR}/log/logPopMsg.c + ${LIBRARY_DIR}/log/logPushMsg.c + ${LIBRARY_DIR}/lst/_lstAdjustCurrent.c + ${LIBRARY_DIR}/lst/_lstDump.c + ${LIBRARY_DIR}/lst/_lstFreeItem.c + ${LIBRARY_DIR}/lst/_lstNextValidItem.c + ${LIBRARY_DIR}/lst/_lstPrevValidItem.c + ${LIBRARY_DIR}/lst/_lstVisible.c + ${LIBRARY_DIR}/lst/lstAppend.c + ${LIBRARY_DIR}/lst/lstClose.c + ${LIBRARY_DIR}/lst/lstDelete.c + ${LIBRARY_DIR}/lst/lstEOL.c + ${LIBRARY_DIR}/lst/lstFirst.c + ${LIBRARY_DIR}/lst/lstGet.c + ${LIBRARY_DIR}/lst/lstGetBookMark.c + ${LIBRARY_DIR}/lst/lstGoto.c + ${LIBRARY_DIR}/lst/lstGotoBookMark.c + ${LIBRARY_DIR}/lst/lstInsert.c + ${LIBRARY_DIR}/lst/lstLast.c + ${LIBRARY_DIR}/lst/lstNext.c + ${LIBRARY_DIR}/lst/lstOpen.c + ${LIBRARY_DIR}/lst/lstOpenCursor.c + ${LIBRARY_DIR}/lst/lstPrev.c + ${LIBRARY_DIR}/lst/lstSeek.c + ${LIBRARY_DIR}/lst/lstSeekItem.c + ${LIBRARY_DIR}/lst/lstSet.c + ${LIBRARY_DIR}/lst/lstSetFreeFunc.c + ${LIBRARY_DIR}/odbcinst/_logging.c + ${LIBRARY_DIR}/odbcinst/_odbcinst_ConfigModeINI.c + ${LIBRARY_DIR}/odbcinst/_odbcinst_GetEntries.c + ${LIBRARY_DIR}/odbcinst/_odbcinst_GetSections.c + ${LIBRARY_DIR}/odbcinst/_odbcinst_SystemINI.c + ${LIBRARY_DIR}/odbcinst/_odbcinst_UserINI.c + ${LIBRARY_DIR}/odbcinst/_SQLDriverConnectPrompt.c + ${LIBRARY_DIR}/odbcinst/_SQLGetInstalledDrivers.c + ${LIBRARY_DIR}/odbcinst/_SQLWriteInstalledDrivers.c + ${LIBRARY_DIR}/odbcinst/ODBCINSTConstructProperties.c + ${LIBRARY_DIR}/odbcinst/ODBCINSTDestructProperties.c + ${LIBRARY_DIR}/odbcinst/ODBCINSTSetProperty.c + ${LIBRARY_DIR}/odbcinst/ODBCINSTValidateProperties.c + ${LIBRARY_DIR}/odbcinst/ODBCINSTValidateProperty.c + ${LIBRARY_DIR}/odbcinst/SQLConfigDataSource.c + ${LIBRARY_DIR}/odbcinst/SQLConfigDriver.c + ${LIBRARY_DIR}/odbcinst/SQLCreateDataSource.c + ${LIBRARY_DIR}/odbcinst/SQLGetAvailableDrivers.c + ${LIBRARY_DIR}/odbcinst/SQLGetConfigMode.c + ${LIBRARY_DIR}/odbcinst/SQLGetInstalledDrivers.c + ${LIBRARY_DIR}/odbcinst/SQLGetPrivateProfileString.c + ${LIBRARY_DIR}/odbcinst/SQLGetTranslator.c + ${LIBRARY_DIR}/odbcinst/SQLInstallDriverEx.c + ${LIBRARY_DIR}/odbcinst/SQLInstallDriverManager.c + ${LIBRARY_DIR}/odbcinst/SQLInstallerError.c + ${LIBRARY_DIR}/odbcinst/SQLInstallODBC.c + ${LIBRARY_DIR}/odbcinst/SQLInstallTranslatorEx.c + ${LIBRARY_DIR}/odbcinst/SQLManageDataSources.c + ${LIBRARY_DIR}/odbcinst/SQLPostInstallerError.c + ${LIBRARY_DIR}/odbcinst/SQLReadFileDSN.c + ${LIBRARY_DIR}/odbcinst/SQLRemoveDriver.c + ${LIBRARY_DIR}/odbcinst/SQLRemoveDriverManager.c + ${LIBRARY_DIR}/odbcinst/SQLRemoveDSNFromIni.c + ${LIBRARY_DIR}/odbcinst/SQLRemoveTranslator.c + ${LIBRARY_DIR}/odbcinst/SQLSetConfigMode.c + ${LIBRARY_DIR}/odbcinst/SQLValidDSN.c + ${LIBRARY_DIR}/odbcinst/SQLWriteDSNToIni.c + ${LIBRARY_DIR}/odbcinst/SQLWriteFileDSN.c + ${LIBRARY_DIR}/odbcinst/SQLWritePrivateProfileString.c + ) -${ODBC_SOURCE_DIR}/ini/iniAllTrim.c -${ODBC_SOURCE_DIR}/ini/iniAppend.c -${ODBC_SOURCE_DIR}/ini/iniClose.c -${ODBC_SOURCE_DIR}/ini/iniCommit.c -${ODBC_SOURCE_DIR}/ini/iniCursor.c -${ODBC_SOURCE_DIR}/ini/iniDelete.c -${ODBC_SOURCE_DIR}/ini/_iniDump.c -${ODBC_SOURCE_DIR}/ini/iniElement.c -${ODBC_SOURCE_DIR}/ini/iniElementCount.c -${ODBC_SOURCE_DIR}/ini/iniGetBookmark.c -${ODBC_SOURCE_DIR}/ini/iniGotoBookmark.c -${ODBC_SOURCE_DIR}/ini/iniObject.c -${ODBC_SOURCE_DIR}/ini/iniObjectDelete.c -${ODBC_SOURCE_DIR}/ini/iniObjectEOL.c -${ODBC_SOURCE_DIR}/ini/iniObjectFirst.c -${ODBC_SOURCE_DIR}/ini/iniObjectInsert.c -${ODBC_SOURCE_DIR}/ini/iniObjectLast.c -${ODBC_SOURCE_DIR}/ini/iniObjectNext.c -${ODBC_SOURCE_DIR}/ini/_iniObjectRead.c -${ODBC_SOURCE_DIR}/ini/iniObjectSeek.c -${ODBC_SOURCE_DIR}/ini/iniObjectSeekSure.c -${ODBC_SOURCE_DIR}/ini/iniObjectUpdate.c -${ODBC_SOURCE_DIR}/ini/iniOpen.c -${ODBC_SOURCE_DIR}/ini/iniProperty.c -${ODBC_SOURCE_DIR}/ini/iniPropertyDelete.c -${ODBC_SOURCE_DIR}/ini/iniPropertyEOL.c -${ODBC_SOURCE_DIR}/ini/iniPropertyFirst.c -${ODBC_SOURCE_DIR}/ini/iniPropertyInsert.c -${ODBC_SOURCE_DIR}/ini/iniPropertyLast.c -${ODBC_SOURCE_DIR}/ini/iniPropertyNext.c -${ODBC_SOURCE_DIR}/ini/_iniPropertyRead.c -${ODBC_SOURCE_DIR}/ini/iniPropertySeek.c -${ODBC_SOURCE_DIR}/ini/iniPropertySeekSure.c -${ODBC_SOURCE_DIR}/ini/iniPropertyUpdate.c -${ODBC_SOURCE_DIR}/ini/iniPropertyValue.c -${ODBC_SOURCE_DIR}/ini/_iniScanUntilObject.c -${ODBC_SOURCE_DIR}/ini/iniToUpper.c -${ODBC_SOURCE_DIR}/ini/iniValue.c + add_library (unixodbc ${SRCS}) -${ODBC_SOURCE_DIR}/log/logClear.c -${ODBC_SOURCE_DIR}/log/logClose.c -${ODBC_SOURCE_DIR}/log/_logFreeMsg.c -${ODBC_SOURCE_DIR}/log/logOn.c -${ODBC_SOURCE_DIR}/log/logOpen.c -${ODBC_SOURCE_DIR}/log/logPeekMsg.c -${ODBC_SOURCE_DIR}/log/logPopMsg.c -${ODBC_SOURCE_DIR}/log/logPushMsg.c + target_link_libraries (unixodbc PRIVATE ltdl) -${ODBC_SOURCE_DIR}/lst/_lstAdjustCurrent.c -${ODBC_SOURCE_DIR}/lst/lstAppend.c -${ODBC_SOURCE_DIR}/lst/lstClose.c -${ODBC_SOURCE_DIR}/lst/lstDelete.c -${ODBC_SOURCE_DIR}/lst/_lstDump.c -${ODBC_SOURCE_DIR}/lst/lstEOL.c -${ODBC_SOURCE_DIR}/lst/lstFirst.c -${ODBC_SOURCE_DIR}/lst/_lstFreeItem.c -${ODBC_SOURCE_DIR}/lst/lstGetBookMark.c -${ODBC_SOURCE_DIR}/lst/lstGet.c -${ODBC_SOURCE_DIR}/lst/lstGotoBookMark.c -${ODBC_SOURCE_DIR}/lst/lstGoto.c -${ODBC_SOURCE_DIR}/lst/lstInsert.c -${ODBC_SOURCE_DIR}/lst/lstLast.c -${ODBC_SOURCE_DIR}/lst/lstNext.c -${ODBC_SOURCE_DIR}/lst/_lstNextValidItem.c -${ODBC_SOURCE_DIR}/lst/lstOpen.c -${ODBC_SOURCE_DIR}/lst/lstOpenCursor.c -${ODBC_SOURCE_DIR}/lst/lstPrev.c -${ODBC_SOURCE_DIR}/lst/_lstPrevValidItem.c -${ODBC_SOURCE_DIR}/lst/lstSeek.c -${ODBC_SOURCE_DIR}/lst/lstSeekItem.c -${ODBC_SOURCE_DIR}/lst/lstSet.c -${ODBC_SOURCE_DIR}/lst/lstSetFreeFunc.c -${ODBC_SOURCE_DIR}/lst/_lstVisible.c -) + # SYSTEM_FILE_PATH was changed to /etc -add_library(unixodbc ${SRCS}) + target_include_directories (unixodbc + PRIVATE + linux_x86_64/private + PUBLIC + linux_x86_64 + ${LIBRARY_DIR}/include + ) + target_compile_definitions (unixodbc PRIVATE -DHAVE_CONFIG_H) + target_compile_options (unixodbc + PRIVATE + -Wno-dangling-else + -Wno-parentheses + -Wno-misleading-indentation + -Wno-unknown-warning-option + -O2 + PUBLIC + -Wno-reserved-id-macro + ) + else () + add_library (unixodbc UNKNOWN IMPORTED) -target_link_libraries(unixodbc PRIVATE ltdl) + find_library (LIBRARY_ODBC unixodbc) + find_path (INCLUDE_ODBC sql.h) + set_target_properties (unixodbc PROPERTIES IMPORTED_LOCATION ${LIBRARY_ODBC}) + set_target_properties (unixodbc PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${INCLUDE_ODBC}) + endif () -# SYSTEM_FILE_PATH was changed to /etc + target_compile_definitions (unixodbc PUBLIC USE_ODBC=1) -target_include_directories(unixodbc SYSTEM PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/linux_x86_64/private) -target_include_directories(unixodbc SYSTEM PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/linux_x86_64) -target_include_directories(unixodbc SYSTEM PUBLIC ${ODBC_SOURCE_DIR}/include) + message (STATUS "Using unixodbc") +else () + add_library (unixodbc INTERFACE) + target_compile_definitions (unixodbc INTERFACE USE_ODBC=0) -target_compile_definitions(unixodbc PRIVATE -DHAVE_CONFIG_H) - -target_compile_options(unixodbc PRIVATE -Wno-dangling-else -Wno-parentheses -Wno-misleading-indentation -Wno-unknown-warning-option -O2) + message (STATUS "Not using unixodbc") +endif () diff --git a/docker/packager/packager b/docker/packager/packager index 5b5f94f708c284ecb20ccd5d60277efe6c253fdc..025ca3bf398faca8ca622701f78fbd327d17d732 100755 --- a/docker/packager/packager +++ b/docker/packager/packager @@ -133,7 +133,7 @@ def parse_env_variables(build_type, compiler, sanitizer, package_type, image_typ if unbundled: # TODO: fix build with ENABLE_RDKAFKA - cmake_flags.append('-DUNBUNDLED=1 -DENABLE_MYSQL=0 -DENABLE_POCO_ODBC=0 -DENABLE_ODBC=0 -DENABLE_REPLXX=0 -DENABLE_RDKAFKA=0') + cmake_flags.append('-DUNBUNDLED=1 -DENABLE_MYSQL=0 -DENABLE_ODBC=0 -DENABLE_REPLXX=0 -DENABLE_RDKAFKA=0') if split_binary: cmake_flags.append('-DUSE_STATIC_LIBRARIES=0 -DSPLIT_SHARED_LIBRARIES=1 -DCLICKHOUSE_SPLIT_BINARY=1') @@ -162,7 +162,7 @@ if __name__ == "__main__": parser = argparse.ArgumentParser(description="ClickHouse building script using prebuilt Docker image") # 'performance' creates a combined .tgz with server and configs to be used for performance test. parser.add_argument("--package-type", choices=['deb', 'binary', 'performance'], required=True) - parser.add_argument("--clickhouse-repo-path", default="../../") + parser.add_argument("--clickhouse-repo-path", default=os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir, os.pardir)) parser.add_argument("--output-dir", required=True) parser.add_argument("--build-type", choices=("debug", ""), default="") parser.add_argument("--compiler", choices=("clang-10-darwin", "clang-10-aarch64", "clang-10-freebsd", "gcc-9", "clang-10"), default="gcc-9") diff --git a/programs/copier/CMakeLists.txt b/programs/copier/CMakeLists.txt index 76db6ce1ffcf1fcbf73545f9e988600f0746a016..5e52558a4a3fd1ea7d1fd9246dd6fa6b47cdfdc6 100644 --- a/programs/copier/CMakeLists.txt +++ b/programs/copier/CMakeLists.txt @@ -3,14 +3,19 @@ set(CLICKHOUSE_COPIER_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/ClusterCopier.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Internals.cpp) -set(CLICKHOUSE_COPIER_LINK PRIVATE - clickhouse_common_zookeeper - clickhouse_parsers - clickhouse_functions - clickhouse_table_functions - clickhouse_aggregate_functions - clickhouse_dictionaries - string_utils ${Poco_XML_LIBRARY} PUBLIC daemon) +set (CLICKHOUSE_COPIER_LINK + PRIVATE + clickhouse_common_zookeeper + clickhouse_parsers + clickhouse_functions + clickhouse_table_functions + clickhouse_aggregate_functions + clickhouse_dictionaries + string_utils + + PUBLIC + daemon +) set(CLICKHOUSE_COPIER_INCLUDE SYSTEM PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/programs/main.cpp b/programs/main.cpp index 3c16fb64a57143f84e85c4548afd54a767550129..2eb226d3c008c870a00d2f8c580884a8ab3c6eb3 100644 --- a/programs/main.cpp +++ b/programs/main.cpp @@ -11,9 +11,6 @@ #if __has_include("config_tools.h") #include "config_tools.h" #endif -#if __has_include() /// "Arcadia" build system lacks configure files. -#include -#endif #if __has_include("config_core.h") #include "config_core.h" #endif diff --git a/programs/odbc-bridge/CMakeLists.txt b/programs/odbc-bridge/CMakeLists.txt index 7bb128902e03db05e59886ba0597602935e63a06..87e872b69ec5a6bffa85eba04c29c2c1f9ce4ae9 100644 --- a/programs/odbc-bridge/CMakeLists.txt +++ b/programs/odbc-bridge/CMakeLists.txt @@ -1,39 +1,24 @@ -set(CLICKHOUSE_ODBC_BRIDGE_SOURCES - ${CMAKE_CURRENT_SOURCE_DIR}/ColumnInfoHandler.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/getIdentifierQuote.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/HandlerFactory.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/IdentifierQuoteHandler.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/MainHandler.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/ODBCBlockInputStream.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/ODBCBridge.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/PingHandler.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/validateODBCConnectionString.cpp +set (CLICKHOUSE_ODBC_BRIDGE_SOURCES + ColumnInfoHandler.cpp + getIdentifierQuote.cpp + HandlerFactory.cpp + IdentifierQuoteHandler.cpp + MainHandler.cpp + ODBCBlockInputStream.cpp + ODBCBridge.cpp + PingHandler.cpp + validateODBCConnectionString.cpp ) -set(CLICKHOUSE_ODBC_BRIDGE_LINK PRIVATE dbms clickhouse_parsers PUBLIC daemon) -set(CLICKHOUSE_ODBC_BRIDGE_INCLUDE PUBLIC ${ClickHouse_SOURCE_DIR}/base) - -if (USE_POCO_SQLODBC) - set(CLICKHOUSE_ODBC_BRIDGE_LINK ${CLICKHOUSE_ODBC_BRIDGE_LINK} PRIVATE ${Poco_SQLODBC_LIBRARY}) - # Wouldnt work anyway because of the way list variable got expanded in `target_include_directories` - # set(CLICKHOUSE_ODBC_BRIDGE_INCLUDE ${CLICKHOUSE_ODBC_BRIDGE_INCLUDE} SYSTEM PRIVATE ${ODBC_INCLUDE_DIRS} ${Poco_SQLODBC_INCLUDE_DIR}) -endif () -if (Poco_SQL_FOUND) - set(CLICKHOUSE_ODBC_BRIDGE_LINK ${CLICKHOUSE_ODBC_BRIDGE_LINK} PRIVATE ${Poco_SQL_LIBRARY}) - # Wouldnt work anyway because of the way list variable got expanded in `target_include_directories` - # set(CLICKHOUSE_ODBC_BRIDGE_INCLUDE ${CLICKHOUSE_ODBC_BRIDGE_INCLUDE} SYSTEM PRIVATE ${Poco_SQL_INCLUDE_DIR}) -endif () - -if (USE_POCO_DATAODBC) - set(CLICKHOUSE_ODBC_BRIDGE_LINK ${CLICKHOUSE_ODBC_BRIDGE_LINK} PRIVATE ${Poco_DataODBC_LIBRARY}) - # Wouldnt work anyway because of the way list variable got expanded in `target_include_directories` - # set(CLICKHOUSE_ODBC_BRIDGE_INCLUDE ${CLICKHOUSE_ODBC_BRIDGE_INCLUDE} SYSTEM PRIVATE ${ODBC_INCLUDE_DIRS} ${Poco_DataODBC_INCLUDE_DIR}) -endif() -if (Poco_Data_FOUND) - set(CLICKHOUSE_ODBC_BRIDGE_LINK ${CLICKHOUSE_ODBC_BRIDGE_LINK} PRIVATE ${Poco_Data_LIBRARY}) - # Wouldnt work anyway because of the way list variable got expanded in `target_include_directories` - # set(CLICKHOUSE_ODBC_BRIDGE_INCLUDE ${CLICKHOUSE_ODBC_BRIDGE_INCLUDE} SYSTEM PRIVATE ${Poco_Data_INCLUDE_DIR}) -endif () +set (CLICKHOUSE_ODBC_BRIDGE_LINK + PRIVATE + clickhouse_parsers + daemon + dbms + Poco::Data + PUBLIC + Poco::Data::ODBC +) clickhouse_program_add_library(odbc-bridge) diff --git a/programs/odbc-bridge/ColumnInfoHandler.cpp b/programs/odbc-bridge/ColumnInfoHandler.cpp index c5fb149284baf03ed84757e47d57ac27b8aa99f0..0d103a96344e2a4759619c59b4ec581e83f55c94 100644 --- a/programs/odbc-bridge/ColumnInfoHandler.cpp +++ b/programs/odbc-bridge/ColumnInfoHandler.cpp @@ -1,33 +1,26 @@ #include "ColumnInfoHandler.h" -#include "getIdentifierQuote.h" -#if USE_POCO_SQLODBC || USE_POCO_DATAODBC - -#if USE_POCO_SQLODBC -#include -#include -#include -#define POCO_SQL_ODBC_CLASS Poco::SQL::ODBC -#endif -#if USE_POCO_DATAODBC -#include -#include -#include -#define POCO_SQL_ODBC_CLASS Poco::Data::ODBC -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "validateODBCConnectionString.h" +#if USE_ODBC + +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include "getIdentifierQuote.h" +# include "validateODBCConnectionString.h" + +# define POCO_SQL_ODBC_CLASS Poco::Data::ODBC namespace DB { @@ -189,5 +182,7 @@ void ODBCColumnsInfoHandler::handleRequest(Poco::Net::HTTPServerRequest & reques tryLogCurrentException(log); } } + } + #endif diff --git a/programs/odbc-bridge/ColumnInfoHandler.h b/programs/odbc-bridge/ColumnInfoHandler.h index e1a5ad33b32a9c1ca7c22e61ab2bf75a418ab00b..04b4c06693bddb8d9e45103d66f60e54270ad866 100644 --- a/programs/odbc-bridge/ColumnInfoHandler.h +++ b/programs/odbc-bridge/ColumnInfoHandler.h @@ -1,16 +1,19 @@ #pragma once -#include -#include -#include -#include -#if USE_POCO_SQLODBC || USE_POCO_DATAODBC +#if USE_ODBC + +# include +# include +# include +# include + /** The structure of the table is taken from the query "SELECT * FROM table WHERE 1=0". * TODO: It would be much better to utilize ODBC methods dedicated for columns description. * If there is no such table, an exception is thrown. */ namespace DB { + class ODBCColumnsInfoHandler : public Poco::Net::HTTPRequestHandler { public: @@ -26,5 +29,7 @@ private: size_t keep_alive_timeout; Context & context; }; + } + #endif diff --git a/programs/odbc-bridge/HandlerFactory.cpp b/programs/odbc-bridge/HandlerFactory.cpp index 55c2c8d76373d7a6ff644af8027c28decda6cf0b..6ce04ac21a980085e99cc489a3d9ddc28338ad77 100644 --- a/programs/odbc-bridge/HandlerFactory.cpp +++ b/programs/odbc-bridge/HandlerFactory.cpp @@ -19,13 +19,13 @@ Poco::Net::HTTPRequestHandler * HandlerFactory::createRequestHandler(const Poco: { if (uri.getPath() == "/columns_info") -#if USE_POCO_SQLODBC || USE_POCO_DATAODBC +#if USE_ODBC return new ODBCColumnsInfoHandler(keep_alive_timeout, context); #else return nullptr; #endif else if (uri.getPath() == "/identifier_quote") -#if USE_POCO_SQLODBC || USE_POCO_DATAODBC +#if USE_ODBC return new IdentifierQuoteHandler(keep_alive_timeout, context); #else return nullptr; diff --git a/programs/odbc-bridge/IdentifierQuoteHandler.cpp b/programs/odbc-bridge/IdentifierQuoteHandler.cpp index 303165a4d45a2deeb5ad76633d70ba9ddfe9c072..f89cea5ab7e94fe6176cddc5a2c2409da00c95c2 100644 --- a/programs/odbc-bridge/IdentifierQuoteHandler.cpp +++ b/programs/odbc-bridge/IdentifierQuoteHandler.cpp @@ -1,31 +1,24 @@ #include "IdentifierQuoteHandler.h" -#if USE_POCO_SQLODBC || USE_POCO_DATAODBC -#if USE_POCO_SQLODBC -#include -#include -#include -#define POCO_SQL_ODBC_CLASS Poco::SQL::ODBC -#endif -#if USE_POCO_DATAODBC -#include -#include -#include -#define POCO_SQL_ODBC_CLASS Poco::Data::ODBC -#endif +#if USE_ODBC + +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include "getIdentifierQuote.h" +# include "validateODBCConnectionString.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "getIdentifierQuote.h" -#include "validateODBCConnectionString.h" +# define POCO_SQL_ODBC_CLASS Poco::Data::ODBC namespace DB { @@ -65,5 +58,7 @@ void IdentifierQuoteHandler::handleRequest(Poco::Net::HTTPServerRequest & reques tryLogCurrentException(log); } } + } + #endif diff --git a/programs/odbc-bridge/IdentifierQuoteHandler.h b/programs/odbc-bridge/IdentifierQuoteHandler.h index 86230d8ad178885ef8d39572e3a2b544420ff7ee..fd357e32786261b4ec4e2ce31832d48020490bcd 100644 --- a/programs/odbc-bridge/IdentifierQuoteHandler.h +++ b/programs/odbc-bridge/IdentifierQuoteHandler.h @@ -1,14 +1,15 @@ #pragma once + #include #include #include -#include -#if USE_POCO_SQLODBC || USE_POCO_DATAODBC -/** This handler establish connection to database, and retrieve quote style identifier - */ +#if USE_ODBC + +/// This handler establishes connection to database, and retrieve quote style identifier namespace DB { + class IdentifierQuoteHandler : public Poco::Net::HTTPRequestHandler { public: @@ -23,5 +24,7 @@ private: Poco::Logger * log; size_t keep_alive_timeout; }; + } + #endif diff --git a/programs/odbc-bridge/ODBCBridge.cpp b/programs/odbc-bridge/ODBCBridge.cpp index 1cfba4b3aa86b51081d45cb3402965a48026c463..819a5026fecc42538bd5f15f0a028c78c72011b0 100644 --- a/programs/odbc-bridge/ODBCBridge.cpp +++ b/programs/odbc-bridge/ODBCBridge.cpp @@ -6,10 +6,9 @@ #include #include -#if USE_POCO_SQLODBC || USE_POCO_DATAODBC -// It doesn't make much sense to build this bridge without ODBC, but we -// still do this. -#include +#if USE_ODBC +// It doesn't make much sense to build this bridge without ODBC, but we still do this. +# include #endif #include @@ -147,7 +146,7 @@ void ODBCBridge::initialize(Application & self) initializeTerminationAndSignalProcessing(); -#if USE_POCO_SQLODBC || USE_POCO_DATAODBC +#if USE_ODBC // It doesn't make much sense to build this bridge without ODBC, but we // still do this. Poco::Data::ODBC::Connector::registerConnector(); diff --git a/programs/odbc-bridge/getIdentifierQuote.cpp b/programs/odbc-bridge/getIdentifierQuote.cpp index 9ac0a56bfc678760770f6e582970d69e628b3ce9..766d5bf6bde8c727dec5171fc79426c07eba863c 100644 --- a/programs/odbc-bridge/getIdentifierQuote.cpp +++ b/programs/odbc-bridge/getIdentifierQuote.cpp @@ -1,22 +1,17 @@ #include "getIdentifierQuote.h" -#if USE_POCO_SQLODBC || USE_POCO_DATAODBC -#if USE_POCO_SQLODBC -#include -#include -#include -#define POCO_SQL_ODBC_CLASS Poco::SQL::ODBC -#endif -#if USE_POCO_DATAODBC -#include -#include -#include -#define POCO_SQL_ODBC_CLASS Poco::Data::ODBC -#endif +#if USE_ODBC + +# include +# include +# include + +# define POCO_SQL_ODBC_CLASS Poco::Data::ODBC namespace DB { + std::string getIdentifierQuote(SQLHDBC hdbc) { std::string identifier; @@ -40,5 +35,7 @@ std::string getIdentifierQuote(SQLHDBC hdbc) } return identifier; } + } + #endif diff --git a/programs/odbc-bridge/getIdentifierQuote.h b/programs/odbc-bridge/getIdentifierQuote.h index 30371b4060d43e838314649a78e5890d83dbe927..8bf119209c2e8d95413ea740dfa5888359be5659 100644 --- a/programs/odbc-bridge/getIdentifierQuote.h +++ b/programs/odbc-bridge/getIdentifierQuote.h @@ -1,22 +1,18 @@ #pragma once -#include -#include -#include -#include +#if USE_ODBC -#if USE_POCO_SQLODBC || USE_POCO_DATAODBC +# include +# include +# include -#if USE_POCO_SQLODBC -#include -#endif -#if USE_POCO_DATAODBC -#include -#endif +# include namespace DB { std::string getIdentifierQuote(SQLHDBC hdbc); + } + #endif diff --git a/programs/server/CMakeLists.txt b/programs/server/CMakeLists.txt index a252310cc93b3ee3d1edc5508cce7b8dfb5f6c90..026bb0bfeb213e868cac9144d5665cd8cb1e5303 100644 --- a/programs/server/CMakeLists.txt +++ b/programs/server/CMakeLists.txt @@ -18,10 +18,22 @@ set(CLICKHOUSE_SERVER_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/MySQLHandlerFactory.cpp ) -set(CLICKHOUSE_SERVER_LINK PRIVATE clickhouse_dictionaries clickhouse_common_io clickhouse_common_config clickhouse_common_zookeeper clickhouse_parsers string_utils PUBLIC daemon PRIVATE clickhouse_storages_system clickhouse_functions clickhouse_aggregate_functions clickhouse_table_functions ${Poco_Net_LIBRARY}) -if (USE_POCO_NETSSL) - set(CLICKHOUSE_SERVER_LINK ${CLICKHOUSE_SERVER_LINK} PRIVATE ${Poco_NetSSL_LIBRARY} ${Poco_Crypto_LIBRARY}) -endif () +set (CLICKHOUSE_SERVER_LINK + PRIVATE + clickhouse_aggregate_functions + clickhouse_common_config + clickhouse_common_io + clickhouse_common_zookeeper + clickhouse_dictionaries + clickhouse_functions + clickhouse_parsers + clickhouse_storages_system + clickhouse_table_functions + string_utils + + PUBLIC + daemon +) clickhouse_program_add(server) diff --git a/programs/server/MySQLHandler.cpp b/programs/server/MySQLHandler.cpp index 97d9f1919ac3bfa8e7db7826bffca5292a9b9bfe..a3ac3601e012ecb489821722d4b0b0bb9a44bd69 100644 --- a/programs/server/MySQLHandler.cpp +++ b/programs/server/MySQLHandler.cpp @@ -20,7 +20,7 @@ # include #endif -#if USE_POCO_NETSSL +#if USE_SSL # include # include # include @@ -32,7 +32,7 @@ namespace DB using namespace MySQLProtocol; -#if USE_POCO_NETSSL +#if USE_SSL using Poco::Net::SecureStreamSocket; using Poco::Net::SSLManager; #endif @@ -332,7 +332,7 @@ void MySQLHandler::finishHandshakeSSL([[maybe_unused]] size_t packet_size, [[may throw Exception("Client requested SSL, while it is disabled.", ErrorCodes::SUPPORT_IS_DISABLED); } -#if USE_SSL && USE_POCO_NETSSL +#if USE_SSL MySQLHandlerSSL::MySQLHandlerSSL(IServer & server_, const Poco::Net::StreamSocket & socket_, bool ssl_enabled, size_t connection_id_, RSA & public_key_, RSA & private_key_) : MySQLHandler(server_, socket_, ssl_enabled, connection_id_) , public_key(public_key_) diff --git a/programs/server/MySQLHandler.h b/programs/server/MySQLHandler.h index 01634dd68dc71a9eca4af997203cccc4f3e0b6f2..5f506089493a288a00900ebbf7a3b64bee15e67c 100644 --- a/programs/server/MySQLHandler.h +++ b/programs/server/MySQLHandler.h @@ -10,7 +10,7 @@ # include #endif -#if USE_POCO_NETSSL +#if USE_SSL # include #endif @@ -75,7 +75,7 @@ private: static const String show_table_status_replacement_query; }; -#if USE_SSL && USE_POCO_NETSSL +#if USE_SSL class MySQLHandlerSSL : public MySQLHandler { public: diff --git a/programs/server/MySQLHandlerFactory.cpp b/programs/server/MySQLHandlerFactory.cpp index 925a1e0af5faacd0b1ecae0a1491d6c312ae04f8..02a478b8efa9575119b49025a793af00fef3ee13 100644 --- a/programs/server/MySQLHandlerFactory.cpp +++ b/programs/server/MySQLHandlerFactory.cpp @@ -7,8 +7,8 @@ #include "IServer.h" #include "MySQLHandler.h" -#if USE_POCO_NETSSL -#include +#if USE_SSL +# include #endif namespace DB @@ -25,8 +25,7 @@ MySQLHandlerFactory::MySQLHandlerFactory(IServer & server_) : server(server_) , log(&Logger::get("MySQLHandlerFactory")) { - -#if USE_POCO_NETSSL +#if USE_SSL try { Poco::Net::SSLManager::instance().defaultServerContext(); @@ -36,9 +35,7 @@ MySQLHandlerFactory::MySQLHandlerFactory(IServer & server_) LOG_TRACE(log, "Failed to create SSL context. SSL will be disabled. Error: " << getCurrentExceptionMessage(false)); ssl_enabled = false; } -#endif -#if USE_SSL /// Reading rsa keys for SHA256 authentication plugin. try { @@ -126,7 +123,7 @@ Poco::Net::TCPServerConnection * MySQLHandlerFactory::createConnection(const Poc { size_t connection_id = last_connection_id++; LOG_TRACE(log, "MySQL connection. Id: " << connection_id << ". Address: " << socket.peerAddress().toString()); -#if USE_POCO_NETSSL && USE_SSL +#if USE_SSL return new MySQLHandlerSSL(server, socket, ssl_enabled, connection_id, *public_key, *private_key); #else return new MySQLHandler(server, socket, ssl_enabled, connection_id); diff --git a/programs/server/Server.cpp b/programs/server/Server.cpp index 161916a6103cfe3b799ae9f9370fb72064c7b309..9373d5dbaab524d6fe5be0920883abdb73cc6b3e 100644 --- a/programs/server/Server.cpp +++ b/programs/server/Server.cpp @@ -62,7 +62,6 @@ #include "MySQLHandlerFactory.h" #if !defined(ARCADIA_BUILD) -# include # include "config_core.h" # include "Common/config_version.h" #endif @@ -72,7 +71,7 @@ # include #endif -#if USE_POCO_NETSSL +#if USE_SSL # include # include #endif @@ -824,7 +823,7 @@ int Server::main(const std::vector & /*args*/) /// HTTPS create_server("https_port", [&](UInt16 port) { -#if USE_POCO_NETSSL +#if USE_SSL Poco::Net::SecureServerSocket socket; auto address = socket_bind_listen(socket, listen_host, port, /* secure = */ true); socket.setReceiveTimeout(settings.http_receive_timeout); @@ -859,7 +858,7 @@ int Server::main(const std::vector & /*args*/) /// TCP with SSL create_server("tcp_port_secure", [&](UInt16 port) { -#if USE_POCO_NETSSL +#if USE_SSL Poco::Net::SecureServerSocket socket; auto address = socket_bind_listen(socket, listen_host, port, /* secure = */ true); socket.setReceiveTimeout(settings.receive_timeout); @@ -892,7 +891,7 @@ int Server::main(const std::vector & /*args*/) create_server("interserver_https_port", [&](UInt16 port) { -#if USE_POCO_NETSSL +#if USE_SSL Poco::Net::SecureServerSocket socket; auto address = socket_bind_listen(socket, listen_host, port, /* secure = */ true); socket.setReceiveTimeout(settings.http_receive_timeout); diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e0ba1eeb2aaad151b72194bd1dd6002351763e08..4d6e245069b9c26e0a0706475700073ea964c47d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -377,20 +377,14 @@ set_source_files_properties( PROPERTIES COMPILE_FLAGS "-O3 ${WITHOUT_COVERAGE}") target_link_libraries (clickhouse_common_io - PUBLIC - common PRIVATE - string_utils - widechar_width - ${LINK_LIBRARIES_ONLY_ON_X86_64} - PUBLIC - ${DOUBLE_CONVERSION_LIBRARIES} - ryu + string_utils + widechar_width + ${LINK_LIBRARIES_ONLY_ON_X86_64} PUBLIC - ${Poco_Net_LIBRARY} - ${Poco_Util_LIBRARY} - ${Poco_Foundation_LIBRARY} - ${Poco_XML_LIBRARY} + common + ${DOUBLE_CONVERSION_LIBRARIES} + ryu ) if(RE2_LIBRARY) @@ -401,18 +395,17 @@ if(RE2_ST_LIBRARY) endif() target_link_libraries(clickhouse_common_io - PUBLIC - ${CITYHASH_LIBRARIES} - pcg_random PRIVATE - ${Poco_XML_LIBRARY} - ${ZLIB_LIBRARIES} - ${EXECINFO_LIBRARIES} + ${EXECINFO_LIBRARIES} + cpuid PUBLIC - ${Boost_SYSTEM_LIBRARY} - ${Boost_PROGRAM_OPTIONS_LIBRARY} - PUBLIC - roaring + ${Boost_PROGRAM_OPTIONS_LIBRARY} + ${Boost_SYSTEM_LIBRARY} + ${CITYHASH_LIBRARIES} + ${ZLIB_LIBRARIES} + pcg_random + Poco::Foundation + roaring ) if (USE_RDKAFKA) @@ -427,33 +420,22 @@ if(RE2_INCLUDE_DIR) target_include_directories(clickhouse_common_io SYSTEM BEFORE PUBLIC ${RE2_INCLUDE_DIR}) endif() -if(CPUID_LIBRARY) - target_link_libraries(clickhouse_common_io PRIVATE ${CPUID_LIBRARY}) -endif() - -if(CPUINFO_LIBRARY) - target_link_libraries(clickhouse_common_io PRIVATE ${CPUINFO_LIBRARY}) -endif() - dbms_target_link_libraries ( - PRIVATE - clickhouse_parsers - clickhouse_common_config - clickhouse_common_zookeeper - string_utils # FIXME: not sure if it's private - PUBLIC - clickhouse_common_io - PRIVATE - clickhouse_dictionaries_embedded - ${LZ4_LIBRARY} - PUBLIC - ${MYSQLXX_LIBRARY} - PRIVATE - ${BTRIE_LIBRARIES} - ${Boost_PROGRAM_OPTIONS_LIBRARY} - ${Boost_FILESYSTEM_LIBRARY} - PUBLIC - ${Boost_SYSTEM_LIBRARY} + PRIVATE + ${BTRIE_LIBRARIES} + ${Boost_PROGRAM_OPTIONS_LIBRARY} + ${Boost_FILESYSTEM_LIBRARY} + ${LZ4_LIBRARY} + clickhouse_parsers + clickhouse_common_config + clickhouse_common_zookeeper + clickhouse_dictionaries_embedded + Poco::JSON + string_utils + PUBLIC + ${Boost_SYSTEM_LIBRARY} + ${MYSQLXX_LIBRARY} + clickhouse_common_io ) target_include_directories(clickhouse_common_io PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/Core/include) # uses some includes from core @@ -476,52 +458,6 @@ if (NOT USE_INTERNAL_BOOST_LIBRARY) target_include_directories (clickhouse_common_io SYSTEM BEFORE PUBLIC ${Boost_INCLUDE_DIRS}) endif () -if (Poco_SQL_FOUND AND NOT USE_INTERNAL_POCO_LIBRARY) - target_include_directories (clickhouse_common_io SYSTEM PRIVATE ${Poco_SQL_INCLUDE_DIR}) - dbms_target_include_directories (SYSTEM PRIVATE ${Poco_SQL_INCLUDE_DIR}) -endif() - -if (USE_POCO_SQLODBC) - target_link_libraries (clickhouse_common_io PRIVATE ${Poco_SQL_LIBRARY}) - dbms_target_link_libraries (PRIVATE ${Poco_SQLODBC_LIBRARY} ${Poco_SQL_LIBRARY}) - if (NOT USE_INTERNAL_POCO_LIBRARY) - target_include_directories (clickhouse_common_io SYSTEM PRIVATE ${ODBC_INCLUDE_DIRS} ${Poco_SQL_INCLUDE_DIR}) - dbms_target_include_directories (SYSTEM PRIVATE ${ODBC_INCLUDE_DIRS} ${Poco_SQLODBC_INCLUDE_DIR} SYSTEM PUBLIC ${Poco_SQL_INCLUDE_DIR}) - endif() -endif() - -if (Poco_Data_FOUND) - target_include_directories (clickhouse_common_io SYSTEM PRIVATE ${Poco_Data_INCLUDE_DIR}) - dbms_target_include_directories (SYSTEM PRIVATE ${Poco_Data_INCLUDE_DIR}) -endif() - -if (USE_POCO_DATAODBC) - target_link_libraries (clickhouse_common_io PRIVATE ${Poco_Data_LIBRARY}) - dbms_target_link_libraries (PRIVATE ${Poco_DataODBC_LIBRARY}) - if (NOT USE_INTERNAL_POCO_LIBRARY) - dbms_target_include_directories (SYSTEM PRIVATE ${ODBC_INCLUDE_DIRS} ${Poco_DataODBC_INCLUDE_DIR}) - endif() -endif() - -if (USE_POCO_MONGODB) - dbms_target_link_libraries (PRIVATE ${Poco_MongoDB_LIBRARY}) -endif() - -if (USE_POCO_REDIS) - dbms_target_link_libraries (PRIVATE ${Poco_Redis_LIBRARY}) -endif() - -if (USE_POCO_NETSSL) - target_link_libraries (clickhouse_common_io PRIVATE ${Poco_NetSSL_LIBRARY} ${Poco_Crypto_LIBRARY}) - dbms_target_link_libraries (PRIVATE ${Poco_NetSSL_LIBRARY} ${Poco_Crypto_LIBRARY}) -endif() - -if (USE_POCO_JSON) - dbms_target_link_libraries (PRIVATE ${Poco_JSON_LIBRARY}) -endif() - -dbms_target_link_libraries (PRIVATE ${Poco_Foundation_LIBRARY}) - if (USE_ICU) dbms_target_link_libraries (PRIVATE ${ICU_LIBRARIES}) dbms_target_include_directories (SYSTEM PRIVATE ${ICU_INCLUDE_DIRS}) diff --git a/src/Client/Connection.cpp b/src/Client/Connection.cpp index 7c46c82d81036697422f2909d3a3e7644cb11626..7f12e02ae3a18bf2d7fe73afc6625411ea700ed3 100644 --- a/src/Client/Connection.cpp +++ b/src/Client/Connection.cpp @@ -30,7 +30,7 @@ # include #endif -#if USE_POCO_NETSSL +#if USE_SSL # include #endif @@ -66,7 +66,7 @@ void Connection::connect(const ConnectionTimeouts & timeouts) if (static_cast(secure)) { -#if USE_POCO_NETSSL +#if USE_SSL socket = std::make_unique(); #else throw Exception{"tcp_secure protocol is disabled because poco library was built without NetSSL support.", ErrorCodes::SUPPORT_IS_DISABLED}; diff --git a/src/Common/Config/CMakeLists.txt b/src/Common/Config/CMakeLists.txt index c2869763f1b2359e6228dabc2f446e94669f87c1..11cdcba212281430d82c528a68f1ae75dc542380 100644 --- a/src/Common/Config/CMakeLists.txt +++ b/src/Common/Config/CMakeLists.txt @@ -1,8 +1,18 @@ -include(${ClickHouse_SOURCE_DIR}/cmake/dbms_glob_sources.cmake) +set (SRCS + AbstractConfigurationComparison.cpp + ConfigProcessor.cpp + configReadClient.cpp + ConfigReloader.cpp +) -add_headers_and_sources(clickhouse_common_config .) +add_library(clickhouse_common_config ${SRCS}) -add_library(clickhouse_common_config ${clickhouse_common_config_headers} ${clickhouse_common_config_sources}) - -target_link_libraries(clickhouse_common_config PUBLIC common PRIVATE clickhouse_common_zookeeper string_utils PUBLIC ${Poco_XML_LIBRARY} ${Poco_Util_LIBRARY}) target_include_directories(clickhouse_common_config PUBLIC ${DBMS_INCLUDE_DIR}) +target_link_libraries(clickhouse_common_config + PUBLIC + common + PRIVATE + clickhouse_common_zookeeper + Poco::XML + string_utils +) diff --git a/src/Common/QueryProfiler.h b/src/Common/QueryProfiler.h index f00a081972e9e82c4dd57a4d2d196b45c7f01929..581d6d75bf24d233411318c339dd6cd21078e00a 100644 --- a/src/Common/QueryProfiler.h +++ b/src/Common/QueryProfiler.h @@ -6,7 +6,6 @@ #if !defined(ARCADIA_BUILD) # include -# include #endif diff --git a/src/Common/ZooKeeper/CMakeLists.txt b/src/Common/ZooKeeper/CMakeLists.txt index 4dbf999419e0b84a396891bde9a4b154c89c7bf5..90a75f1d9ec733c65a58b1276a82084426eeabd4 100644 --- a/src/Common/ZooKeeper/CMakeLists.txt +++ b/src/Common/ZooKeeper/CMakeLists.txt @@ -4,13 +4,9 @@ add_headers_and_sources(clickhouse_common_zookeeper .) add_library(clickhouse_common_zookeeper ${clickhouse_common_zookeeper_headers} ${clickhouse_common_zookeeper_sources}) -target_link_libraries (clickhouse_common_zookeeper PUBLIC clickhouse_common_io common PRIVATE string_utils PUBLIC ${Poco_Util_LIBRARY}) +target_link_libraries (clickhouse_common_zookeeper PUBLIC clickhouse_common_io common PRIVATE string_utils) target_include_directories(clickhouse_common_zookeeper PUBLIC ${DBMS_INCLUDE_DIR}) -if (USE_POCO_NETSSL) - target_link_libraries (clickhouse_common_zookeeper PRIVATE ${Poco_NetSSL_LIBRARY} ${Poco_Crypto_LIBRARY}) -endif() - if (ENABLE_TESTS) add_subdirectory (tests) endif () diff --git a/src/Common/ZooKeeper/ZooKeeperImpl.cpp b/src/Common/ZooKeeper/ZooKeeperImpl.cpp index fd873658d7a57a89ff266a289193368d72dcb8cc..e6cab23d2ce038fae2fb7c6b7ea8128962de05a1 100644 --- a/src/Common/ZooKeeper/ZooKeeperImpl.cpp +++ b/src/Common/ZooKeeper/ZooKeeperImpl.cpp @@ -15,8 +15,8 @@ # include #endif -#if USE_POCO_NETSSL -#include +#if USE_SSL +# include #endif #include @@ -898,7 +898,7 @@ void ZooKeeper::connect( /// Reset the state of previous attempt. if (node.secure) { -#if USE_POCO_NETSSL +#if USE_SSL socket = Poco::Net::SecureStreamSocket(); #else throw Exception{"Communication with ZooKeeper over SSL is disabled because poco library was built without NetSSL support.", ErrorCodes::SUPPORT_IS_DISABLED}; diff --git a/src/Common/config.h.in b/src/Common/config.h.in index 084fad128e3985a05dfe0349ff52d6f1380ef7cb..a1ffdb2101d31d29d626675beca09004d054b0e7 100644 --- a/src/Common/config.h.in +++ b/src/Common/config.h.in @@ -4,11 +4,8 @@ #cmakedefine01 USE_RE2_ST #cmakedefine01 USE_SSL -#cmakedefine01 USE_POCO_NETSSL #cmakedefine01 USE_HDFS #cmakedefine01 USE_AWS_S3 -#cmakedefine01 USE_CPUID -#cmakedefine01 USE_CPUINFO #cmakedefine01 USE_BROTLI #cmakedefine01 USE_UNWIND #cmakedefine01 CLICKHOUSE_SPLIT_BINARY diff --git a/src/Common/getNumberOfPhysicalCPUCores.cpp b/src/Common/getNumberOfPhysicalCPUCores.cpp index 1eaa64ae2a49eadb289050f23add1aa54a00edff..3808a367f8ba584e8a8865bd6def5f638bd137b1 100644 --- a/src/Common/getNumberOfPhysicalCPUCores.cpp +++ b/src/Common/getNumberOfPhysicalCPUCores.cpp @@ -1,18 +1,11 @@ -#include -#include - -#if !defined(ARCADIA_BUILD) -# include -#else -# include -#endif +#include "getNumberOfPhysicalCPUCores.h" #if USE_CPUID # include -#elif USE_CPUINFO -# include #endif +#include + unsigned getNumberOfPhysicalCPUCores() { @@ -36,14 +29,6 @@ unsigned getNumberOfPhysicalCPUCores() if (res != 0) return res; - -#elif USE_CPUINFO - uint32_t cores = 0; - if (cpuinfo_initialize()) - cores = cpuinfo_get_cores_count(); - - if (cores) - return cores; #endif /// As a fallback (also for non-x86 architectures) assume there are no hyper-threading on the system. diff --git a/src/Core/config_core.h.in b/src/Core/config_core.h.in index 2365340cf3365e7d8278e785b664e000d752be72..054ee9a80b71b50094b4abd30f5eb7afafb74823 100644 --- a/src/Core/config_core.h.in +++ b/src/Core/config_core.h.in @@ -6,10 +6,5 @@ #cmakedefine01 USE_MYSQL #cmakedefine01 USE_RDKAFKA #cmakedefine01 USE_EMBEDDED_COMPILER -#cmakedefine01 USE_POCO_SQLODBC -#cmakedefine01 USE_POCO_DATAODBC -#cmakedefine01 USE_POCO_MONGODB -#cmakedefine01 USE_POCO_REDIS -#cmakedefine01 USE_POCO_JSON #cmakedefine01 USE_INTERNAL_LLVM_LIBRARY #cmakedefine01 USE_SSL diff --git a/src/Dictionaries/CMakeLists.txt b/src/Dictionaries/CMakeLists.txt index 0a7693edc601ffa294bedceac5eab389f28256f0..4471b093add5b04a3cc0b7296d13b98a2c942d32 100644 --- a/src/Dictionaries/CMakeLists.txt +++ b/src/Dictionaries/CMakeLists.txt @@ -8,37 +8,18 @@ list(REMOVE_ITEM clickhouse_dictionaries_sources DictionaryFactory.cpp Dictionar list(REMOVE_ITEM clickhouse_dictionaries_headers DictionaryFactory.h DictionarySourceFactory.h DictionaryStructure.h getDictionaryConfigurationFromAST.h) add_library(clickhouse_dictionaries ${clickhouse_dictionaries_sources}) -target_link_libraries(clickhouse_dictionaries PRIVATE dbms clickhouse_common_io string_utils ${BTRIE_LIBRARIES}) -if(Poco_SQL_FOUND AND NOT USE_INTERNAL_POCO_LIBRARY) - target_include_directories(clickhouse_dictionaries SYSTEM PRIVATE ${Poco_SQL_INCLUDE_DIR}) -endif() - -if(USE_POCO_SQLODBC) - target_link_libraries(clickhouse_dictionaries PRIVATE ${Poco_SQLODBC_LIBRARY} ${Poco_SQL_LIBRARY}) - target_include_directories(clickhouse_dictionaries SYSTEM PRIVATE ${ODBC_INCLUDE_DIRS} ${Poco_SQLODBC_INCLUDE_DIR} ${Poco_SQL_INCLUDE_DIR}) -endif() - -if(Poco_Data_FOUND) - target_include_directories(clickhouse_dictionaries SYSTEM PRIVATE ${Poco_Data_INCLUDE_DIR}) -endif() - -if(USE_POCO_DATAODBC) - target_link_libraries(clickhouse_dictionaries PRIVATE ${Poco_DataODBC_LIBRARY} ${Poco_Data_LIBRARY}) - target_include_directories(clickhouse_dictionaries SYSTEM PRIVATE ${ODBC_INCLUDE_DIRS} ${Poco_DataODBC_INCLUDE_DIR}) -endif() - -if(USE_POCO_MONGODB) - target_link_libraries(clickhouse_dictionaries PRIVATE ${Poco_MongoDB_LIBRARY}) -endif() - -if(USE_POCO_REDIS) - # for code highlighting in CLion - # target_include_directories(clickhouse_dictionaries SYSTEM PRIVATE ${Poco_Redis_INCLUDE_DIR}) - - # for build - target_link_libraries(clickhouse_dictionaries PRIVATE ${Poco_Redis_LIBRARY}) -endif() +target_link_libraries(clickhouse_dictionaries + PRIVATE + ${BTRIE_LIBRARIES} + clickhouse_common_io + dbms + Poco::Data + Poco::Data::ODBC + Poco::MongoDB + Poco::Redis + string_utils +) add_subdirectory(Embedded) diff --git a/src/Dictionaries/MongoDBBlockInputStream.cpp b/src/Dictionaries/MongoDBBlockInputStream.cpp index e0ff7cb6529f00daa9e820b3510e4d4cf3f26f1e..fbfb738f0577e6e80b1051bf185669f4eff4f076 100644 --- a/src/Dictionaries/MongoDBBlockInputStream.cpp +++ b/src/Dictionaries/MongoDBBlockInputStream.cpp @@ -1,27 +1,22 @@ -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif - -#if USE_POCO_MONGODB -# include -# include -# include - -# include -# include -# include -# include - -# include -# include -# include -# include -# include -# include -# include -# include -# include "DictionaryStructure.h" -# include "MongoDBBlockInputStream.h" +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include "DictionaryStructure.h" +#include "MongoDBBlockInputStream.h" namespace DB @@ -236,5 +231,3 @@ Block MongoDBBlockInputStream::readImpl() } } - -#endif diff --git a/src/Dictionaries/MongoDBDictionarySource.cpp b/src/Dictionaries/MongoDBDictionarySource.cpp index 7247d8a4613aa361b4b11623c9deb0bb716e887b..2e423b7d51147b14a762421bc184a6396174a2a9 100644 --- a/src/Dictionaries/MongoDBDictionarySource.cpp +++ b/src/Dictionaries/MongoDBDictionarySource.cpp @@ -5,29 +5,16 @@ namespace DB { -namespace ErrorCodes -{ - extern const int SUPPORT_IS_DISABLED; -} void registerDictionarySourceMongoDB(DictionarySourceFactory & factory) { auto create_table_source = [=](const DictionaryStructure & dict_struct, - const Poco::Util::AbstractConfiguration & config, - const std::string & config_prefix, - Block & sample_block, - const Context & /* context */, - bool /* check_config */) -> DictionarySourcePtr { -#if USE_POCO_MONGODB + const Poco::Util::AbstractConfiguration & config, + const std::string & config_prefix, + Block & sample_block, + const Context & /* context */, + bool /* check_config */) -> DictionarySourcePtr { return std::make_unique(dict_struct, config, config_prefix + ".mongodb", sample_block); -#else - (void)dict_struct; - (void)config; - (void)config_prefix; - (void)sample_block; - throw Exception{"Dictionary source of type `mongodb` is disabled because poco library was built without mongodb support.", - ErrorCodes::SUPPORT_IS_DISABLED}; -#endif }; factory.registerSource("mongodb", create_table_source); } @@ -35,24 +22,22 @@ void registerDictionarySourceMongoDB(DictionarySourceFactory & factory) } -#if USE_POCO_MONGODB - -# include -# include -# include -# include -# include -# include -# include +#include +#include +#include +#include +#include +#include +#include // only after poco // naming conflict: // Poco/MongoDB/BSONWriter.h:54: void writeCString(const std::string & value); // src/IO/WriteHelpers.h:146 #define writeCString(s, buf) -# include -# include -# include -# include "MongoDBBlockInputStream.h" +#include +#include +#include +#include "MongoDBBlockInputStream.h" namespace DB @@ -67,7 +52,7 @@ namespace ErrorCodes static const UInt64 max_block_size = 8192; -# if POCO_VERSION < 0x01070800 +#if POCO_VERSION < 0x01070800 /// See https://pocoproject.org/forum/viewtopic.php?f=10&t=6326&p=11426&hilit=mongodb+auth#p11485 static void authenticate(Poco::MongoDB::Connection & connection, const std::string & database, const std::string & user, const std::string & password) @@ -165,7 +150,7 @@ authenticate(Poco::MongoDB::Connection & connection, const std::string & databas } } } -# endif +#endif MongoDBDictionarySource::MongoDBDictionarySource( @@ -191,13 +176,13 @@ MongoDBDictionarySource::MongoDBDictionarySource( { if (!user.empty()) { -# if POCO_VERSION >= 0x01070800 +#if POCO_VERSION >= 0x01070800 Poco::MongoDB::Database poco_db(db); if (!poco_db.authenticate(*connection, user, password, method.empty() ? Poco::MongoDB::Database::AUTH_SCRAM_SHA1 : method)) throw Exception("Cannot authenticate in MongoDB, incorrect user or password", ErrorCodes::MONGODB_CANNOT_AUTHENTICATE); -# else +#else authenticate(*connection, db, user, password); -# endif +#endif } } @@ -208,29 +193,22 @@ MongoDBDictionarySource::MongoDBDictionarySource( const std::string & config_prefix, Block & sample_block_) : MongoDBDictionarySource( - dict_struct_, - config.getString(config_prefix + ".host"), - config.getUInt(config_prefix + ".port"), - config.getString(config_prefix + ".user", ""), - config.getString(config_prefix + ".password", ""), - config.getString(config_prefix + ".method", ""), - config.getString(config_prefix + ".db", ""), - config.getString(config_prefix + ".collection"), - sample_block_) + dict_struct_, + config.getString(config_prefix + ".host"), + config.getUInt(config_prefix + ".port"), + config.getString(config_prefix + ".user", ""), + config.getString(config_prefix + ".password", ""), + config.getString(config_prefix + ".method", ""), + config.getString(config_prefix + ".db", ""), + config.getString(config_prefix + ".collection"), + sample_block_) { } MongoDBDictionarySource::MongoDBDictionarySource(const MongoDBDictionarySource & other) - : MongoDBDictionarySource{other.dict_struct, - other.host, - other.port, - other.user, - other.password, - other.method, - other.db, - other.collection, - other.sample_block} + : MongoDBDictionarySource{ + other.dict_struct, other.host, other.port, other.user, other.password, other.method, other.db, other.collection, other.sample_block} { } @@ -348,5 +326,3 @@ std::string MongoDBDictionarySource::toString() const } } - -#endif diff --git a/src/Dictionaries/MongoDBDictionarySource.h b/src/Dictionaries/MongoDBDictionarySource.h index 622d61c5b090978175ffbbf0419b774d0e7461ef..23562c7550059bd928fde8f5aefd057e1887d5bd 100644 --- a/src/Dictionaries/MongoDBDictionarySource.h +++ b/src/Dictionaries/MongoDBDictionarySource.h @@ -2,13 +2,8 @@ #include -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif - -#if USE_POCO_MONGODB -# include "DictionaryStructure.h" -# include "IDictionarySource.h" +#include "DictionaryStructure.h" +#include "IDictionarySource.h" namespace Poco { @@ -94,5 +89,3 @@ private: }; } - -#endif diff --git a/src/Dictionaries/RedisBlockInputStream.cpp b/src/Dictionaries/RedisBlockInputStream.cpp index 7531d19ad83590f899ea902b2ea30ac9a3825225..a3ee86ae1d663a0b68eed8741f512879454f6a80 100644 --- a/src/Dictionaries/RedisBlockInputStream.cpp +++ b/src/Dictionaries/RedisBlockInputStream.cpp @@ -1,23 +1,21 @@ #include "RedisBlockInputStream.h" -#if USE_POCO_REDIS +#include +#include -# include -# include +#include +#include +#include +#include -# include -# include -# include -# include +#include +#include +#include +#include +#include +#include -# include -# include -# include -# include -# include -# include - -# include "DictionaryStructure.h" +#include "DictionaryStructure.h" namespace DB @@ -208,5 +206,3 @@ namespace DB return description.sample_block.cloneWithColumns(std::move(columns)); } } - -#endif diff --git a/src/Dictionaries/RedisBlockInputStream.h b/src/Dictionaries/RedisBlockInputStream.h index 6e350e7c4f1d67b73ea67b59c6566704bd996bfd..185cfedb09d9d62c774295d918eb0a645432f107 100644 --- a/src/Dictionaries/RedisBlockInputStream.h +++ b/src/Dictionaries/RedisBlockInputStream.h @@ -2,16 +2,11 @@ #include -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif - -#if USE_POCO_REDIS -# include -# include -# include "RedisDictionarySource.h" -# include -# include +#include +#include +#include +#include +#include "RedisDictionarySource.h" namespace Poco { @@ -56,5 +51,3 @@ namespace DB }; } - -#endif diff --git a/src/Dictionaries/RedisDictionarySource.cpp b/src/Dictionaries/RedisDictionarySource.cpp index 6e32b7766b4f5e31c32d9b8bdffe20c83318584f..de3eae034c5e11c378a26d7e97044e35b9f05d16 100644 --- a/src/Dictionaries/RedisDictionarySource.cpp +++ b/src/Dictionaries/RedisDictionarySource.cpp @@ -5,48 +5,33 @@ namespace DB { - namespace ErrorCodes - { - extern const int SUPPORT_IS_DISABLED; - } - void registerDictionarySourceRedis(DictionarySourceFactory & factory) - { - auto create_table_source = [=](const DictionaryStructure & dict_struct, - const Poco::Util::AbstractConfiguration & config, - const String & config_prefix, - Block & sample_block, - const Context & /* context */, - bool /* check_config */) -> DictionarySourcePtr { -#if USE_POCO_REDIS +void registerDictionarySourceRedis(DictionarySourceFactory & factory) +{ + auto create_table_source = [=](const DictionaryStructure & dict_struct, + const Poco::Util::AbstractConfiguration & config, + const String & config_prefix, + Block & sample_block, + const Context & /* context */, + bool /* check_config */) -> DictionarySourcePtr { return std::make_unique(dict_struct, config, config_prefix + ".redis", sample_block); -#else - UNUSED(dict_struct); - UNUSED(config); - UNUSED(config_prefix); - UNUSED(sample_block); - throw Exception{"Dictionary source of type `redis` is disabled because poco library was built without redis support.", - ErrorCodes::SUPPORT_IS_DISABLED}; -#endif - }; - factory.registerSource("redis", create_table_source); - } - + }; + factory.registerSource("redis", create_table_source); } +} -#if USE_POCO_REDIS -# include -# include -# include -# include -# include +#include +#include +#include +#include +#include -# include -# include +#include +#include -# include "RedisBlockInputStream.h" +#include "RedisBlockInputStream.h" namespace DB @@ -233,5 +218,3 @@ namespace DB return RedisStorageType::SIMPLE; } } - -#endif diff --git a/src/Dictionaries/RedisDictionarySource.h b/src/Dictionaries/RedisDictionarySource.h index e42bd2678cb77509cd2042f6bbe2342d084410c2..b30c428cb2d507d6c80957657aabea8f4cfb30a2 100644 --- a/src/Dictionaries/RedisDictionarySource.h +++ b/src/Dictionaries/RedisDictionarySource.h @@ -2,13 +2,8 @@ #include -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif - -#if USE_POCO_REDIS -# include "DictionaryStructure.h" -# include "IDictionarySource.h" +#include "DictionaryStructure.h" +#include "IDictionarySource.h" namespace Poco { @@ -103,5 +98,3 @@ namespace ErrorCodes }; } - -#endif diff --git a/src/Dictionaries/XDBCDictionarySource.cpp b/src/Dictionaries/XDBCDictionarySource.cpp index 3fea0a024ef468c78e3fb386fd5d704ac19ad17d..03d31fa001fe46de22fc5cef105cfe1df3827392 100644 --- a/src/Dictionaries/XDBCDictionarySource.cpp +++ b/src/Dictionaries/XDBCDictionarySource.cpp @@ -18,11 +18,7 @@ #include "registerDictionaries.h" -#if !defined(ARCADIA_BUILD) -# include -#endif - -#if USE_POCO_SQLODBC || USE_POCO_DATAODBC +#if USE_ODBC # include #endif @@ -235,17 +231,17 @@ BlockInputStreamPtr XDBCDictionarySource::loadBase(const std::string & query) co void registerDictionarySourceXDBC(DictionarySourceFactory & factory) { -#if USE_POCO_SQLODBC || USE_POCO_DATAODBC +#if USE_ODBC Poco::Data::ODBC::Connector::registerConnector(); #endif auto create_table_source = [=](const DictionaryStructure & dict_struct, - const Poco::Util::AbstractConfiguration & config, - const std::string & config_prefix, - Block & sample_block, - const Context & context, - bool /* check_config */) -> DictionarySourcePtr { -#if USE_POCO_SQLODBC || USE_POCO_DATAODBC + const Poco::Util::AbstractConfiguration & config, + const std::string & config_prefix, + Block & sample_block, + const Context & context, + bool /* check_config */) -> DictionarySourcePtr { +#if USE_ODBC BridgeHelperPtr bridge = std::make_shared>( context, context.getSettings().http_receive_timeout, config.getString(config_prefix + ".odbc.connection_string")); return std::make_unique(dict_struct, config, config_prefix + ".odbc", sample_block, context, bridge); @@ -278,5 +274,4 @@ void registerDictionarySourceJDBC(DictionarySourceFactory & factory) factory.registerSource("jdbc", create_table_source); } - } diff --git a/src/IO/HTTPCommon.cpp b/src/IO/HTTPCommon.cpp index 97a0525a9b8d8508b1b221ab44a6316a16e4b5a5..7200dfe558d9a84b09665efd0220c7f95a7e5dfd 100644 --- a/src/IO/HTTPCommon.cpp +++ b/src/IO/HTTPCommon.cpp @@ -12,7 +12,7 @@ # include #endif -#if USE_POCO_NETSSL +#if USE_SSL # include # include # include @@ -73,7 +73,7 @@ namespace HTTPSessionPtr session; if (https) -#if USE_POCO_NETSSL +#if USE_SSL session = std::make_shared(); #else throw Exception("ClickHouse was built without HTTPS support", ErrorCodes::FEATURE_IS_NOT_ENABLED_AT_BUILD_TIME); diff --git a/src/IO/UseSSL.cpp b/src/IO/UseSSL.cpp index 6770de2cbad5f0165f5f2c81c37fd5be53c0004b..119a3471c07ee6ba20eac9bede6153779f0bf68a 100644 --- a/src/IO/UseSSL.cpp +++ b/src/IO/UseSSL.cpp @@ -4,7 +4,7 @@ # include #endif -#if USE_POCO_NETSSL +#if USE_SSL # include #endif @@ -12,14 +12,14 @@ namespace DB { UseSSL::UseSSL() { -#if USE_POCO_NETSSL +#if USE_SSL Poco::Net::initializeSSL(); #endif } UseSSL::~UseSSL() { -#if USE_POCO_NETSSL +#if USE_SSL Poco::Net::uninitializeSSL(); #endif } diff --git a/src/IO/tests/CMakeLists.txt b/src/IO/tests/CMakeLists.txt index e168e704814a44a7ed52e06f6fc5e09ba268a272..2767ce6e2714a317e444d3fc06d260319333fcb1 100644 --- a/src/IO/tests/CMakeLists.txt +++ b/src/IO/tests/CMakeLists.txt @@ -78,7 +78,7 @@ add_executable (parse_date_time_best_effort parse_date_time_best_effort.cpp) target_link_libraries (parse_date_time_best_effort PRIVATE clickhouse_common_io) add_executable (zlib_ng_bug zlib_ng_bug.cpp) -target_link_libraries (zlib_ng_bug PRIVATE ${Poco_Foundation_LIBRARY} ${ZLIB_LIBRARY}) +target_link_libraries (zlib_ng_bug PRIVATE ${ZLIB_LIBRARIES}) add_executable (ryu_test ryu_test.cpp) target_link_libraries (ryu_test PRIVATE ryu) diff --git a/src/Interpreters/Aggregator.cpp b/src/Interpreters/Aggregator.cpp index 6066d364b7add2fee224a6f9713237fb9b8f12a5..56ddd9cac1e1f2976cc1e209005cc5d617c89b5f 100644 --- a/src/Interpreters/Aggregator.cpp +++ b/src/Interpreters/Aggregator.cpp @@ -29,10 +29,6 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif - namespace ProfileEvents { diff --git a/src/Processors/Formats/Impl/AvroRowInputFormat.cpp b/src/Processors/Formats/Impl/AvroRowInputFormat.cpp index b7015a11af993fba987d61ceb847d064f121e682..d92cefbde7d993eec96853d40bf993d9e1f675cc 100644 --- a/src/Processors/Formats/Impl/AvroRowInputFormat.cpp +++ b/src/Processors/Formats/Impl/AvroRowInputFormat.cpp @@ -585,7 +585,6 @@ bool AvroRowInputFormat::readRow(MutableColumns & columns, RowReadExtension &ext return false; } -#if USE_POCO_JSON class AvroConfluentRowInputFormat::SchemaRegistry { public: @@ -728,7 +727,6 @@ const AvroDeserializer & AvroConfluentRowInputFormat::getOrCreateDeserializer(Sc } return it->second; } -#endif void registerInputFormatProcessorAvro(FormatFactory & factory) { @@ -741,7 +739,6 @@ void registerInputFormatProcessorAvro(FormatFactory & factory) return std::make_shared(sample, buf, params); }); -#if USE_POCO_JSON factory.registerInputFormatProcessor("AvroConfluent",[]( ReadBuffer & buf, const Block & sample, @@ -750,8 +747,6 @@ void registerInputFormatProcessorAvro(FormatFactory & factory) { return std::make_shared(sample, buf, params, settings); }); -#endif - } } diff --git a/src/Processors/Formats/Impl/AvroRowInputFormat.h b/src/Processors/Formats/Impl/AvroRowInputFormat.h index 38d44812f7ebe7f2562be97459ea06c4f98a7e28..6157220bc042f5ba7355b537a314ca8ef5831f95 100644 --- a/src/Processors/Formats/Impl/AvroRowInputFormat.h +++ b/src/Processors/Formats/Impl/AvroRowInputFormat.h @@ -1,6 +1,8 @@ #pragma once + #include "config_formats.h" #include "config_core.h" + #if USE_AVRO #include @@ -112,7 +114,6 @@ private: AvroDeserializer deserializer; }; -#if USE_POCO_JSON /// Confluent framing + Avro binary datum encoding. Mainly used for Kafka. /// Uses 3 caches: /// 1. global: schema registry cache (base_url -> SchemaRegistry) @@ -136,7 +137,7 @@ private: avro::InputStreamPtr input_stream; avro::DecoderPtr decoder; }; -#endif } + #endif diff --git a/src/Storages/System/StorageSystemBuildOptions.generated.cpp.in b/src/Storages/System/StorageSystemBuildOptions.generated.cpp.in index 8f5865f82f592d34b7de733887c96c7e1276ef46..3691ffb508d8f34c1469650b48050cc612eb71ba 100644 --- a/src/Storages/System/StorageSystemBuildOptions.generated.cpp.in +++ b/src/Storages/System/StorageSystemBuildOptions.generated.cpp.in @@ -43,10 +43,6 @@ const char * auto_config_build[] "USE_LIBGSASL", "@USE_LIBGSASL@", "USE_RDKAFKA", "@USE_RDKAFKA@", "USE_CAPNP", "@USE_CAPNP@", - "USE_POCO_SQLODBC", "@USE_POCO_SQLODBC@", - "USE_POCO_DATAODBC", "@USE_POCO_DATAODBC@", - "USE_POCO_MONGODB", "@USE_POCO_MONGODB@", - "USE_POCO_NETSSL", "@USE_POCO_NETSSL@", "USE_BASE64", "@USE_BASE64@", "USE_XXHASH", "@USE_XXHASH@", "USE_HDFS", "@USE_HDFS@", @@ -57,7 +53,6 @@ const char * auto_config_build[] "USE_SSL", "@USE_SSL@", "USE_HYPERSCAN", "@USE_HYPERSCAN@", "USE_SIMDJSON", "@USE_SIMDJSON@", - "USE_POCO_REDIS", "@USE_POCO_REDIS@", nullptr, nullptr }; diff --git a/src/TableFunctions/CMakeLists.txt b/src/TableFunctions/CMakeLists.txt index 26f9b7ddeb29460672e5645294b943ec2ccf5a66..33e900231e5c75bd909743a6b914cbbd5a6d0ca3 100644 --- a/src/TableFunctions/CMakeLists.txt +++ b/src/TableFunctions/CMakeLists.txt @@ -5,4 +5,4 @@ list(REMOVE_ITEM clickhouse_table_functions_sources ITableFunction.cpp TableFunc list(REMOVE_ITEM clickhouse_table_functions_headers ITableFunction.h TableFunctionFactory.h) add_library(clickhouse_table_functions ${clickhouse_table_functions_sources}) -target_link_libraries(clickhouse_table_functions PRIVATE clickhouse_parsers clickhouse_storages_system dbms ${Poco_Foundation_LIBRARY}) +target_link_libraries(clickhouse_table_functions PRIVATE clickhouse_parsers clickhouse_storages_system dbms) diff --git a/tests/instructions/sanitizers.md b/tests/instructions/sanitizers.md index b501f946b4654017ca6e55b3b38f4aa0daee9e77..07a33d45b4d0addc470aea699fdf4bf29642c5e0 100644 --- a/tests/instructions/sanitizers.md +++ b/tests/instructions/sanitizers.md @@ -67,5 +67,5 @@ sudo -u clickhouse UBSAN_OPTIONS='print_stacktrace=1' ./clickhouse-ubsan server # How to use Memory Sanitizer ``` -CC=clang-8 CXX=clang++-8 cmake -D ENABLE_HDFS=0 -D ENABLE_CAPNP=0 -D ENABLE_RDKAFKA=0 -D ENABLE_ICU=0 -D ENABLE_POCO_MONGODB=0 -D ENABLE_POCO_NETSSL=0 -D ENABLE_POCO_ODBC=0 -D ENABLE_ODBC=0 -D ENABLE_MYSQL=0 -D ENABLE_EMBEDDED_COMPILER=0 -D USE_INTERNAL_CAPNP_LIBRARY=0 -D USE_SIMDJSON=0 -D SANITIZE=memory .. +CC=clang-8 CXX=clang++-8 cmake -D ENABLE_HDFS=0 -D ENABLE_CAPNP=0 -D ENABLE_RDKAFKA=0 -D ENABLE_ICU=0 -D ENABLE_POCO_MONGODB=0 -D ENABLE_POCO_NETSSL=0 -D ENABLE_ODBC=0 -D ENABLE_MYSQL=0 -D ENABLE_EMBEDDED_COMPILER=0 -D USE_INTERNAL_CAPNP_LIBRARY=0 -D USE_SIMDJSON=0 -D SANITIZE=memory .. ``` diff --git a/utils/ci/jobs/quick-build/run.sh b/utils/ci/jobs/quick-build/run.sh index 9d5a1557394bc31bd57cb45d60b8ce7c9eff8ca8..56f0950c717de3eb9ab4efe8e1a2376c477b40df 100755 --- a/utils/ci/jobs/quick-build/run.sh +++ b/utils/ci/jobs/quick-build/run.sh @@ -21,7 +21,7 @@ BUILD_TARGETS=clickhouse BUILD_TYPE=Debug ENABLE_EMBEDDED_COMPILER=0 -CMAKE_FLAGS="-D CMAKE_C_FLAGS_ADD=-g0 -D CMAKE_CXX_FLAGS_ADD=-g0 -D ENABLE_JEMALLOC=0 -D ENABLE_CAPNP=0 -D ENABLE_RDKAFKA=0 -D ENABLE_UNWIND=0 -D ENABLE_ICU=0 -D ENABLE_POCO_MONGODB=0 -D ENABLE_POCO_REDIS=0 -D ENABLE_POCO_NETSSL=0 -D ENABLE_POCO_ODBC=0 -D ENABLE_ODBC=0 -D ENABLE_MYSQL=0 -D ENABLE_SSL=0 -D ENABLE_POCO_NETSSL=0" +CMAKE_FLAGS="-D CMAKE_C_FLAGS_ADD=-g0 -D CMAKE_CXX_FLAGS_ADD=-g0 -D ENABLE_JEMALLOC=0 -D ENABLE_CAPNP=0 -D ENABLE_RDKAFKA=0 -D ENABLE_UNWIND=0 -D ENABLE_ICU=0 -D ENABLE_POCO_MONGODB=0 -D ENABLE_POCO_REDIS=0 -D ENABLE_POCO_NETSSL=0 -D ENABLE_ODBC=0 -D ENABLE_MYSQL=0 -D ENABLE_SSL=0 -D ENABLE_POCO_NETSSL=0" [[ $(uname) == "FreeBSD" ]] && COMPILER_PACKAGE_VERSION=devel && export COMPILER_PATH=/usr/local/bin diff --git a/utils/zookeeper-cli/CMakeLists.txt b/utils/zookeeper-cli/CMakeLists.txt index 7e67f0785866641db7a0159220afd78b0a554a79..96c72744d335f0ae74c853d1210e2fc0fde8ff60 100644 --- a/utils/zookeeper-cli/CMakeLists.txt +++ b/utils/zookeeper-cli/CMakeLists.txt @@ -1,3 +1,3 @@ add_executable(clickhouse-zookeeper-cli zookeeper-cli.cpp) -target_link_libraries(clickhouse-zookeeper-cli PRIVATE clickhouse_common_zookeeper ${Poco_Foundation_LIBRARY}) +target_link_libraries(clickhouse-zookeeper-cli PRIVATE clickhouse_common_zookeeper) INSTALL(TARGETS clickhouse-zookeeper-cli RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT clickhouse-utils)