mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-25 00:52:02 +00:00
Merge branch 'master' into merging_10554
This commit is contained in:
commit
ef52acdbde
138
.gitignore
vendored
138
.gitignore
vendored
@ -12,6 +12,7 @@
|
|||||||
/build
|
/build
|
||||||
/build_*
|
/build_*
|
||||||
/build-*
|
/build-*
|
||||||
|
|
||||||
/docs/build
|
/docs/build
|
||||||
/docs/publish
|
/docs/publish
|
||||||
/docs/edit
|
/docs/edit
|
||||||
@ -57,143 +58,9 @@ cmake-build-*
|
|||||||
__pycache__
|
__pycache__
|
||||||
*.pytest_cache
|
*.pytest_cache
|
||||||
|
|
||||||
# ignore generated files
|
|
||||||
*-metrika-yandex
|
|
||||||
|
|
||||||
test.cpp
|
test.cpp
|
||||||
utils/compressor/compressor
|
|
||||||
utils/corrector_utf8/corrector_utf8
|
|
||||||
utils/iotest/iotest
|
|
||||||
utils/iotest/iotest_aio
|
|
||||||
utils/iotest/iotest_nonblock
|
|
||||||
utils/config-processor/config-processor
|
|
||||||
CPackConfig.cmake
|
CPackConfig.cmake
|
||||||
CPackSourceConfig.cmake
|
CPackSourceConfig.cmake
|
||||||
contrib/libpoco/Poco/
|
|
||||||
contrib/libpoco/bin/
|
|
||||||
contrib/libpoco/cmake_uninstall.cmake
|
|
||||||
contrib/libre2/re2_st/
|
|
||||||
src/Client/clickhouse-benchmark
|
|
||||||
src/Client/clickhouse-client
|
|
||||||
src/Client/tests/test-connect
|
|
||||||
src/Common/tests/arena_with_free_lists
|
|
||||||
src/Common/tests/auto_array
|
|
||||||
src/Common/tests/compact_array
|
|
||||||
src/Common/tests/hash_table
|
|
||||||
src/Common/tests/hashes_test
|
|
||||||
src/Common/tests/int_hashes_perf
|
|
||||||
src/Common/tests/lru_cache
|
|
||||||
src/Common/tests/parallel_aggregation
|
|
||||||
src/Common/tests/parallel_aggregation2
|
|
||||||
src/Common/tests/radix_sort
|
|
||||||
src/Common/tests/shell_command_test
|
|
||||||
src/Common/tests/simple_cache
|
|
||||||
src/Common/tests/sip_hash
|
|
||||||
src/Common/tests/sip_hash_perf
|
|
||||||
src/Common/tests/small_table
|
|
||||||
src/Core/tests/exception
|
|
||||||
src/Core/tests/field
|
|
||||||
src/Core/tests/rvo_test
|
|
||||||
src/Core/tests/string_pool
|
|
||||||
src/DataStreams/tests/aggregating_stream
|
|
||||||
src/DataStreams/tests/block_tab_separated_streams
|
|
||||||
src/DataStreams/tests/collapsing_sorted_stream
|
|
||||||
src/DataStreams/tests/expression_stream
|
|
||||||
src/DataStreams/tests/filter_stream
|
|
||||||
src/DataStreams/tests/filter_stream_hitlog
|
|
||||||
src/DataStreams/tests/fork_streams
|
|
||||||
src/DataStreams/tests/glue_streams
|
|
||||||
src/DataStreams/tests/json_streams
|
|
||||||
src/DataStreams/tests/native_streams
|
|
||||||
src/DataStreams/tests/sorting_stream
|
|
||||||
src/DataStreams/tests/tab_separated_streams
|
|
||||||
src/DataStreams/tests/union_stream
|
|
||||||
src/DataStreams/tests/union_stream2
|
|
||||||
src/DataTypes/tests/data_type_string
|
|
||||||
src/DataTypes/tests/data_types_number_fixed
|
|
||||||
src/Functions/tests/functions_arithmetic
|
|
||||||
src/Functions/tests/logical_functions_performance
|
|
||||||
src/Functions/tests/number_traits
|
|
||||||
src/IO/tests/async_write
|
|
||||||
src/IO/tests/cached_compressed_read_buffer
|
|
||||||
src/IO/tests/compressed_buffer
|
|
||||||
src/IO/tests/hashing_read_buffer
|
|
||||||
src/IO/tests/hashing_write_buffer
|
|
||||||
src/IO/tests/io_and_exceptions
|
|
||||||
src/IO/tests/io_operators
|
|
||||||
src/IO/tests/mempbrk
|
|
||||||
src/IO/tests/o_direct_and_dirty_pages
|
|
||||||
src/IO/tests/parse_int_perf
|
|
||||||
src/IO/tests/parse_int_perf2
|
|
||||||
src/IO/tests/read_buffer
|
|
||||||
src/IO/tests/read_buffer_aio
|
|
||||||
src/IO/tests/read_buffer_perf
|
|
||||||
src/IO/tests/read_escaped_string
|
|
||||||
src/IO/tests/read_float_perf
|
|
||||||
src/IO/tests/read_write_int
|
|
||||||
src/IO/tests/valid_utf8
|
|
||||||
src/IO/tests/valid_utf8_perf
|
|
||||||
src/IO/tests/var_uint
|
|
||||||
src/IO/tests/write_buffer
|
|
||||||
src/IO/tests/write_buffer_aio
|
|
||||||
src/IO/tests/write_buffer_perf
|
|
||||||
src/Interpreters/tests/address_patterns
|
|
||||||
src/Interpreters/tests/aggregate
|
|
||||||
src/Interpreters/tests/compiler_test
|
|
||||||
src/Interpreters/tests/create_query
|
|
||||||
src/Interpreters/tests/expression
|
|
||||||
src/Interpreters/tests/expression_analyzer
|
|
||||||
src/Interpreters/tests/hash_map
|
|
||||||
src/Interpreters/tests/hash_map2
|
|
||||||
src/Interpreters/tests/hash_map3
|
|
||||||
src/Interpreters/tests/hash_map_string
|
|
||||||
src/Interpreters/tests/hash_map_string_2
|
|
||||||
src/Interpreters/tests/hash_map_string_3
|
|
||||||
src/Interpreters/tests/hash_map_string_small
|
|
||||||
src/Interpreters/tests/in_join_subqueries_preprocessor
|
|
||||||
src/Interpreters/tests/logical_expressions_optimizer
|
|
||||||
src/Interpreters/tests/select_query
|
|
||||||
src/Interpreters/tests/two_level_hash_map
|
|
||||||
src/Interpreters/tests/users
|
|
||||||
src/Parsers/tests/create_parser
|
|
||||||
src/Parsers/tests/select_parser
|
|
||||||
src/Server/clickhouse-server
|
|
||||||
src/Server/clickhouse-server.init
|
|
||||||
src/Storages/tests/hit_log
|
|
||||||
src/Storages/tests/merge_tree
|
|
||||||
src/Storages/tests/part_checker
|
|
||||||
src/Storages/tests/part_name
|
|
||||||
src/Storages/tests/pk_condition
|
|
||||||
src/Storages/tests/seek_speed_test
|
|
||||||
src/Storages/tests/storage_log
|
|
||||||
src/Storages/tests/system_numbers
|
|
||||||
libs/libcommon/src/revision.h
|
|
||||||
libs/libcommon/src/tests/date_lut2
|
|
||||||
libs/libcommon/src/tests/date_lut3
|
|
||||||
libs/libcommon/src/tests/date_lut4
|
|
||||||
libs/libcommon/src/tests/date_lut_init
|
|
||||||
libs/libcommon/src/tests/multi_version
|
|
||||||
libs/libmysqlxx/src/tests/failover
|
|
||||||
libs/libmysqlxx/src/tests/mysqlxx_test
|
|
||||||
libs/libzkutil/src/tests/zkutil_expiration_test
|
|
||||||
libs/libzkutil/src/tests/zkutil_test
|
|
||||||
libs/libzkutil/src/tests/zkutil_test_async
|
|
||||||
libs/libzkutil/src/tests/zkutil_test_commands
|
|
||||||
libs/libzkutil/src/tests/zkutil_test_lock
|
|
||||||
libs/libzkutil/src/tests/zkutil_zookeeper_holder
|
|
||||||
utils/zookeeper-create-entry-to-download-part/zookeeper-create-entry-to-download-part
|
|
||||||
utils/zookeeper-dump-tree/zookeeper-dump-tree
|
|
||||||
utils/zookeeper-remove-by-list/zookeeper-remove-by-list
|
|
||||||
src/Storages/tests/remove_symlink_directory
|
|
||||||
libs/libcommon/src/tests/json_test
|
|
||||||
utils/compressor/zstd_test
|
|
||||||
utils/wikistat-loader/wikistat-loader
|
|
||||||
src/Common/tests/pod_array
|
|
||||||
|
|
||||||
src/Server/data/*
|
|
||||||
src/Server/metadata/*
|
|
||||||
src/Server/status
|
|
||||||
config-9001.xml
|
|
||||||
|
|
||||||
*-preprocessed.xml
|
*-preprocessed.xml
|
||||||
|
|
||||||
@ -241,9 +108,6 @@ website/package-lock.json
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
*/.DS_Store
|
*/.DS_Store
|
||||||
|
|
||||||
# Ignore files for locally disabled tests
|
|
||||||
/src/queries/**/*.disabled
|
|
||||||
|
|
||||||
# cquery cache
|
# cquery cache
|
||||||
/.cquery-cache
|
/.cquery-cache
|
||||||
|
|
||||||
|
@ -1,41 +0,0 @@
|
|||||||
stages:
|
|
||||||
- builder
|
|
||||||
- build
|
|
||||||
variables:
|
|
||||||
GIT_SUBMODULE_STRATEGY: recursive
|
|
||||||
builder:
|
|
||||||
stage: builder
|
|
||||||
when: manual
|
|
||||||
services:
|
|
||||||
- docker:dind
|
|
||||||
script:
|
|
||||||
- docker info
|
|
||||||
- apk add --no-cache git curl binutils ca-certificates
|
|
||||||
- docker login -u gitlab -p nopasswd $CI_REGISTRY
|
|
||||||
- docker build -t yandex/clickhouse-builder ./docker/builder
|
|
||||||
- docker tag yandex/clickhouse-builder $CI_REGISTRY/yandex/clickhouse-builder
|
|
||||||
- docker push $CI_REGISTRY/yandex/clickhouse-builder
|
|
||||||
tags:
|
|
||||||
- docker
|
|
||||||
build:
|
|
||||||
stage: build
|
|
||||||
when: manual
|
|
||||||
services:
|
|
||||||
- docker:dind
|
|
||||||
script:
|
|
||||||
- apk add --no-cache git curl binutils ca-certificates
|
|
||||||
- git submodule sync --recursive
|
|
||||||
- git submodule update --init --recursive
|
|
||||||
- docker info
|
|
||||||
- docker login -u gitlab -p nopasswd $CI_REGISTRY
|
|
||||||
- docker pull $CI_REGISTRY/yandex/clickhouse-builder
|
|
||||||
- docker run --rm --volumes-from "${HOSTNAME}-build" --workdir "${CI_PROJECT_DIR}" --env CI_PROJECT_DIR=${CI_PROJECT_DIR} $CI_REGISTRY/yandex/clickhouse-builder /build_gitlab_ci.sh
|
|
||||||
# You can upload your binary to nexus
|
|
||||||
- curl -v --keepalive-time 60 --keepalive --user "$NEXUS_USER:$NEXUS_PASSWORD" -XPUT "http://$NEXUS_HOST/repository/binaries/$CI_PROJECT_NAME" --upload-file ./src/Server/clickhouse
|
|
||||||
# Or download artifacts from gitlab
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- ./src/Server/clickhouse
|
|
||||||
expire_in: 1 day
|
|
||||||
tags:
|
|
||||||
- docker
|
|
11
.gitmodules
vendored
11
.gitmodules
vendored
@ -110,16 +110,16 @@
|
|||||||
branch = v1.25.0
|
branch = v1.25.0
|
||||||
[submodule "contrib/aws"]
|
[submodule "contrib/aws"]
|
||||||
path = contrib/aws
|
path = contrib/aws
|
||||||
url = https://github.com/aws/aws-sdk-cpp.git
|
url = https://github.com/ClickHouse-Extras/aws-sdk-cpp.git
|
||||||
[submodule "aws-c-event-stream"]
|
[submodule "aws-c-event-stream"]
|
||||||
path = contrib/aws-c-event-stream
|
path = contrib/aws-c-event-stream
|
||||||
url = https://github.com/awslabs/aws-c-event-stream.git
|
url = https://github.com/ClickHouse-Extras/aws-c-event-stream.git
|
||||||
[submodule "aws-c-common"]
|
[submodule "aws-c-common"]
|
||||||
path = contrib/aws-c-common
|
path = contrib/aws-c-common
|
||||||
url = https://github.com/awslabs/aws-c-common.git
|
url = https://github.com/ClickHouse-Extras/aws-c-common.git
|
||||||
[submodule "aws-checksums"]
|
[submodule "aws-checksums"]
|
||||||
path = contrib/aws-checksums
|
path = contrib/aws-checksums
|
||||||
url = https://github.com/awslabs/aws-checksums.git
|
url = https://github.com/ClickHouse-Extras/aws-checksums.git
|
||||||
[submodule "contrib/curl"]
|
[submodule "contrib/curl"]
|
||||||
path = contrib/curl
|
path = contrib/curl
|
||||||
url = https://github.com/curl/curl.git
|
url = https://github.com/curl/curl.git
|
||||||
@ -154,3 +154,6 @@
|
|||||||
[submodule "contrib/msgpack-c"]
|
[submodule "contrib/msgpack-c"]
|
||||||
path = contrib/msgpack-c
|
path = contrib/msgpack-c
|
||||||
url = https://github.com/msgpack/msgpack-c
|
url = https://github.com/msgpack/msgpack-c
|
||||||
|
[submodule "contrib/libcpuid"]
|
||||||
|
path = contrib/libcpuid
|
||||||
|
url = https://github.com/ClickHouse-Extras/libcpuid.git
|
||||||
|
127
CHANGELOG.md
127
CHANGELOG.md
@ -1,11 +1,89 @@
|
|||||||
## ClickHouse release v20.3
|
## ClickHouse release v20.3
|
||||||
|
|
||||||
|
### ClickHouse release v20.3.8.53, 2020-04-23
|
||||||
|
|
||||||
|
### Bug Fix
|
||||||
|
* Fixed wrong behaviour of datetime functions for timezones that has altered between positive and negative offsets from UTC (e.g. Pacific/Kiritimati). This fixes [#7202](https://github.com/ClickHouse/ClickHouse/issues/7202) [#10369](https://github.com/ClickHouse/ClickHouse/pull/10369) ([alexey-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
* Fix possible segfault with `distributed_group_by_no_merge` enabled (introduced in 20.3.7.46 by [#10131](https://github.com/ClickHouse/ClickHouse/issues/10131)). [#10399](https://github.com/ClickHouse/ClickHouse/pull/10399) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
* Fix wrong flattening of `Array(Tuple(...))` data types. This fixes [#10259](https://github.com/ClickHouse/ClickHouse/issues/10259) [#10390](https://github.com/ClickHouse/ClickHouse/pull/10390) ([alexey-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
* Drop disks reservation in Aggregator. This fixes bug in disk space reservation, which may cause big external aggregation to fail even if it could be completed successfully [#10375](https://github.com/ClickHouse/ClickHouse/pull/10375) ([Azat Khuzhin](https://github.com/azat))
|
||||||
|
* Fixed `DROP` vs `OPTIMIZE` race in `ReplicatedMergeTree`. `DROP` could left some garbage in replica path in ZooKeeper if there was concurrent `OPTIMIZE` query. [#10312](https://github.com/ClickHouse/ClickHouse/pull/10312) ([tavplubix](https://github.com/tavplubix))
|
||||||
|
* Fix bug when server cannot attach table after column default was altered. [#10441](https://github.com/ClickHouse/ClickHouse/pull/10441) ([alesapin](https://github.com/alesapin))
|
||||||
|
* Do not remove metadata directory when attach database fails before loading tables. [#10442](https://github.com/ClickHouse/ClickHouse/pull/10442) ([Winter Zhang](https://github.com/zhang2014))
|
||||||
|
* Fixed several bugs when some data was inserted with quorum, then deleted somehow (DROP PARTITION, TTL) and this leaded to the stuck of INSERTs or false-positive exceptions in SELECTs. This fixes [#9946](https://github.com/ClickHouse/ClickHouse/issues/9946) [#10188](https://github.com/ClickHouse/ClickHouse/pull/10188) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))
|
||||||
|
* Fix possible `Pipeline stuck` error in `ConcatProcessor` which could have happened in remote query. [#10381](https://github.com/ClickHouse/ClickHouse/pull/10381) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
* Fixed wrong behavior in HashTable that caused compilation error when trying to read HashMap from buffer. [#10386](https://github.com/ClickHouse/ClickHouse/pull/10386) ([palasonic1](https://github.com/palasonic1))
|
||||||
|
* Allow to use `count(*)` with multiple JOINs. Fixes [#9853](https://github.com/ClickHouse/ClickHouse/issues/9853) [#10291](https://github.com/ClickHouse/ClickHouse/pull/10291) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
* Prefer `fallback_to_stale_replicas` over `skip_unavailable_shards`, otherwise when both settings specified and there are no up-to-date replicas the query will fail (patch from @alex-zaitsev). Fixes: [#2564](https://github.com/ClickHouse/ClickHouse/issues/2564). [#10422](https://github.com/ClickHouse/ClickHouse/pull/10422) ([Azat Khuzhin](https://github.com/azat))
|
||||||
|
* Fix the issue when a query with ARRAY JOIN, ORDER BY and LIMIT may return incomplete result. This fixes [#10226](https://github.com/ClickHouse/ClickHouse/issues/10226). Author: [Vadim Plakhtinskiy](https://github.com/VadimPlh). [#10427](https://github.com/ClickHouse/ClickHouse/pull/10427) ([alexey-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
* Check the number and type of arguments when creating BloomFilter index [#9623](https://github.com/ClickHouse/ClickHouse/issues/9623) [#10431](https://github.com/ClickHouse/ClickHouse/pull/10431) ([Winter Zhang](https://github.com/zhang2014))
|
||||||
|
|
||||||
|
### Performance Improvement
|
||||||
|
* Improved performance of queries with explicitly defined sets at right side of `IN` operator and tuples in the left side. This fixes performance regression in version 20.3. [#9740](https://github.com/ClickHouse/ClickHouse/pull/9740), [#10385](https://github.com/ClickHouse/ClickHouse/pull/10385) ([Anton Popov](https://github.com/CurtizJ))
|
||||||
|
|
||||||
|
### ClickHouse release v20.3.7.46, 2020-04-17
|
||||||
|
|
||||||
|
#### Bug Fix
|
||||||
|
|
||||||
|
* Fix `Logical error: CROSS JOIN has expressions` error for queries with comma and names joins mix. [#10311](https://github.com/ClickHouse/ClickHouse/pull/10311) ([Artem Zuikov](https://github.com/4ertus2)).
|
||||||
|
* Fix queries with `max_bytes_before_external_group_by`. [#10302](https://github.com/ClickHouse/ClickHouse/pull/10302) ([Artem Zuikov](https://github.com/4ertus2)).
|
||||||
|
* Fix move-to-prewhere optimization in presense of arrayJoin functions (in certain cases). This fixes [#10092](https://github.com/ClickHouse/ClickHouse/issues/10092). [#10195](https://github.com/ClickHouse/ClickHouse/pull/10195) ([alexey-milovidov](https://github.com/alexey-milovidov)).
|
||||||
|
* Add the ability to relax the restriction on non-deterministic functions usage in mutations with `allow_nondeterministic_mutations` setting. [#10186](https://github.com/ClickHouse/ClickHouse/pull/10186) ([filimonov](https://github.com/filimonov)).
|
||||||
|
|
||||||
|
### ClickHouse release v20.3.6.40, 2020-04-16
|
||||||
|
|
||||||
|
#### New Feature
|
||||||
|
|
||||||
|
* Added function `isConstant`. This function checks whether its argument is constant expression and returns 1 or 0. It is intended for development, debugging and demonstration purposes. [#10198](https://github.com/ClickHouse/ClickHouse/pull/10198) ([alexey-milovidov](https://github.com/alexey-milovidov)).
|
||||||
|
|
||||||
|
#### Bug Fix
|
||||||
|
|
||||||
|
* Fix error `Pipeline stuck` with `max_rows_to_group_by` and `group_by_overflow_mode = 'break'`. [#10279](https://github.com/ClickHouse/ClickHouse/pull/10279) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Fix rare possible exception `Cannot drain connections: cancel first`. [#10239](https://github.com/ClickHouse/ClickHouse/pull/10239) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Fixed bug where ClickHouse would throw "Unknown function lambda." error message when user tries to run ALTER UPDATE/DELETE on tables with ENGINE = Replicated*. Check for nondeterministic functions now handles lambda expressions correctly. [#10237](https://github.com/ClickHouse/ClickHouse/pull/10237) ([Alexander Kazakov](https://github.com/Akazz)).
|
||||||
|
* Fixed "generateRandom" function for Date type. This fixes [#9973](https://github.com/ClickHouse/ClickHouse/issues/9973). Fix an edge case when dates with year 2106 are inserted to MergeTree tables with old-style partitioning but partitions are named with year 1970. [#10218](https://github.com/ClickHouse/ClickHouse/pull/10218) ([alexey-milovidov](https://github.com/alexey-milovidov)).
|
||||||
|
* Convert types if the table definition of a View does not correspond to the SELECT query. This fixes [#10180](https://github.com/ClickHouse/ClickHouse/issues/10180) and [#10022](https://github.com/ClickHouse/ClickHouse/issues/10022). [#10217](https://github.com/ClickHouse/ClickHouse/pull/10217) ([alexey-milovidov](https://github.com/alexey-milovidov)).
|
||||||
|
* Fix `parseDateTimeBestEffort` for strings in RFC-2822 when day of week is Tuesday or Thursday. This fixes [#10082](https://github.com/ClickHouse/ClickHouse/issues/10082). [#10214](https://github.com/ClickHouse/ClickHouse/pull/10214) ([alexey-milovidov](https://github.com/alexey-milovidov)).
|
||||||
|
* Fix column names of constants inside JOIN that may clash with names of constants outside of JOIN. [#10207](https://github.com/ClickHouse/ClickHouse/pull/10207) ([alexey-milovidov](https://github.com/alexey-milovidov)).
|
||||||
|
* Fix possible inifinite query execution when the query actually should stop on LIMIT, while reading from infinite source like `system.numbers` or `system.zeros`. [#10206](https://github.com/ClickHouse/ClickHouse/pull/10206) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Fix using the current database for access checking when the database isn't specified. [#10192](https://github.com/ClickHouse/ClickHouse/pull/10192) ([Vitaly Baranov](https://github.com/vitlibar)).
|
||||||
|
* Convert blocks if structure does not match on INSERT into Distributed(). [#10135](https://github.com/ClickHouse/ClickHouse/pull/10135) ([Azat Khuzhin](https://github.com/azat)).
|
||||||
|
* Fix possible incorrect result for extremes in processors pipeline. [#10131](https://github.com/ClickHouse/ClickHouse/pull/10131) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Fix some kinds of alters with compact parts. [#10130](https://github.com/ClickHouse/ClickHouse/pull/10130) ([Anton Popov](https://github.com/CurtizJ)).
|
||||||
|
* Fix incorrect `index_granularity_bytes` check while creating new replica. Fixes [#10098](https://github.com/ClickHouse/ClickHouse/issues/10098). [#10121](https://github.com/ClickHouse/ClickHouse/pull/10121) ([alesapin](https://github.com/alesapin)).
|
||||||
|
* Fix SIGSEGV on INSERT into Distributed table when its structure differs from the underlying tables. [#10105](https://github.com/ClickHouse/ClickHouse/pull/10105) ([Azat Khuzhin](https://github.com/azat)).
|
||||||
|
* Fix possible rows loss for queries with `JOIN` and `UNION ALL`. Fixes [#9826](https://github.com/ClickHouse/ClickHouse/issues/9826), [#10113](https://github.com/ClickHouse/ClickHouse/issues/10113). [#10099](https://github.com/ClickHouse/ClickHouse/pull/10099) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Fixed replicated tables startup when updating from an old ClickHouse version where `/table/replicas/replica_name/metadata` node doesn't exist. Fixes [#10037](https://github.com/ClickHouse/ClickHouse/issues/10037). [#10095](https://github.com/ClickHouse/ClickHouse/pull/10095) ([alesapin](https://github.com/alesapin)).
|
||||||
|
* Add some arguments check and support identifier arguments for MySQL Database Engine. [#10077](https://github.com/ClickHouse/ClickHouse/pull/10077) ([Winter Zhang](https://github.com/zhang2014)).
|
||||||
|
* Fix bug in clickhouse dictionary source from localhost clickhouse server. The bug may lead to memory corruption if types in dictionary and source are not compatible. [#10071](https://github.com/ClickHouse/ClickHouse/pull/10071) ([alesapin](https://github.com/alesapin)).
|
||||||
|
* Fix bug in `CHECK TABLE` query when table contain skip indices. [#10068](https://github.com/ClickHouse/ClickHouse/pull/10068) ([alesapin](https://github.com/alesapin)).
|
||||||
|
* Fix error `Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransform`. It happened when setting `distributed_aggregation_memory_efficient` was enabled, and distributed query read aggregating data with different level from different shards (mixed single and two level aggregation). [#10063](https://github.com/ClickHouse/ClickHouse/pull/10063) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Fix a segmentation fault that could occur in GROUP BY over string keys containing trailing zero bytes ([#8636](https://github.com/ClickHouse/ClickHouse/issues/8636), [#8925](https://github.com/ClickHouse/ClickHouse/issues/8925)). [#10025](https://github.com/ClickHouse/ClickHouse/pull/10025) ([Alexander Kuzmenkov](https://github.com/akuzm)).
|
||||||
|
* Fix parallel distributed INSERT SELECT for remote table. This PR fixes the solution provided in [#9759](https://github.com/ClickHouse/ClickHouse/pull/9759). [#9999](https://github.com/ClickHouse/ClickHouse/pull/9999) ([Vitaly Baranov](https://github.com/vitlibar)).
|
||||||
|
* Fix the number of threads used for remote query execution (performance regression, since 20.3). This happened when query from `Distributed` table was executed simultaneously on local and remote shards. Fixes [#9965](https://github.com/ClickHouse/ClickHouse/issues/9965). [#9971](https://github.com/ClickHouse/ClickHouse/pull/9971) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Fix bug in which the necessary tables weren't retrieved at one of the processing stages of queries to some databases. Fixes [#9699](https://github.com/ClickHouse/ClickHouse/issues/9699). [#9949](https://github.com/ClickHouse/ClickHouse/pull/9949) ([achulkov2](https://github.com/achulkov2)).
|
||||||
|
* Fix 'Not found column in block' error when `JOIN` appears with `TOTALS`. Fixes [#9839](https://github.com/ClickHouse/ClickHouse/issues/9839). [#9939](https://github.com/ClickHouse/ClickHouse/pull/9939) ([Artem Zuikov](https://github.com/4ertus2)).
|
||||||
|
* Fix a bug with `ON CLUSTER` DDL queries freezing on server startup. [#9927](https://github.com/ClickHouse/ClickHouse/pull/9927) ([Gagan Arneja](https://github.com/garneja)).
|
||||||
|
* Fix parsing multiple hosts set in the CREATE USER command, e.g. `CREATE USER user6 HOST NAME REGEXP 'lo.?*host', NAME REGEXP 'lo*host'`. [#9924](https://github.com/ClickHouse/ClickHouse/pull/9924) ([Vitaly Baranov](https://github.com/vitlibar)).
|
||||||
|
* Fix `TRUNCATE` for Join table engine ([#9917](https://github.com/ClickHouse/ClickHouse/issues/9917)). [#9920](https://github.com/ClickHouse/ClickHouse/pull/9920) ([Amos Bird](https://github.com/amosbird)).
|
||||||
|
* Fix "scalar doesn't exist" error in ALTERs ([#9878](https://github.com/ClickHouse/ClickHouse/issues/9878)). [#9904](https://github.com/ClickHouse/ClickHouse/pull/9904) ([Amos Bird](https://github.com/amosbird)).
|
||||||
|
* Fix race condition between drop and optimize in `ReplicatedMergeTree`. [#9901](https://github.com/ClickHouse/ClickHouse/pull/9901) ([alesapin](https://github.com/alesapin)).
|
||||||
|
* Fix error with qualified names in `distributed_product_mode='local'`. Fixes [#4756](https://github.com/ClickHouse/ClickHouse/issues/4756). [#9891](https://github.com/ClickHouse/ClickHouse/pull/9891) ([Artem Zuikov](https://github.com/4ertus2)).
|
||||||
|
* Fix calculating grants for introspection functions from the setting 'allow_introspection_functions'. [#9840](https://github.com/ClickHouse/ClickHouse/pull/9840) ([Vitaly Baranov](https://github.com/vitlibar)).
|
||||||
|
|
||||||
|
#### Build/Testing/Packaging Improvement
|
||||||
|
|
||||||
|
* Fix integration test `test_settings_constraints`. [#9962](https://github.com/ClickHouse/ClickHouse/pull/9962) ([Vitaly Baranov](https://github.com/vitlibar)).
|
||||||
|
* Removed dependency on `clock_getres`. [#9833](https://github.com/ClickHouse/ClickHouse/pull/9833) ([alexey-milovidov](https://github.com/alexey-milovidov)).
|
||||||
|
|
||||||
|
|
||||||
### ClickHouse release v20.3.5.21, 2020-03-27
|
### ClickHouse release v20.3.5.21, 2020-03-27
|
||||||
|
|
||||||
#### Bug Fix
|
#### Bug Fix
|
||||||
|
|
||||||
* Fix 'Different expressions with the same alias' error when query has PREWHERE and WHERE on distributed table and `SET distributed_product_mode = 'local'`. [#9871](https://github.com/ClickHouse/ClickHouse/pull/9871) ([Artem Zuikov](https://github.com/4ertus2)).
|
* Fix 'Different expressions with the same alias' error when query has PREWHERE and WHERE on distributed table and `SET distributed_product_mode = 'local'`. [#9871](https://github.com/ClickHouse/ClickHouse/pull/9871) ([Artem Zuikov](https://github.com/4ertus2)).
|
||||||
* Fix mutations excessive memory consumption for tables with a composite primary key. This fixes [#9850](https://github.com/ClickHouse/ClickHouse/issues/9850). [#9860](https://github.com/ClickHouse/ClickHouse/pull/9860) ([alesapin](https://github.com/alesapin)).
|
* Fix mutations excessive memory consumption for tables with a composite primary key. This fixes [#9850](https://github.com/ClickHouse/ClickHouse/issues/9850). [#9860](https://github.com/ClickHouse/ClickHouse/pull/9860) ([alesapin](https://github.com/alesapin)).
|
||||||
|
* For INSERT queries shard now clamps the settings got from the initiator to the shard's constaints instead of throwing an exception. This fix allows to send INSERT queries to a shard with another constraints. This change improves fix [#9447](https://github.com/ClickHouse/ClickHouse/issues/9447). [#9852](https://github.com/ClickHouse/ClickHouse/pull/9852) ([Vitaly Baranov](https://github.com/vitlibar)).
|
||||||
* Fix 'COMMA to CROSS JOIN rewriter is not enabled or cannot rewrite query' error in case of subqueries with COMMA JOIN out of tables lists (i.e. in WHERE). Fixes [#9782](https://github.com/ClickHouse/ClickHouse/issues/9782). [#9830](https://github.com/ClickHouse/ClickHouse/pull/9830) ([Artem Zuikov](https://github.com/4ertus2)).
|
* Fix 'COMMA to CROSS JOIN rewriter is not enabled or cannot rewrite query' error in case of subqueries with COMMA JOIN out of tables lists (i.e. in WHERE). Fixes [#9782](https://github.com/ClickHouse/ClickHouse/issues/9782). [#9830](https://github.com/ClickHouse/ClickHouse/pull/9830) ([Artem Zuikov](https://github.com/4ertus2)).
|
||||||
* Fix possible exception `Got 0 in totals chunk, expected 1` on client. It happened for queries with `JOIN` in case if right joined table had zero rows. Example: `select * from system.one t1 join system.one t2 on t1.dummy = t2.dummy limit 0 FORMAT TabSeparated;`. Fixes [#9777](https://github.com/ClickHouse/ClickHouse/issues/9777). [#9823](https://github.com/ClickHouse/ClickHouse/pull/9823) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
* Fix possible exception `Got 0 in totals chunk, expected 1` on client. It happened for queries with `JOIN` in case if right joined table had zero rows. Example: `select * from system.one t1 join system.one t2 on t1.dummy = t2.dummy limit 0 FORMAT TabSeparated;`. Fixes [#9777](https://github.com/ClickHouse/ClickHouse/issues/9777). [#9823](https://github.com/ClickHouse/ClickHouse/pull/9823) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
* Fix SIGSEGV with optimize_skip_unused_shards when type cannot be converted. [#9804](https://github.com/ClickHouse/ClickHouse/pull/9804) ([Azat Khuzhin](https://github.com/azat)).
|
* Fix SIGSEGV with optimize_skip_unused_shards when type cannot be converted. [#9804](https://github.com/ClickHouse/ClickHouse/pull/9804) ([Azat Khuzhin](https://github.com/azat)).
|
||||||
@ -273,6 +351,55 @@
|
|||||||
|
|
||||||
## ClickHouse release v20.1
|
## ClickHouse release v20.1
|
||||||
|
|
||||||
|
### ClickHouse release v20.1.10.70, 2020-04-17
|
||||||
|
|
||||||
|
#### Bug Fix
|
||||||
|
|
||||||
|
* Fix rare possible exception `Cannot drain connections: cancel first`. [#10239](https://github.com/ClickHouse/ClickHouse/pull/10239) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Fixed bug where ClickHouse would throw `'Unknown function lambda.'` error message when user tries to run `ALTER UPDATE/DELETE` on tables with `ENGINE = Replicated*`. Check for nondeterministic functions now handles lambda expressions correctly. [#10237](https://github.com/ClickHouse/ClickHouse/pull/10237) ([Alexander Kazakov](https://github.com/Akazz)).
|
||||||
|
* Fix `parseDateTimeBestEffort` for strings in RFC-2822 when day of week is Tuesday or Thursday. This fixes [#10082](https://github.com/ClickHouse/ClickHouse/issues/10082). [#10214](https://github.com/ClickHouse/ClickHouse/pull/10214) ([alexey-milovidov](https://github.com/alexey-milovidov)).
|
||||||
|
* Fix column names of constants inside `JOIN` that may clash with names of constants outside of `JOIN`. [#10207](https://github.com/ClickHouse/ClickHouse/pull/10207) ([alexey-milovidov](https://github.com/alexey-milovidov)).
|
||||||
|
* Fix possible inifinite query execution when the query actually should stop on LIMIT, while reading from infinite source like `system.numbers` or `system.zeros`. [#10206](https://github.com/ClickHouse/ClickHouse/pull/10206) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Fix move-to-prewhere optimization in presense of `arrayJoin` functions (in certain cases). This fixes [#10092](https://github.com/ClickHouse/ClickHouse/issues/10092). [#10195](https://github.com/ClickHouse/ClickHouse/pull/10195) ([alexey-milovidov](https://github.com/alexey-milovidov)).
|
||||||
|
* Add the ability to relax the restriction on non-deterministic functions usage in mutations with `allow_nondeterministic_mutations` setting. [#10186](https://github.com/ClickHouse/ClickHouse/pull/10186) ([filimonov](https://github.com/filimonov)).
|
||||||
|
* Convert blocks if structure does not match on `INSERT` into table with `Distributed` engine. [#10135](https://github.com/ClickHouse/ClickHouse/pull/10135) ([Azat Khuzhin](https://github.com/azat)).
|
||||||
|
* Fix `SIGSEGV` on `INSERT` into `Distributed` table when its structure differs from the underlying tables. [#10105](https://github.com/ClickHouse/ClickHouse/pull/10105) ([Azat Khuzhin](https://github.com/azat)).
|
||||||
|
* Fix possible rows loss for queries with `JOIN` and `UNION ALL`. Fixes [#9826](https://github.com/ClickHouse/ClickHouse/issues/9826), [#10113](https://github.com/ClickHouse/ClickHouse/issues/10113). [#10099](https://github.com/ClickHouse/ClickHouse/pull/10099) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Add arguments check and support identifier arguments for MySQL Database Engine. [#10077](https://github.com/ClickHouse/ClickHouse/pull/10077) ([Winter Zhang](https://github.com/zhang2014)).
|
||||||
|
* Fix bug in clickhouse dictionary source from localhost clickhouse server. The bug may lead to memory corruption if types in dictionary and source are not compatible. [#10071](https://github.com/ClickHouse/ClickHouse/pull/10071) ([alesapin](https://github.com/alesapin)).
|
||||||
|
* Fix error `Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransform`. It happened when setting `distributed_aggregation_memory_efficient` was enabled, and distributed query read aggregating data with different level from different shards (mixed single and two level aggregation). [#10063](https://github.com/ClickHouse/ClickHouse/pull/10063) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Fix a segmentation fault that could occur in `GROUP BY` over string keys containing trailing zero bytes ([#8636](https://github.com/ClickHouse/ClickHouse/issues/8636), [#8925](https://github.com/ClickHouse/ClickHouse/issues/8925)). [#10025](https://github.com/ClickHouse/ClickHouse/pull/10025) ([Alexander Kuzmenkov](https://github.com/akuzm)).
|
||||||
|
* Fix bug in which the necessary tables weren't retrieved at one of the processing stages of queries to some databases. Fixes [#9699](https://github.com/ClickHouse/ClickHouse/issues/9699). [#9949](https://github.com/ClickHouse/ClickHouse/pull/9949) ([achulkov2](https://github.com/achulkov2)).
|
||||||
|
* Fix `'Not found column in block'` error when `JOIN` appears with `TOTALS`. Fixes [#9839](https://github.com/ClickHouse/ClickHouse/issues/9839). [#9939](https://github.com/ClickHouse/ClickHouse/pull/9939) ([Artem Zuikov](https://github.com/4ertus2)).
|
||||||
|
* Fix a bug with `ON CLUSTER` DDL queries freezing on server startup. [#9927](https://github.com/ClickHouse/ClickHouse/pull/9927) ([Gagan Arneja](https://github.com/garneja)).
|
||||||
|
* Fix `TRUNCATE` for Join table engine ([#9917](https://github.com/ClickHouse/ClickHouse/issues/9917)). [#9920](https://github.com/ClickHouse/ClickHouse/pull/9920) ([Amos Bird](https://github.com/amosbird)).
|
||||||
|
* Fix `'scalar doesn't exist'` error in ALTER queries ([#9878](https://github.com/ClickHouse/ClickHouse/issues/9878)). [#9904](https://github.com/ClickHouse/ClickHouse/pull/9904) ([Amos Bird](https://github.com/amosbird)).
|
||||||
|
* Fix race condition between drop and optimize in `ReplicatedMergeTree`. [#9901](https://github.com/ClickHouse/ClickHouse/pull/9901) ([alesapin](https://github.com/alesapin)).
|
||||||
|
* Fixed `DeleteOnDestroy` logic in `ATTACH PART` which could lead to automatic removal of attached part and added few tests. [#9410](https://github.com/ClickHouse/ClickHouse/pull/9410) ([Vladimir Chebotarev](https://github.com/excitoon)).
|
||||||
|
|
||||||
|
#### Build/Testing/Packaging Improvement
|
||||||
|
|
||||||
|
* Fix unit test `collapsing_sorted_stream`. [#9367](https://github.com/ClickHouse/ClickHouse/pull/9367) ([Deleted user](https://github.com/ghost)).
|
||||||
|
|
||||||
|
### ClickHouse release v20.1.9.54, 2020-03-28
|
||||||
|
|
||||||
|
#### Bug Fix
|
||||||
|
|
||||||
|
* Fix `'Different expressions with the same alias'` error when query has `PREWHERE` and `WHERE` on distributed table and `SET distributed_product_mode = 'local'`. [#9871](https://github.com/ClickHouse/ClickHouse/pull/9871) ([Artem Zuikov](https://github.com/4ertus2)).
|
||||||
|
* Fix mutations excessive memory consumption for tables with a composite primary key. This fixes [#9850](https://github.com/ClickHouse/ClickHouse/issues/9850). [#9860](https://github.com/ClickHouse/ClickHouse/pull/9860) ([alesapin](https://github.com/alesapin)).
|
||||||
|
* For INSERT queries shard now clamps the settings got from the initiator to the shard's constaints instead of throwing an exception. This fix allows to send `INSERT` queries to a shard with another constraints. This change improves fix [#9447](https://github.com/ClickHouse/ClickHouse/issues/9447). [#9852](https://github.com/ClickHouse/ClickHouse/pull/9852) ([Vitaly Baranov](https://github.com/vitlibar)).
|
||||||
|
* Fix possible exception `Got 0 in totals chunk, expected 1` on client. It happened for queries with `JOIN` in case if right joined table had zero rows. Example: `select * from system.one t1 join system.one t2 on t1.dummy = t2.dummy limit 0 FORMAT TabSeparated;`. Fixes [#9777](https://github.com/ClickHouse/ClickHouse/issues/9777). [#9823](https://github.com/ClickHouse/ClickHouse/pull/9823) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Fix `SIGSEGV` with `optimize_skip_unused_shards` when type cannot be converted. [#9804](https://github.com/ClickHouse/ClickHouse/pull/9804) ([Azat Khuzhin](https://github.com/azat)).
|
||||||
|
* Fixed a few cases when timezone of the function argument wasn't used properly. [#9574](https://github.com/ClickHouse/ClickHouse/pull/9574) ([Vasily Nemkov](https://github.com/Enmk)).
|
||||||
|
|
||||||
|
#### Improvement
|
||||||
|
|
||||||
|
* Remove `ORDER BY` stage from mutations because we read from a single ordered part in a single thread. Also add check that the order of rows in mutation is ordered in sorting key order and this order is not violated. [#9886](https://github.com/ClickHouse/ClickHouse/pull/9886) ([alesapin](https://github.com/alesapin)).
|
||||||
|
|
||||||
|
#### Build/Testing/Packaging Improvement
|
||||||
|
|
||||||
|
* Clean up duplicated linker flags. Make sure the linker won't look up an unexpected symbol. [#9433](https://github.com/ClickHouse/ClickHouse/pull/9433) ([Amos Bird](https://github.com/amosbird)).
|
||||||
|
|
||||||
### ClickHouse release v20.1.8.41, 2020-03-20
|
### ClickHouse release v20.1.8.41, 2020-03-20
|
||||||
|
|
||||||
#### Bug Fix
|
#### Bug Fix
|
||||||
|
@ -30,7 +30,11 @@ set(CMAKE_LINK_DEPENDS_NO_SHARED 1) # Do not relink all depended targets on .so
|
|||||||
set(CMAKE_CONFIGURATION_TYPES "RelWithDebInfo;Debug;Release;MinSizeRel" CACHE STRING "" FORCE)
|
set(CMAKE_CONFIGURATION_TYPES "RelWithDebInfo;Debug;Release;MinSizeRel" CACHE STRING "" FORCE)
|
||||||
set(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "Generate debug library name with a postfix.") # To be consistent with CMakeLists from contrib libs.
|
set(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "Generate debug library name with a postfix.") # To be consistent with CMakeLists from contrib libs.
|
||||||
|
|
||||||
option(ENABLE_IPO "Enable inter-procedural optimization (aka LTO)" OFF) # need cmake 3.9+
|
# Enable the ability to organize targets into hierarchies of "folders" for capable GUI-based IDEs.
|
||||||
|
# For more info see https://cmake.org/cmake/help/latest/prop_gbl/USE_FOLDERS.html
|
||||||
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||||
|
|
||||||
|
option(ENABLE_IPO "Enable full link time optimization (it's usually impractical; see also ENABLE_THINLTO)" OFF) # need cmake 3.9+
|
||||||
if(ENABLE_IPO)
|
if(ENABLE_IPO)
|
||||||
cmake_policy(SET CMP0069 NEW)
|
cmake_policy(SET CMP0069 NEW)
|
||||||
include(CheckIPOSupported)
|
include(CheckIPOSupported)
|
||||||
@ -53,12 +57,12 @@ endif ()
|
|||||||
include (cmake/find/ccache.cmake)
|
include (cmake/find/ccache.cmake)
|
||||||
|
|
||||||
if (NOT CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "None")
|
if (NOT CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "None")
|
||||||
message (STATUS "CMAKE_BUILD_TYPE is not set, set to default = RELWITHDEBINFO")
|
set (CMAKE_BUILD_TYPE "RelWithDebInfo")
|
||||||
set (CMAKE_BUILD_TYPE "RELWITHDEBINFO")
|
message (STATUS "CMAKE_BUILD_TYPE is not set, set to default = ${CMAKE_BUILD_TYPE}")
|
||||||
endif ()
|
endif ()
|
||||||
string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UC)
|
|
||||||
message (STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
|
message (STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
|
||||||
|
|
||||||
|
string (TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UC)
|
||||||
|
|
||||||
option (USE_STATIC_LIBRARIES "Set to FALSE to use shared libraries" ON)
|
option (USE_STATIC_LIBRARIES "Set to FALSE to use shared libraries" ON)
|
||||||
option (MAKE_STATIC_LIBRARIES "Set to FALSE to make shared libraries" ${USE_STATIC_LIBRARIES})
|
option (MAKE_STATIC_LIBRARIES "Set to FALSE to make shared libraries" ${USE_STATIC_LIBRARIES})
|
||||||
@ -84,9 +88,10 @@ option (ENABLE_FUZZING "Enables fuzzing instrumentation" OFF)
|
|||||||
if (ENABLE_FUZZING)
|
if (ENABLE_FUZZING)
|
||||||
message (STATUS "Fuzzing instrumentation enabled")
|
message (STATUS "Fuzzing instrumentation enabled")
|
||||||
set (WITH_COVERAGE ON)
|
set (WITH_COVERAGE ON)
|
||||||
set (SANITIZE "libfuzzer")
|
set (FUZZER "libfuzzer")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
include (cmake/fuzzer.cmake)
|
||||||
include (cmake/sanitize.cmake)
|
include (cmake/sanitize.cmake)
|
||||||
|
|
||||||
if (CMAKE_GENERATOR STREQUAL "Ninja" AND NOT DISABLE_COLORED_BUILD)
|
if (CMAKE_GENERATOR STREQUAL "Ninja" AND NOT DISABLE_COLORED_BUILD)
|
||||||
@ -98,16 +103,7 @@ endif ()
|
|||||||
include (cmake/add_warning.cmake)
|
include (cmake/add_warning.cmake)
|
||||||
|
|
||||||
if (NOT MSVC)
|
if (NOT MSVC)
|
||||||
set (COMMON_WARNING_FLAGS "${COMMON_WARNING_FLAGS} -Wall") # -Werror is also added inside directories with our own code.
|
set (COMMON_WARNING_FLAGS "${COMMON_WARNING_FLAGS} -Wall") # -Werror and many more is also added inside cmake/warnings.cmake
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (COMPILER_GCC OR COMPILER_CLANG)
|
|
||||||
set (CXX_WARNING_FLAGS "${CXX_WARNING_FLAGS} -Wnon-virtual-dtor")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (COMPILER_GCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "8.3.0")
|
|
||||||
# Warnings in protobuf generating
|
|
||||||
set (CXX_WARNING_FLAGS "${CXX_WARNING_FLAGS} -Wno-array-bounds")
|
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (COMPILER_CLANG)
|
if (COMPILER_CLANG)
|
||||||
@ -209,13 +205,43 @@ set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O3 ${
|
|||||||
set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -g3 -ggdb3 -fno-inline ${CMAKE_C_FLAGS_ADD}")
|
set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -g3 -ggdb3 -fno-inline ${CMAKE_C_FLAGS_ADD}")
|
||||||
|
|
||||||
if (COMPILER_CLANG)
|
if (COMPILER_CLANG)
|
||||||
# Exception unwinding doesn't work in clang release build without this option
|
|
||||||
# TODO investigate that
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer")
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-omit-frame-pointer")
|
|
||||||
if (OS_DARWIN)
|
if (OS_DARWIN)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -Wl,-U,_inside_main")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-U,_inside_main")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-U,_inside_main")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Display absolute paths in error messages. Otherwise KDevelop fails to navigate to correct file and opens a new file instead.
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-absolute-paths")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdiagnostics-absolute-paths")
|
||||||
|
|
||||||
|
option(ENABLE_THINLTO "Enable Thin LTO. Only applicable for clang. It's also suppressed when building with tests or sanitizers." ON)
|
||||||
|
|
||||||
|
# We cannot afford to use LTO when compiling unitests, and it's not enough
|
||||||
|
# to only supply -fno-lto at the final linking stage. So we disable it
|
||||||
|
# completely.
|
||||||
|
if (ENABLE_THINLTO AND NOT ENABLE_TESTS AND NOT SANITIZE)
|
||||||
|
# Link time optimization
|
||||||
|
set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -flto=thin")
|
||||||
|
set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -flto=thin")
|
||||||
|
set (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} -flto=thin")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
# Always prefer llvm tools when using clang. For instance, we cannot use GNU ar when llvm LTO is enabled
|
||||||
|
|
||||||
|
find_program (LLVM_AR_PATH NAMES "llvm-ar" "llvm-ar-10" "llvm-ar-9" "llvm-ar-8")
|
||||||
|
if (LLVM_AR_PATH)
|
||||||
|
message(STATUS "Using llvm-ar: ${LLVM_AR_PATH}.")
|
||||||
|
set (CMAKE_AR ${LLVM_AR_PATH})
|
||||||
|
else ()
|
||||||
|
message(WARNING "Cannot find llvm-ar. System ar will be used instead. It does not work with ThinLTO.")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
find_program (LLVM_RANLIB_PATH NAMES "llvm-ranlib" "llvm-ranlib-10" "llvm-ranlib-9" "llvm-ranlib-8")
|
||||||
|
if (LLVM_RANLIB_PATH)
|
||||||
|
message(STATUS "Using llvm-ranlib: ${LLVM_RANLIB_PATH}.")
|
||||||
|
set (CMAKE_RANLIB ${LLVM_RANLIB_PATH})
|
||||||
|
else ()
|
||||||
|
message(WARNING "Cannot find llvm-ranlib. System ranlib will be used instead. It does not work with ThinLTO.")
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
@ -242,7 +268,7 @@ endif ()
|
|||||||
# Make this extra-checks for correct library dependencies.
|
# Make this extra-checks for correct library dependencies.
|
||||||
if (OS_LINUX AND NOT SANITIZE)
|
if (OS_LINUX AND NOT SANITIZE)
|
||||||
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-undefined")
|
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-undefined")
|
||||||
set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-undefined")
|
set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
include(cmake/dbms_glob_sources.cmake)
|
include(cmake/dbms_glob_sources.cmake)
|
||||||
@ -259,7 +285,6 @@ endif ()
|
|||||||
### Add targets below this comment ###
|
### Add targets below this comment ###
|
||||||
######################################
|
######################################
|
||||||
|
|
||||||
string (TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UC)
|
|
||||||
set (CMAKE_POSTFIX_VARIABLE "CMAKE_${CMAKE_BUILD_TYPE_UC}_POSTFIX")
|
set (CMAKE_POSTFIX_VARIABLE "CMAKE_${CMAKE_BUILD_TYPE_UC}_POSTFIX")
|
||||||
|
|
||||||
if (MAKE_STATIC_LIBRARIES)
|
if (MAKE_STATIC_LIBRARIES)
|
||||||
@ -312,9 +337,7 @@ include (cmake/find/zlib.cmake)
|
|||||||
include (cmake/find/zstd.cmake)
|
include (cmake/find/zstd.cmake)
|
||||||
include (cmake/find/ltdl.cmake) # for odbc
|
include (cmake/find/ltdl.cmake) # for odbc
|
||||||
include (cmake/find/termcap.cmake)
|
include (cmake/find/termcap.cmake)
|
||||||
include (cmake/find/odbc.cmake)
|
# openssl, zlib before poco
|
||||||
# openssl, zlib, odbc before poco
|
|
||||||
include (cmake/find/poco.cmake)
|
|
||||||
include (cmake/find/lz4.cmake)
|
include (cmake/find/lz4.cmake)
|
||||||
include (cmake/find/xxhash.cmake)
|
include (cmake/find/xxhash.cmake)
|
||||||
include (cmake/find/sparsehash.cmake)
|
include (cmake/find/sparsehash.cmake)
|
||||||
@ -324,10 +347,6 @@ include (cmake/find/rdkafka.cmake)
|
|||||||
include (cmake/find/capnp.cmake)
|
include (cmake/find/capnp.cmake)
|
||||||
include (cmake/find/llvm.cmake)
|
include (cmake/find/llvm.cmake)
|
||||||
include (cmake/find/h3.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/libxml2.cmake)
|
||||||
include (cmake/find/brotli.cmake)
|
include (cmake/find/brotli.cmake)
|
||||||
include (cmake/find/protobuf.cmake)
|
include (cmake/find/protobuf.cmake)
|
||||||
@ -385,6 +404,9 @@ endmacro()
|
|||||||
set(ConfigIncludePath ${CMAKE_CURRENT_BINARY_DIR}/includes/configs CACHE INTERNAL "Path to generated configuration files.")
|
set(ConfigIncludePath ${CMAKE_CURRENT_BINARY_DIR}/includes/configs CACHE INTERNAL "Path to generated configuration files.")
|
||||||
include_directories(${ConfigIncludePath})
|
include_directories(${ConfigIncludePath})
|
||||||
|
|
||||||
|
# Add as many warnings as possible for our own code.
|
||||||
|
include (cmake/warnings.cmake)
|
||||||
|
|
||||||
add_subdirectory (base)
|
add_subdirectory (base)
|
||||||
add_subdirectory (programs)
|
add_subdirectory (programs)
|
||||||
add_subdirectory (src)
|
add_subdirectory (src)
|
||||||
|
@ -11,10 +11,9 @@ ClickHouse is an open-source column-oriented database management system that all
|
|||||||
* [Slack](https://join.slack.com/t/clickhousedb/shared_invite/zt-d2zxkf9e-XyxDa_ucfPxzuH4SJIm~Ng) and [Telegram](https://telegram.me/clickhouse_en) allow to chat with ClickHouse users in real-time.
|
* [Slack](https://join.slack.com/t/clickhousedb/shared_invite/zt-d2zxkf9e-XyxDa_ucfPxzuH4SJIm~Ng) and [Telegram](https://telegram.me/clickhouse_en) allow to chat with ClickHouse users in real-time.
|
||||||
* [Blog](https://clickhouse.yandex/blog/en/) contains various ClickHouse-related articles, as well as announces and reports about events.
|
* [Blog](https://clickhouse.yandex/blog/en/) contains various ClickHouse-related articles, as well as announces and reports about events.
|
||||||
* [Contacts](https://clickhouse.tech/#contacts) can help to get your questions answered if there are any.
|
* [Contacts](https://clickhouse.tech/#contacts) can help to get your questions answered if there are any.
|
||||||
* You can also [fill this form](https://forms.yandex.com/surveys/meet-yandex-clickhouse-team/) to meet Yandex ClickHouse team in person.
|
* You can also [fill this form](https://clickhouse.tech/#meet) to meet Yandex ClickHouse team in person.
|
||||||
|
|
||||||
## Upcoming Events
|
## Upcoming Events
|
||||||
|
|
||||||
* [ClickHouse Monitoring Round Table (online in English)](https://www.eventbrite.com/e/clickhouse-april-virtual-meetup-tickets-102272923066) on April 15, 2020.
|
|
||||||
* [ClickHouse Workshop in Novosibirsk](https://2020.codefest.ru/lecture/1628) on TBD date.
|
* [ClickHouse Workshop in Novosibirsk](https://2020.codefest.ru/lecture/1628) on TBD date.
|
||||||
* [Yandex C++ Open-Source Sprints in Moscow](https://events.yandex.ru/events/otkrytyj-kod-v-yandek-28-03-2020) on TBD date.
|
* [Yandex C++ Open-Source Sprints in Moscow](https://events.yandex.ru/events/otkrytyj-kod-v-yandek-28-03-2020) on TBD date.
|
||||||
|
@ -3,8 +3,10 @@ if (USE_CLANG_TIDY)
|
|||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
add_subdirectory (common)
|
add_subdirectory (common)
|
||||||
add_subdirectory (loggers)
|
|
||||||
add_subdirectory (daemon)
|
add_subdirectory (daemon)
|
||||||
|
add_subdirectory (loggers)
|
||||||
|
add_subdirectory (pcg-random)
|
||||||
|
add_subdirectory (widechar_width)
|
||||||
|
|
||||||
if (USE_MYSQL)
|
if (USE_MYSQL)
|
||||||
add_subdirectory (mysqlxx)
|
add_subdirectory (mysqlxx)
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
configure_file (config_common.h.in config_common.h)
|
|
||||||
|
|
||||||
set (SRCS
|
set (SRCS
|
||||||
argsToConfig.cpp
|
argsToConfig.cpp
|
||||||
coverage.cpp
|
coverage.cpp
|
||||||
@ -13,7 +11,7 @@ set (SRCS
|
|||||||
LineReader.cpp
|
LineReader.cpp
|
||||||
mremap.cpp
|
mremap.cpp
|
||||||
phdr_cache.cpp
|
phdr_cache.cpp
|
||||||
preciseExp10.c
|
preciseExp10.cpp
|
||||||
setTerminalEcho.cpp
|
setTerminalEcho.cpp
|
||||||
shift10.cpp
|
shift10.cpp
|
||||||
sleep.cpp
|
sleep.cpp
|
||||||
@ -39,17 +37,17 @@ else ()
|
|||||||
target_compile_definitions(common PUBLIC WITH_COVERAGE=0)
|
target_compile_definitions(common PUBLIC WITH_COVERAGE=0)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
if (USE_INTERNAL_CCTZ)
|
||||||
|
set_source_files_properties(DateLUTImpl.cpp PROPERTIES COMPILE_DEFINITIONS USE_INTERNAL_CCTZ)
|
||||||
|
endif()
|
||||||
|
|
||||||
target_include_directories(common PUBLIC .. ${CMAKE_CURRENT_BINARY_DIR}/..)
|
target_include_directories(common PUBLIC .. ${CMAKE_CURRENT_BINARY_DIR}/..)
|
||||||
|
|
||||||
if (NOT USE_INTERNAL_BOOST_LIBRARY)
|
if (NOT USE_INTERNAL_BOOST_LIBRARY)
|
||||||
target_include_directories (common SYSTEM BEFORE PUBLIC ${Boost_INCLUDE_DIRS})
|
target_include_directories (common SYSTEM BEFORE PUBLIC ${Boost_INCLUDE_DIRS})
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if(NOT USE_INTERNAL_POCO_LIBRARY)
|
# Allow explicit fallback to readline
|
||||||
target_include_directories (common SYSTEM BEFORE PUBLIC ${Poco_Foundation_INCLUDE_DIR})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# allow explicitly fallback to readline
|
|
||||||
if (NOT ENABLE_REPLXX AND ENABLE_READLINE)
|
if (NOT ENABLE_REPLXX AND ENABLE_READLINE)
|
||||||
message (STATUS "Attempt to fallback to readline explicitly")
|
message (STATUS "Attempt to fallback to readline explicitly")
|
||||||
set (READLINE_PATHS "/usr/local/opt/readline/lib")
|
set (READLINE_PATHS "/usr/local/opt/readline/lib")
|
||||||
@ -73,12 +71,13 @@ endif ()
|
|||||||
|
|
||||||
target_link_libraries (common
|
target_link_libraries (common
|
||||||
PUBLIC
|
PUBLIC
|
||||||
${Poco_Net_LIBRARY}
|
|
||||||
${Poco_Util_LIBRARY}
|
|
||||||
${Poco_Foundation_LIBRARY}
|
|
||||||
${CITYHASH_LIBRARIES}
|
${CITYHASH_LIBRARIES}
|
||||||
${Boost_SYSTEM_LIBRARY}
|
${Boost_SYSTEM_LIBRARY}
|
||||||
FastMemcpy
|
FastMemcpy
|
||||||
|
Poco::Net
|
||||||
|
Poco::Net::SSL
|
||||||
|
Poco::Util
|
||||||
|
Poco::Foundation
|
||||||
replxx
|
replxx
|
||||||
|
|
||||||
PRIVATE
|
PRIVATE
|
||||||
|
@ -2,16 +2,19 @@
|
|||||||
|
|
||||||
#include <cctz/civil_time.h>
|
#include <cctz/civil_time.h>
|
||||||
#include <cctz/time_zone.h>
|
#include <cctz/time_zone.h>
|
||||||
|
#include <cctz/zone_info_source.h>
|
||||||
|
#include <common/unaligned.h>
|
||||||
#include <Poco/Exception.h>
|
#include <Poco/Exception.h>
|
||||||
|
|
||||||
|
#include <dlfcn.h>
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
#define DATE_LUT_MIN 0
|
|
||||||
|
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
@ -28,9 +31,8 @@ UInt8 getDayOfWeek(const cctz::civil_day & date)
|
|||||||
case cctz::weekday::friday: return 5;
|
case cctz::weekday::friday: return 5;
|
||||||
case cctz::weekday::saturday: return 6;
|
case cctz::weekday::saturday: return 6;
|
||||||
case cctz::weekday::sunday: return 7;
|
case cctz::weekday::sunday: return 7;
|
||||||
default:
|
|
||||||
throw Poco::Exception("Logical error: incorrect week day.");
|
|
||||||
}
|
}
|
||||||
|
__builtin_unreachable();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -47,7 +49,7 @@ DateLUTImpl::DateLUTImpl(const std::string & time_zone_)
|
|||||||
assert(inside_main);
|
assert(inside_main);
|
||||||
|
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
time_t start_of_day = DATE_LUT_MIN;
|
time_t start_of_day = 0;
|
||||||
|
|
||||||
cctz::time_zone cctz_time_zone;
|
cctz::time_zone cctz_time_zone;
|
||||||
if (!cctz::load_time_zone(time_zone, &cctz_time_zone))
|
if (!cctz::load_time_zone(time_zone, &cctz_time_zone))
|
||||||
@ -72,6 +74,11 @@ DateLUTImpl::DateLUTImpl(const std::string & time_zone_)
|
|||||||
values.day_of_week = getDayOfWeek(date);
|
values.day_of_week = getDayOfWeek(date);
|
||||||
values.date = start_of_day;
|
values.date = start_of_day;
|
||||||
|
|
||||||
|
assert(values.year >= DATE_LUT_MIN_YEAR && values.year <= DATE_LUT_MAX_YEAR);
|
||||||
|
assert(values.month >= 1 && values.month <= 12);
|
||||||
|
assert(values.day_of_month >= 1 && values.day_of_month <= 31);
|
||||||
|
assert(values.day_of_week >= 1 && values.day_of_week <= 7);
|
||||||
|
|
||||||
if (values.day_of_month == 1)
|
if (values.day_of_month == 1)
|
||||||
{
|
{
|
||||||
cctz::civil_month month(date);
|
cctz::civil_month month(date);
|
||||||
@ -128,7 +135,7 @@ DateLUTImpl::DateLUTImpl(const std::string & time_zone_)
|
|||||||
/// Fill excessive part of lookup table. This is needed only to simplify handling of overflow cases.
|
/// Fill excessive part of lookup table. This is needed only to simplify handling of overflow cases.
|
||||||
while (i < DATE_LUT_SIZE)
|
while (i < DATE_LUT_SIZE)
|
||||||
{
|
{
|
||||||
lut[i] = lut[DATE_LUT_MAX_DAY_NUM];
|
lut[i] = lut[i - 1];
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,3 +164,74 @@ DateLUTImpl::DateLUTImpl(const std::string & time_zone_)
|
|||||||
years_months_lut[year_months_lut_index] = first_day_of_last_month;
|
years_months_lut[year_months_lut_index] = first_day_of_last_month;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(ARCADIA_BUILD) /// Arcadia's variant of CCTZ already has the same implementation.
|
||||||
|
|
||||||
|
/// Prefer to load timezones from blobs linked to the binary.
|
||||||
|
/// The blobs are provided by "tzdata" library.
|
||||||
|
/// This allows to avoid dependency on system tzdata.
|
||||||
|
namespace cctz_extension
|
||||||
|
{
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
class Source : public cctz::ZoneInfoSource
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Source(const char * data_, size_t size_) : data(data_), size(size_) {}
|
||||||
|
|
||||||
|
size_t Read(void * buf, size_t bytes) override
|
||||||
|
{
|
||||||
|
if (bytes > size)
|
||||||
|
bytes = size;
|
||||||
|
memcpy(buf, data, bytes);
|
||||||
|
data += bytes;
|
||||||
|
size -= bytes;
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Skip(size_t offset) override
|
||||||
|
{
|
||||||
|
if (offset <= size)
|
||||||
|
{
|
||||||
|
data += offset;
|
||||||
|
size -= offset;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
errno = EINVAL;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
const char * data;
|
||||||
|
size_t size;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::unique_ptr<cctz::ZoneInfoSource> custom_factory(
|
||||||
|
const std::string & name,
|
||||||
|
const std::function<std::unique_ptr<cctz::ZoneInfoSource>(const std::string & name)> & fallback)
|
||||||
|
{
|
||||||
|
std::string name_replaced = name;
|
||||||
|
std::replace(name_replaced.begin(), name_replaced.end(), '/', '_');
|
||||||
|
std::replace(name_replaced.begin(), name_replaced.end(), '-', '_');
|
||||||
|
|
||||||
|
/// These are the names that are generated by "ld -r -b binary"
|
||||||
|
std::string symbol_name_data = "_binary_" + name_replaced + "_start";
|
||||||
|
std::string symbol_name_size = "_binary_" + name_replaced + "_size";
|
||||||
|
|
||||||
|
const void * sym_data = dlsym(RTLD_DEFAULT, symbol_name_data.c_str());
|
||||||
|
const void * sym_size = dlsym(RTLD_DEFAULT, symbol_name_size.c_str());
|
||||||
|
|
||||||
|
if (sym_data && sym_size)
|
||||||
|
return std::make_unique<Source>(static_cast<const char *>(sym_data), unalignedLoad<size_t>(&sym_size));
|
||||||
|
|
||||||
|
return fallback(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ZoneInfoSourceFactory zone_info_source_factory = custom_factory;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -37,7 +37,12 @@ using YearWeek = std::pair<UInt16, UInt8>;
|
|||||||
class DateLUTImpl
|
class DateLUTImpl
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DateLUTImpl(const std::string & time_zone);
|
explicit DateLUTImpl(const std::string & time_zone);
|
||||||
|
|
||||||
|
DateLUTImpl(const DateLUTImpl &) = delete;
|
||||||
|
DateLUTImpl & operator=(const DateLUTImpl &) = delete;
|
||||||
|
DateLUTImpl(const DateLUTImpl &&) = delete;
|
||||||
|
DateLUTImpl & operator=(const DateLUTImpl &&) = delete;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/// The order of fields matters for alignment and sizeof.
|
/// The order of fields matters for alignment and sizeof.
|
||||||
@ -99,7 +104,7 @@ private:
|
|||||||
return guess;
|
return guess;
|
||||||
|
|
||||||
/// Time zones that have offset 0 from UTC do daylight saving time change (if any) towards increasing UTC offset (example: British Standard Time).
|
/// Time zones that have offset 0 from UTC do daylight saving time change (if any) towards increasing UTC offset (example: British Standard Time).
|
||||||
if (offset_at_start_of_epoch >= 0)
|
if (t >= lut[DayNum(guess + 1)].date)
|
||||||
return DayNum(guess + 1);
|
return DayNum(guess + 1);
|
||||||
|
|
||||||
return DayNum(guess - 1);
|
return DayNum(guess - 1);
|
||||||
@ -287,8 +292,8 @@ public:
|
|||||||
if (offset_is_whole_number_of_hours_everytime)
|
if (offset_is_whole_number_of_hours_everytime)
|
||||||
return (t / 60) % 60;
|
return (t / 60) % 60;
|
||||||
|
|
||||||
time_t date = find(t).date;
|
UInt32 date = find(t).date;
|
||||||
return (t - date) / 60 % 60;
|
return (UInt32(t) - date) / 60 % 60;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline time_t toStartOfMinute(time_t t) const { return t / 60 * 60; }
|
inline time_t toStartOfMinute(time_t t) const { return t / 60 * 60; }
|
||||||
@ -301,9 +306,8 @@ public:
|
|||||||
if (offset_is_whole_number_of_hours_everytime)
|
if (offset_is_whole_number_of_hours_everytime)
|
||||||
return t / 3600 * 3600;
|
return t / 3600 * 3600;
|
||||||
|
|
||||||
time_t date = find(t).date;
|
UInt32 date = find(t).date;
|
||||||
/// Still can return wrong values for time at 1970-01-01 if the UTC offset was non-whole number of hours.
|
return date + (UInt32(t) - date) / 3600 * 3600;
|
||||||
return date + (t - date) / 3600 * 3600;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Number of calendar day since the beginning of UNIX epoch (1970-01-01 is zero)
|
/** Number of calendar day since the beginning of UNIX epoch (1970-01-01 is zero)
|
||||||
@ -579,7 +583,7 @@ public:
|
|||||||
return t / 3600;
|
return t / 3600;
|
||||||
|
|
||||||
/// Assume that if offset was fractional, then the fraction is the same as at the beginning of epoch.
|
/// Assume that if offset was fractional, then the fraction is the same as at the beginning of epoch.
|
||||||
/// NOTE This assumption is false for "Pacific/Pitcairn" time zone.
|
/// NOTE This assumption is false for "Pacific/Pitcairn" and "Pacific/Kiritimati" time zones.
|
||||||
return (t + 86400 - offset_at_start_of_epoch) / 3600;
|
return (t + 86400 - offset_at_start_of_epoch) / 3600;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -451,7 +451,10 @@ JSON JSON::operator[] (size_t n) const
|
|||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
const_iterator it = begin();
|
const_iterator it = begin();
|
||||||
while (i < n && it != end())
|
while (i < n && it != end())
|
||||||
++it, ++i;
|
{
|
||||||
|
++it;
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
if (i != n)
|
if (i != n)
|
||||||
throw JSONException("JSON: array index " + std::to_string(n) + " out of bounds.");
|
throw JSONException("JSON: array index " + std::to_string(n) + " out of bounds.");
|
||||||
@ -626,7 +629,7 @@ std::string JSON::getString() const
|
|||||||
{
|
{
|
||||||
unicode = Poco::NumberParser::parseHex(hex);
|
unicode = Poco::NumberParser::parseHex(hex);
|
||||||
}
|
}
|
||||||
catch (const Poco::SyntaxException & e)
|
catch (const Poco::SyntaxException &)
|
||||||
{
|
{
|
||||||
throw JSONException("JSON: incorrect syntax: incorrect HEX code.");
|
throw JSONException("JSON: incorrect syntax: incorrect HEX code.");
|
||||||
}
|
}
|
||||||
|
@ -127,7 +127,7 @@ LineReader::InputStatus LineReader::readOneLine(const String & prompt)
|
|||||||
#ifdef OS_LINUX
|
#ifdef OS_LINUX
|
||||||
if (!readline_ptr)
|
if (!readline_ptr)
|
||||||
{
|
{
|
||||||
for (auto name : {"libreadline.so", "libreadline.so.0", "libeditline.so", "libeditline.so.0"})
|
for (const auto * name : {"libreadline.so", "libreadline.so.0", "libeditline.so", "libeditline.so.0"})
|
||||||
{
|
{
|
||||||
void * dl_handle = dlopen(name, RTLD_LAZY);
|
void * dl_handle = dlopen(name, RTLD_LAZY);
|
||||||
if (dl_handle)
|
if (dl_handle)
|
||||||
|
@ -37,13 +37,13 @@ ReplxxLineReader::ReplxxLineReader(const Suggest & suggest, const String & histo
|
|||||||
|
|
||||||
/// By default C-p/C-n binded to COMPLETE_NEXT/COMPLETE_PREV,
|
/// By default C-p/C-n binded to COMPLETE_NEXT/COMPLETE_PREV,
|
||||||
/// bind C-p/C-n to history-previous/history-next like readline.
|
/// bind C-p/C-n to history-previous/history-next like readline.
|
||||||
rx.bind_key(Replxx::KEY::control('N'), std::bind(&Replxx::invoke, &rx, Replxx::ACTION::HISTORY_NEXT, _1));
|
rx.bind_key(Replxx::KEY::control('N'), [this](char32_t code) { return rx.invoke(Replxx::ACTION::HISTORY_NEXT, code); });
|
||||||
rx.bind_key(Replxx::KEY::control('P'), std::bind(&Replxx::invoke, &rx, Replxx::ACTION::HISTORY_PREVIOUS, _1));
|
rx.bind_key(Replxx::KEY::control('P'), [this](char32_t code) { return rx.invoke(Replxx::ACTION::HISTORY_PREVIOUS, code); });
|
||||||
/// By default COMPLETE_NEXT/COMPLETE_PREV was binded to C-p/C-n, re-bind
|
/// By default COMPLETE_NEXT/COMPLETE_PREV was binded to C-p/C-n, re-bind
|
||||||
/// to M-P/M-N (that was used for HISTORY_COMMON_PREFIX_SEARCH before, but
|
/// to M-P/M-N (that was used for HISTORY_COMMON_PREFIX_SEARCH before, but
|
||||||
/// it also binded to M-p/M-n).
|
/// it also binded to M-p/M-n).
|
||||||
rx.bind_key(Replxx::KEY::meta('N'), std::bind(&Replxx::invoke, &rx, Replxx::ACTION::COMPLETE_NEXT, _1));
|
rx.bind_key(Replxx::KEY::meta('N'), [this](char32_t code) { return rx.invoke(Replxx::ACTION::COMPLETE_NEXT, code); });
|
||||||
rx.bind_key(Replxx::KEY::meta('P'), std::bind(&Replxx::invoke, &rx, Replxx::ACTION::COMPLETE_PREVIOUS, _1));
|
rx.bind_key(Replxx::KEY::meta('P'), [this](char32_t code) { return rx.invoke(Replxx::ACTION::COMPLETE_PREVIOUS, code); });
|
||||||
}
|
}
|
||||||
|
|
||||||
ReplxxLineReader::~ReplxxLineReader()
|
ReplxxLineReader::~ReplxxLineReader()
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
#include "argsToConfig.h"
|
#include "argsToConfig.h"
|
||||||
|
|
||||||
#include <Poco/Util/Application.h>
|
|
||||||
#include <Poco/Util/LayeredConfiguration.h>
|
#include <Poco/Util/LayeredConfiguration.h>
|
||||||
#include <Poco/Util/MapConfiguration.h>
|
#include <Poco/Util/MapConfiguration.h>
|
||||||
|
|
||||||
@ -11,7 +10,7 @@ void argsToConfig(const Poco::Util::Application::ArgVec & argv, Poco::Util::Laye
|
|||||||
/// Test: -- --1=1 --1=2 --3 5 7 8 -9 10 -11=12 14= 15== --16==17 --=18 --19= --20 21 22 --23 --24 25 --26 -27 28 ---29=30 -- ----31 32 --33 3-4
|
/// Test: -- --1=1 --1=2 --3 5 7 8 -9 10 -11=12 14= 15== --16==17 --=18 --19= --20 21 22 --23 --24 25 --26 -27 28 ---29=30 -- ----31 32 --33 3-4
|
||||||
Poco::AutoPtr<Poco::Util::MapConfiguration> map_config = new Poco::Util::MapConfiguration;
|
Poco::AutoPtr<Poco::Util::MapConfiguration> map_config = new Poco::Util::MapConfiguration;
|
||||||
std::string key;
|
std::string key;
|
||||||
for (auto & arg : argv)
|
for (const auto & arg : argv)
|
||||||
{
|
{
|
||||||
auto key_start = arg.find_first_not_of('-');
|
auto key_start = arg.find_first_not_of('-');
|
||||||
auto pos_minus = arg.find('-');
|
auto pos_minus = arg.find('-');
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
// .h autogenerated by cmake !
|
|
||||||
|
|
||||||
#cmakedefine01 UNBUNDLED
|
|
@ -1,16 +1,8 @@
|
|||||||
#include <common/demangle.h>
|
#include <common/demangle.h>
|
||||||
|
|
||||||
#if defined(__has_feature)
|
#if defined(_MSC_VER)
|
||||||
#if __has_feature(memory_sanitizer)
|
|
||||||
#define MEMORY_SANITIZER 1
|
|
||||||
#endif
|
|
||||||
#elif defined(__MEMORY_SANITIZER__)
|
|
||||||
#define MEMORY_SANITIZER 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if _MSC_VER || MEMORY_SANITIZER
|
DemangleResult tryDemangle(const char *)
|
||||||
|
|
||||||
DemangleResult tryDemangle(const char * name)
|
|
||||||
{
|
{
|
||||||
return DemangleResult{};
|
return DemangleResult{};
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
#include <common/getThreadId.h>
|
#include <common/getThreadId.h>
|
||||||
|
|
||||||
#if OS_LINUX
|
#if defined(OS_LINUX)
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <syscall.h>
|
#include <syscall.h>
|
||||||
#elif OS_FREEBSD
|
#elif defined(OS_FREEBSD)
|
||||||
#include <pthread_np.h>
|
#include <pthread_np.h>
|
||||||
#else
|
#else
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
@ -16,9 +16,9 @@ uint64_t getThreadId()
|
|||||||
{
|
{
|
||||||
if (!current_tid)
|
if (!current_tid)
|
||||||
{
|
{
|
||||||
#if OS_LINUX
|
#if defined(OS_LINUX)
|
||||||
current_tid = syscall(SYS_gettid); /// This call is always successful. - man gettid
|
current_tid = syscall(SYS_gettid); /// This call is always successful. - man gettid
|
||||||
#elif OS_FREEBSD
|
#elif defined(OS_FREEBSD)
|
||||||
current_tid = pthread_getthreadid_np();
|
current_tid = pthread_getthreadid_np();
|
||||||
#else
|
#else
|
||||||
if (0 != pthread_threadid_np(nullptr, ¤t_tid))
|
if (0 != pthread_threadid_np(nullptr, ¤t_tid))
|
||||||
|
@ -3,19 +3,11 @@
|
|||||||
#include <new>
|
#include <new>
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
|
|
||||||
#if __has_include(<common/config_common.h>)
|
|
||||||
#include <common/config_common.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if USE_JEMALLOC
|
#if USE_JEMALLOC
|
||||||
# include <jemalloc/jemalloc.h>
|
# include <jemalloc/jemalloc.h>
|
||||||
|
|
||||||
#if JEMALLOC_VERSION_MAJOR < 4
|
|
||||||
#undef USE_JEMALLOC
|
|
||||||
#define USE_JEMALLOC 0
|
|
||||||
#include <cstdlib>
|
|
||||||
#endif
|
#endif
|
||||||
#else
|
|
||||||
|
#if !USE_JEMALLOC || JEMALLOC_VERSION_MAJOR < 4
|
||||||
# include <cstdlib>
|
# include <cstdlib>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -43,7 +35,7 @@ inline ALWAYS_INLINE void deleteImpl(void * ptr) noexcept
|
|||||||
free(ptr);
|
free(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if USE_JEMALLOC
|
#if USE_JEMALLOC && JEMALLOC_VERSION_MAJOR >= 4
|
||||||
|
|
||||||
inline ALWAYS_INLINE void deleteSized(void * ptr, std::size_t size) noexcept
|
inline ALWAYS_INLINE void deleteSized(void * ptr, std::size_t size) noexcept
|
||||||
{
|
{
|
||||||
|
@ -19,7 +19,7 @@ void * mremap_fallback(
|
|||||||
return MAP_FAILED;
|
return MAP_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if _MSC_VER
|
#if defined(_MSC_VER)
|
||||||
void * new_address = ::operator new(new_size);
|
void * new_address = ::operator new(new_size);
|
||||||
#else
|
#else
|
||||||
void * new_address = mmap(nullptr, new_size, mmap_prot, mmap_flags, mmap_fd, mmap_offset);
|
void * new_address = mmap(nullptr, new_size, mmap_prot, mmap_flags, mmap_fd, mmap_offset);
|
||||||
@ -29,7 +29,7 @@ void * mremap_fallback(
|
|||||||
|
|
||||||
memcpy(new_address, old_address, old_size);
|
memcpy(new_address, old_address, old_size);
|
||||||
|
|
||||||
#if _MSC_VER
|
#if defined(_MSC_VER)
|
||||||
delete old_address;
|
delete old_address;
|
||||||
#else
|
#else
|
||||||
if (munmap(old_address, old_size))
|
if (munmap(old_address, old_size))
|
||||||
|
@ -20,6 +20,14 @@
|
|||||||
#define USE_PHDR_CACHE 1
|
#define USE_PHDR_CACHE 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/// Thread Sanitizer uses dl_iterate_phdr function on initialization and fails if we provide our own.
|
||||||
|
#ifdef USE_PHDR_CACHE
|
||||||
|
|
||||||
|
#if defined(__clang__)
|
||||||
|
# pragma clang diagnostic ignored "-Wreserved-id-macro"
|
||||||
|
# pragma clang diagnostic ignored "-Wunused-macros"
|
||||||
|
#endif
|
||||||
|
|
||||||
#define __msan_unpoison(X, Y)
|
#define __msan_unpoison(X, Y)
|
||||||
#if defined(__has_feature)
|
#if defined(__has_feature)
|
||||||
# if __has_feature(memory_sanitizer)
|
# if __has_feature(memory_sanitizer)
|
||||||
@ -28,9 +36,6 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/// Thread Sanitizer uses dl_iterate_phdr function on initialization and fails if we provide our own.
|
|
||||||
#ifdef USE_PHDR_CACHE
|
|
||||||
|
|
||||||
#include <link.h>
|
#include <link.h>
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@ -70,7 +75,7 @@ extern "C"
|
|||||||
#endif
|
#endif
|
||||||
int dl_iterate_phdr(int (*callback) (dl_phdr_info * info, size_t size, void * data), void * data)
|
int dl_iterate_phdr(int (*callback) (dl_phdr_info * info, size_t size, void * data), void * data)
|
||||||
{
|
{
|
||||||
auto current_phdr_cache = phdr_cache.load();
|
auto * current_phdr_cache = phdr_cache.load();
|
||||||
if (!current_phdr_cache)
|
if (!current_phdr_cache)
|
||||||
{
|
{
|
||||||
// Cache is not yet populated, pass through to the original function.
|
// Cache is not yet populated, pass through to the original function.
|
||||||
|
@ -1,227 +0,0 @@
|
|||||||
/*
|
|
||||||
|
|
||||||
https://www.musl-libc.org/
|
|
||||||
http://git.musl-libc.org/cgit/musl/tree/src/math/exp10.c
|
|
||||||
|
|
||||||
musl as a whole is licensed under the following standard MIT license:
|
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
|
||||||
Copyright © 2005-2014 Rich Felker, et al.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
"Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
||||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
||||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
||||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
----------------------------------------------------------------------
|
|
||||||
|
|
||||||
Authors/contributors include:
|
|
||||||
|
|
||||||
Alex Dowad
|
|
||||||
Alexander Monakov
|
|
||||||
Anthony G. Basile
|
|
||||||
Arvid Picciani
|
|
||||||
Bobby Bingham
|
|
||||||
Boris Brezillon
|
|
||||||
Brent Cook
|
|
||||||
Chris Spiegel
|
|
||||||
Clément Vasseur
|
|
||||||
Daniel Micay
|
|
||||||
Denys Vlasenko
|
|
||||||
Emil Renner Berthing
|
|
||||||
Felix Fietkau
|
|
||||||
Felix Janda
|
|
||||||
Gianluca Anzolin
|
|
||||||
Hauke Mehrtens
|
|
||||||
Hiltjo Posthuma
|
|
||||||
Isaac Dunham
|
|
||||||
Jaydeep Patil
|
|
||||||
Jens Gustedt
|
|
||||||
Jeremy Huntwork
|
|
||||||
Jo-Philipp Wich
|
|
||||||
Joakim Sindholt
|
|
||||||
John Spencer
|
|
||||||
Josiah Worcester
|
|
||||||
Justin Cormack
|
|
||||||
Khem Raj
|
|
||||||
Kylie McClain
|
|
||||||
Luca Barbato
|
|
||||||
Luka Perkov
|
|
||||||
M Farkas-Dyck (Strake)
|
|
||||||
Mahesh Bodapati
|
|
||||||
Michael Forney
|
|
||||||
Natanael Copa
|
|
||||||
Nicholas J. Kain
|
|
||||||
orc
|
|
||||||
Pascal Cuoq
|
|
||||||
Petr Hosek
|
|
||||||
Pierre Carrier
|
|
||||||
Rich Felker
|
|
||||||
Richard Pennington
|
|
||||||
Shiz
|
|
||||||
sin
|
|
||||||
Solar Designer
|
|
||||||
Stefan Kristiansson
|
|
||||||
Szabolcs Nagy
|
|
||||||
Timo Teräs
|
|
||||||
Trutz Behn
|
|
||||||
Valentin Ochs
|
|
||||||
William Haddon
|
|
||||||
|
|
||||||
Portions of this software are derived from third-party works licensed
|
|
||||||
under terms compatible with the above MIT license:
|
|
||||||
|
|
||||||
The TRE regular expression implementation (src/regex/reg* and
|
|
||||||
src/regex/tre*) is Copyright © 2001-2008 Ville Laurikari and licensed
|
|
||||||
under a 2-clause BSD license (license text in the source files). The
|
|
||||||
included version has been heavily modified by Rich Felker in 2012, in
|
|
||||||
the interests of size, simplicity, and namespace cleanliness.
|
|
||||||
|
|
||||||
Much of the math library code (src/math/ * and src/complex/ *) is
|
|
||||||
Copyright © 1993,2004 Sun Microsystems or
|
|
||||||
Copyright © 2003-2011 David Schultz or
|
|
||||||
Copyright © 2003-2009 Steven G. Kargl or
|
|
||||||
Copyright © 2003-2009 Bruce D. Evans or
|
|
||||||
Copyright © 2008 Stephen L. Moshier
|
|
||||||
and labelled as such in comments in the individual source files. All
|
|
||||||
have been licensed under extremely permissive terms.
|
|
||||||
|
|
||||||
The ARM memcpy code (src/string/arm/memcpy_el.S) is Copyright © 2008
|
|
||||||
The Android Open Source Project and is licensed under a two-clause BSD
|
|
||||||
license. It was taken from Bionic libc, used on Android.
|
|
||||||
|
|
||||||
The implementation of DES for crypt (src/crypt/crypt_des.c) is
|
|
||||||
Copyright © 1994 David Burren. It is licensed under a BSD license.
|
|
||||||
|
|
||||||
The implementation of blowfish crypt (src/crypt/crypt_blowfish.c) was
|
|
||||||
originally written by Solar Designer and placed into the public
|
|
||||||
domain. The code also comes with a fallback permissive license for use
|
|
||||||
in jurisdictions that may not recognize the public domain.
|
|
||||||
|
|
||||||
The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011
|
|
||||||
Valentin Ochs and is licensed under an MIT-style license.
|
|
||||||
|
|
||||||
The BSD PRNG implementation (src/prng/random.c) and XSI search API
|
|
||||||
(src/search/ *.c) functions are Copyright © 2011 Szabolcs Nagy and
|
|
||||||
licensed under following terms: "Permission to use, copy, modify,
|
|
||||||
and/or distribute this code for any purpose with or without fee is
|
|
||||||
hereby granted. There is no warranty."
|
|
||||||
|
|
||||||
The x86_64 port was written by Nicholas J. Kain and is licensed under
|
|
||||||
the standard MIT terms.
|
|
||||||
|
|
||||||
The mips and microblaze ports were originally written by Richard
|
|
||||||
Pennington for use in the ellcc project. The original code was adapted
|
|
||||||
by Rich Felker for build system and code conventions during upstream
|
|
||||||
integration. It is licensed under the standard MIT terms.
|
|
||||||
|
|
||||||
The mips64 port was contributed by Imagination Technologies and is
|
|
||||||
licensed under the standard MIT terms.
|
|
||||||
|
|
||||||
The powerpc port was also originally written by Richard Pennington,
|
|
||||||
and later supplemented and integrated by John Spencer. It is licensed
|
|
||||||
under the standard MIT terms.
|
|
||||||
|
|
||||||
All other files which have no copyright comments are original works
|
|
||||||
produced specifically for use as part of this library, written either
|
|
||||||
by Rich Felker, the main author of the library, or by one or more
|
|
||||||
contibutors listed above. Details on authorship of individual files
|
|
||||||
can be found in the git version control history of the project. The
|
|
||||||
omission of copyright and license comments in each file is in the
|
|
||||||
interest of source tree size.
|
|
||||||
|
|
||||||
In addition, permission is hereby granted for all public header files
|
|
||||||
(include/ * and arch/ * /bits/ *) and crt files intended to be linked into
|
|
||||||
applications (crt/ *, ldso/dlstart.c, and arch/ * /crt_arch.h) to omit
|
|
||||||
the copyright notice and permission notice otherwise required by the
|
|
||||||
license, and to use these files without any requirement of
|
|
||||||
attribution. These files include substantial contributions from:
|
|
||||||
|
|
||||||
Bobby Bingham
|
|
||||||
John Spencer
|
|
||||||
Nicholas J. Kain
|
|
||||||
Rich Felker
|
|
||||||
Richard Pennington
|
|
||||||
Stefan Kristiansson
|
|
||||||
Szabolcs Nagy
|
|
||||||
|
|
||||||
all of whom have explicitly granted such permission.
|
|
||||||
|
|
||||||
This file previously contained text expressing a belief that most of
|
|
||||||
the files covered by the above exception were sufficiently trivial not
|
|
||||||
to be subject to copyright, resulting in confusion over whether it
|
|
||||||
negated the permissions granted in the license. In the spirit of
|
|
||||||
permissive licensing, and of not having licensing issues being an
|
|
||||||
obstacle to adoption, that text has been removed.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
double preciseExp10(double x)
|
|
||||||
{
|
|
||||||
if (isnan(x)) return NAN;
|
|
||||||
|
|
||||||
// ranging between DBL_TRUE_MIN and DBL_MAX. Outsiders are treated as zeros or infinities
|
|
||||||
static const double p10[]
|
|
||||||
= {1e-323, 1e-322, 1e-321, 1e-320, 1e-319, 1e-318, 1e-317, 1e-316, 1e-315, 1e-314, 1e-313, 1e-312, 1e-311, 1e-310, 1e-309, 1e-308, 1e-307,
|
|
||||||
1e-306, 1e-305, 1e-304, 1e-303, 1e-302, 1e-301, 1e-300, 1e-299, 1e-298, 1e-297, 1e-296, 1e-295, 1e-294, 1e-293, 1e-292, 1e-291, 1e-290,
|
|
||||||
1e-289, 1e-288, 1e-287, 1e-286, 1e-285, 1e-284, 1e-283, 1e-282, 1e-281, 1e-280, 1e-279, 1e-278, 1e-277, 1e-276, 1e-275, 1e-274, 1e-273,
|
|
||||||
1e-272, 1e-271, 1e-270, 1e-269, 1e-268, 1e-267, 1e-266, 1e-265, 1e-264, 1e-263, 1e-262, 1e-261, 1e-260, 1e-259, 1e-258, 1e-257, 1e-256,
|
|
||||||
1e-255, 1e-254, 1e-253, 1e-252, 1e-251, 1e-250, 1e-249, 1e-248, 1e-247, 1e-246, 1e-245, 1e-244, 1e-243, 1e-242, 1e-241, 1e-240, 1e-239,
|
|
||||||
1e-238, 1e-237, 1e-236, 1e-235, 1e-234, 1e-233, 1e-232, 1e-231, 1e-230, 1e-229, 1e-228, 1e-227, 1e-226, 1e-225, 1e-224, 1e-223, 1e-222,
|
|
||||||
1e-221, 1e-220, 1e-219, 1e-218, 1e-217, 1e-216, 1e-215, 1e-214, 1e-213, 1e-212, 1e-211, 1e-210, 1e-209, 1e-208, 1e-207, 1e-206, 1e-205,
|
|
||||||
1e-204, 1e-203, 1e-202, 1e-201, 1e-200, 1e-199, 1e-198, 1e-197, 1e-196, 1e-195, 1e-194, 1e-193, 1e-192, 1e-191, 1e-190, 1e-189, 1e-188,
|
|
||||||
1e-187, 1e-186, 1e-185, 1e-184, 1e-183, 1e-182, 1e-181, 1e-180, 1e-179, 1e-178, 1e-177, 1e-176, 1e-175, 1e-174, 1e-173, 1e-172, 1e-171,
|
|
||||||
1e-170, 1e-169, 1e-168, 1e-167, 1e-166, 1e-165, 1e-164, 1e-163, 1e-162, 1e-161, 1e-160, 1e-159, 1e-158, 1e-157, 1e-156, 1e-155, 1e-154,
|
|
||||||
1e-153, 1e-152, 1e-151, 1e-150, 1e-149, 1e-148, 1e-147, 1e-146, 1e-145, 1e-144, 1e-143, 1e-142, 1e-141, 1e-140, 1e-139, 1e-138, 1e-137,
|
|
||||||
1e-136, 1e-135, 1e-134, 1e-133, 1e-132, 1e-131, 1e-130, 1e-129, 1e-128, 1e-127, 1e-126, 1e-125, 1e-124, 1e-123, 1e-122, 1e-121, 1e-120,
|
|
||||||
1e-119, 1e-118, 1e-117, 1e-116, 1e-115, 1e-114, 1e-113, 1e-112, 1e-111, 1e-110, 1e-109, 1e-108, 1e-107, 1e-106, 1e-105, 1e-104, 1e-103,
|
|
||||||
1e-102, 1e-101, 1e-100, 1e-99, 1e-98, 1e-97, 1e-96, 1e-95, 1e-94, 1e-93, 1e-92, 1e-91, 1e-90, 1e-89, 1e-88, 1e-87, 1e-86,
|
|
||||||
1e-85, 1e-84, 1e-83, 1e-82, 1e-81, 1e-80, 1e-79, 1e-78, 1e-77, 1e-76, 1e-75, 1e-74, 1e-73, 1e-72, 1e-71, 1e-70, 1e-69,
|
|
||||||
1e-68, 1e-67, 1e-66, 1e-65, 1e-64, 1e-63, 1e-62, 1e-61, 1e-60, 1e-59, 1e-58, 1e-57, 1e-56, 1e-55, 1e-54, 1e-53, 1e-52,
|
|
||||||
1e-51, 1e-50, 1e-49, 1e-48, 1e-47, 1e-46, 1e-45, 1e-44, 1e-43, 1e-42, 1e-41, 1e-40, 1e-39, 1e-38, 1e-37, 1e-36, 1e-35,
|
|
||||||
1e-34, 1e-33, 1e-32, 1e-31, 1e-30, 1e-29, 1e-28, 1e-27, 1e-26, 1e-25, 1e-24, 1e-23, 1e-22, 1e-21, 1e-20, 1e-19, 1e-18,
|
|
||||||
1e-17, 1e-16, 1e-15, 1e-14, 1e-13, 1e-12, 1e-11, 1e-10, 1e-9, 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1,
|
|
||||||
1e0, 1e+1, 1e+2, 1e+3, 1e+4, 1e+5, 1e+6, 1e+7, 1e+8, 1e+9, 1e+10, 1e+11, 1e+12, 1e+13, 1e+14, 1e+15, 1e+16,
|
|
||||||
1e+17, 1e+18, 1e+19, 1e+20, 1e+21, 1e+22, 1e+23, 1e+24, 1e+25, 1e+26, 1e+27, 1e+28, 1e+29, 1e+30, 1e+31, 1e+32, 1e+33,
|
|
||||||
1e+34, 1e+35, 1e+36, 1e+37, 1e+38, 1e+39, 1e+40, 1e+41, 1e+42, 1e+43, 1e+44, 1e+45, 1e+46, 1e+47, 1e+48, 1e+49, 1e+50,
|
|
||||||
1e+51, 1e+52, 1e+53, 1e+54, 1e+55, 1e+56, 1e+57, 1e+58, 1e+59, 1e+60, 1e+61, 1e+62, 1e+63, 1e+64, 1e+65, 1e+66, 1e+67,
|
|
||||||
1e+68, 1e+69, 1e+70, 1e+71, 1e+72, 1e+73, 1e+74, 1e+75, 1e+76, 1e+77, 1e+78, 1e+79, 1e+80, 1e+81, 1e+82, 1e+83, 1e+84,
|
|
||||||
1e+85, 1e+86, 1e+87, 1e+88, 1e+89, 1e+90, 1e+91, 1e+92, 1e+93, 1e+94, 1e+95, 1e+96, 1e+97, 1e+98, 1e+99, 1e+100, 1e+101,
|
|
||||||
1e+102, 1e+103, 1e+104, 1e+105, 1e+106, 1e+107, 1e+108, 1e+109, 1e+110, 1e+111, 1e+112, 1e+113, 1e+114, 1e+115, 1e+116, 1e+117, 1e+118,
|
|
||||||
1e+119, 1e+120, 1e+121, 1e+122, 1e+123, 1e+124, 1e+125, 1e+126, 1e+127, 1e+128, 1e+129, 1e+130, 1e+131, 1e+132, 1e+133, 1e+134, 1e+135,
|
|
||||||
1e+136, 1e+137, 1e+138, 1e+139, 1e+140, 1e+141, 1e+142, 1e+143, 1e+144, 1e+145, 1e+146, 1e+147, 1e+148, 1e+149, 1e+150, 1e+151, 1e+152,
|
|
||||||
1e+153, 1e+154, 1e+155, 1e+156, 1e+157, 1e+158, 1e+159, 1e+160, 1e+161, 1e+162, 1e+163, 1e+164, 1e+165, 1e+166, 1e+167, 1e+168, 1e+169,
|
|
||||||
1e+170, 1e+171, 1e+172, 1e+173, 1e+174, 1e+175, 1e+176, 1e+177, 1e+178, 1e+179, 1e+180, 1e+181, 1e+182, 1e+183, 1e+184, 1e+185, 1e+186,
|
|
||||||
1e+187, 1e+188, 1e+189, 1e+190, 1e+191, 1e+192, 1e+193, 1e+194, 1e+195, 1e+196, 1e+197, 1e+198, 1e+199, 1e+200, 1e+201, 1e+202, 1e+203,
|
|
||||||
1e+204, 1e+205, 1e+206, 1e+207, 1e+208, 1e+209, 1e+210, 1e+211, 1e+212, 1e+213, 1e+214, 1e+215, 1e+216, 1e+217, 1e+218, 1e+219, 1e+220,
|
|
||||||
1e+221, 1e+222, 1e+223, 1e+224, 1e+225, 1e+226, 1e+227, 1e+228, 1e+229, 1e+230, 1e+231, 1e+232, 1e+233, 1e+234, 1e+235, 1e+236, 1e+237,
|
|
||||||
1e+238, 1e+239, 1e+240, 1e+241, 1e+242, 1e+243, 1e+244, 1e+245, 1e+246, 1e+247, 1e+248, 1e+249, 1e+250, 1e+251, 1e+252, 1e+253, 1e+254,
|
|
||||||
1e+255, 1e+256, 1e+257, 1e+258, 1e+259, 1e+260, 1e+261, 1e+262, 1e+263, 1e+264, 1e+265, 1e+266, 1e+267, 1e+268, 1e+269, 1e+270, 1e+271,
|
|
||||||
1e+272, 1e+273, 1e+274, 1e+275, 1e+276, 1e+277, 1e+278, 1e+279, 1e+280, 1e+281, 1e+282, 1e+283, 1e+284, 1e+285, 1e+286, 1e+287, 1e+288,
|
|
||||||
1e+289, 1e+290, 1e+291, 1e+292, 1e+293, 1e+294, 1e+295, 1e+296, 1e+297, 1e+298, 1e+299, 1e+300, 1e+301, 1e+302, 1e+303, 1e+304, 1e+305,
|
|
||||||
1e+306, 1e+307, 1e+308};
|
|
||||||
|
|
||||||
double n, y = modf(x, &n);
|
|
||||||
if (n > 308) return INFINITY;
|
|
||||||
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];
|
|
||||||
}
|
|
227
base/common/preciseExp10.cpp
Normal file
227
base/common/preciseExp10.cpp
Normal file
@ -0,0 +1,227 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
https://www.musl-libc.org/
|
||||||
|
http://git.musl-libc.org/cgit/musl/tree/src/math/exp10.c
|
||||||
|
|
||||||
|
musl as a whole is licensed under the following standard MIT license:
|
||||||
|
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
Copyright © 2005-2014 Rich Felker, et al.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Authors/contributors include:
|
||||||
|
|
||||||
|
Alex Dowad
|
||||||
|
Alexander Monakov
|
||||||
|
Anthony G. Basile
|
||||||
|
Arvid Picciani
|
||||||
|
Bobby Bingham
|
||||||
|
Boris Brezillon
|
||||||
|
Brent Cook
|
||||||
|
Chris Spiegel
|
||||||
|
Clément Vasseur
|
||||||
|
Daniel Micay
|
||||||
|
Denys Vlasenko
|
||||||
|
Emil Renner Berthing
|
||||||
|
Felix Fietkau
|
||||||
|
Felix Janda
|
||||||
|
Gianluca Anzolin
|
||||||
|
Hauke Mehrtens
|
||||||
|
Hiltjo Posthuma
|
||||||
|
Isaac Dunham
|
||||||
|
Jaydeep Patil
|
||||||
|
Jens Gustedt
|
||||||
|
Jeremy Huntwork
|
||||||
|
Jo-Philipp Wich
|
||||||
|
Joakim Sindholt
|
||||||
|
John Spencer
|
||||||
|
Josiah Worcester
|
||||||
|
Justin Cormack
|
||||||
|
Khem Raj
|
||||||
|
Kylie McClain
|
||||||
|
Luca Barbato
|
||||||
|
Luka Perkov
|
||||||
|
M Farkas-Dyck (Strake)
|
||||||
|
Mahesh Bodapati
|
||||||
|
Michael Forney
|
||||||
|
Natanael Copa
|
||||||
|
Nicholas J. Kain
|
||||||
|
orc
|
||||||
|
Pascal Cuoq
|
||||||
|
Petr Hosek
|
||||||
|
Pierre Carrier
|
||||||
|
Rich Felker
|
||||||
|
Richard Pennington
|
||||||
|
Shiz
|
||||||
|
sin
|
||||||
|
Solar Designer
|
||||||
|
Stefan Kristiansson
|
||||||
|
Szabolcs Nagy
|
||||||
|
Timo Teräs
|
||||||
|
Trutz Behn
|
||||||
|
Valentin Ochs
|
||||||
|
William Haddon
|
||||||
|
|
||||||
|
Portions of this software are derived from third-party works licensed
|
||||||
|
under terms compatible with the above MIT license:
|
||||||
|
|
||||||
|
The TRE regular expression implementation (src/regex/reg* and
|
||||||
|
src/regex/tre*) is Copyright © 2001-2008 Ville Laurikari and licensed
|
||||||
|
under a 2-clause BSD license (license text in the source files). The
|
||||||
|
included version has been heavily modified by Rich Felker in 2012, in
|
||||||
|
the interests of size, simplicity, and namespace cleanliness.
|
||||||
|
|
||||||
|
Much of the math library code (src/math/ * and src/complex/ *) is
|
||||||
|
Copyright © 1993,2004 Sun Microsystems or
|
||||||
|
Copyright © 2003-2011 David Schultz or
|
||||||
|
Copyright © 2003-2009 Steven G. Kargl or
|
||||||
|
Copyright © 2003-2009 Bruce D. Evans or
|
||||||
|
Copyright © 2008 Stephen L. Moshier
|
||||||
|
and labelled as such in comments in the individual source files. All
|
||||||
|
have been licensed under extremely permissive terms.
|
||||||
|
|
||||||
|
The ARM memcpy code (src/string/arm/memcpy_el.S) is Copyright © 2008
|
||||||
|
The Android Open Source Project and is licensed under a two-clause BSD
|
||||||
|
license. It was taken from Bionic libc, used on Android.
|
||||||
|
|
||||||
|
The implementation of DES for crypt (src/crypt/crypt_des.c) is
|
||||||
|
Copyright © 1994 David Burren. It is licensed under a BSD license.
|
||||||
|
|
||||||
|
The implementation of blowfish crypt (src/crypt/crypt_blowfish.c) was
|
||||||
|
originally written by Solar Designer and placed into the public
|
||||||
|
domain. The code also comes with a fallback permissive license for use
|
||||||
|
in jurisdictions that may not recognize the public domain.
|
||||||
|
|
||||||
|
The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011
|
||||||
|
Valentin Ochs and is licensed under an MIT-style license.
|
||||||
|
|
||||||
|
The BSD PRNG implementation (src/prng/random.c) and XSI search API
|
||||||
|
(src/search/ *.c) functions are Copyright © 2011 Szabolcs Nagy and
|
||||||
|
licensed under following terms: "Permission to use, copy, modify,
|
||||||
|
and/or distribute this code for any purpose with or without fee is
|
||||||
|
hereby granted. There is no warranty."
|
||||||
|
|
||||||
|
The x86_64 port was written by Nicholas J. Kain and is licensed under
|
||||||
|
the standard MIT terms.
|
||||||
|
|
||||||
|
The mips and microblaze ports were originally written by Richard
|
||||||
|
Pennington for use in the ellcc project. The original code was adapted
|
||||||
|
by Rich Felker for build system and code conventions during upstream
|
||||||
|
integration. It is licensed under the standard MIT terms.
|
||||||
|
|
||||||
|
The mips64 port was contributed by Imagination Technologies and is
|
||||||
|
licensed under the standard MIT terms.
|
||||||
|
|
||||||
|
The powerpc port was also originally written by Richard Pennington,
|
||||||
|
and later supplemented and integrated by John Spencer. It is licensed
|
||||||
|
under the standard MIT terms.
|
||||||
|
|
||||||
|
All other files which have no copyright comments are original works
|
||||||
|
produced specifically for use as part of this library, written either
|
||||||
|
by Rich Felker, the main author of the library, or by one or more
|
||||||
|
contibutors listed above. Details on authorship of individual files
|
||||||
|
can be found in the git version control history of the project. The
|
||||||
|
omission of copyright and license comments in each file is in the
|
||||||
|
interest of source tree size.
|
||||||
|
|
||||||
|
In addition, permission is hereby granted for all public header files
|
||||||
|
(include/ * and arch/ * /bits/ *) and crt files intended to be linked into
|
||||||
|
applications (crt/ *, ldso/dlstart.c, and arch/ * /crt_arch.h) to omit
|
||||||
|
the copyright notice and permission notice otherwise required by the
|
||||||
|
license, and to use these files without any requirement of
|
||||||
|
attribution. These files include substantial contributions from:
|
||||||
|
|
||||||
|
Bobby Bingham
|
||||||
|
John Spencer
|
||||||
|
Nicholas J. Kain
|
||||||
|
Rich Felker
|
||||||
|
Richard Pennington
|
||||||
|
Stefan Kristiansson
|
||||||
|
Szabolcs Nagy
|
||||||
|
|
||||||
|
all of whom have explicitly granted such permission.
|
||||||
|
|
||||||
|
This file previously contained text expressing a belief that most of
|
||||||
|
the files covered by the above exception were sufficiently trivial not
|
||||||
|
to be subject to copyright, resulting in confusion over whether it
|
||||||
|
negated the permissions granted in the license. In the spirit of
|
||||||
|
permissive licensing, and of not having licensing issues being an
|
||||||
|
obstacle to adoption, that text has been removed.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
double preciseExp10(double x)
|
||||||
|
{
|
||||||
|
if (isnan(x)) return NAN;
|
||||||
|
|
||||||
|
// ranging between DBL_TRUE_MIN and DBL_MAX. Outsiders are treated as zeros or infinities
|
||||||
|
static const double p10[]
|
||||||
|
= {1e-323, 1e-322, 1e-321, 1e-320, 1e-319, 1e-318, 1e-317, 1e-316, 1e-315, 1e-314, 1e-313, 1e-312, 1e-311, 1e-310, 1e-309, 1e-308, 1e-307,
|
||||||
|
1e-306, 1e-305, 1e-304, 1e-303, 1e-302, 1e-301, 1e-300, 1e-299, 1e-298, 1e-297, 1e-296, 1e-295, 1e-294, 1e-293, 1e-292, 1e-291, 1e-290,
|
||||||
|
1e-289, 1e-288, 1e-287, 1e-286, 1e-285, 1e-284, 1e-283, 1e-282, 1e-281, 1e-280, 1e-279, 1e-278, 1e-277, 1e-276, 1e-275, 1e-274, 1e-273,
|
||||||
|
1e-272, 1e-271, 1e-270, 1e-269, 1e-268, 1e-267, 1e-266, 1e-265, 1e-264, 1e-263, 1e-262, 1e-261, 1e-260, 1e-259, 1e-258, 1e-257, 1e-256,
|
||||||
|
1e-255, 1e-254, 1e-253, 1e-252, 1e-251, 1e-250, 1e-249, 1e-248, 1e-247, 1e-246, 1e-245, 1e-244, 1e-243, 1e-242, 1e-241, 1e-240, 1e-239,
|
||||||
|
1e-238, 1e-237, 1e-236, 1e-235, 1e-234, 1e-233, 1e-232, 1e-231, 1e-230, 1e-229, 1e-228, 1e-227, 1e-226, 1e-225, 1e-224, 1e-223, 1e-222,
|
||||||
|
1e-221, 1e-220, 1e-219, 1e-218, 1e-217, 1e-216, 1e-215, 1e-214, 1e-213, 1e-212, 1e-211, 1e-210, 1e-209, 1e-208, 1e-207, 1e-206, 1e-205,
|
||||||
|
1e-204, 1e-203, 1e-202, 1e-201, 1e-200, 1e-199, 1e-198, 1e-197, 1e-196, 1e-195, 1e-194, 1e-193, 1e-192, 1e-191, 1e-190, 1e-189, 1e-188,
|
||||||
|
1e-187, 1e-186, 1e-185, 1e-184, 1e-183, 1e-182, 1e-181, 1e-180, 1e-179, 1e-178, 1e-177, 1e-176, 1e-175, 1e-174, 1e-173, 1e-172, 1e-171,
|
||||||
|
1e-170, 1e-169, 1e-168, 1e-167, 1e-166, 1e-165, 1e-164, 1e-163, 1e-162, 1e-161, 1e-160, 1e-159, 1e-158, 1e-157, 1e-156, 1e-155, 1e-154,
|
||||||
|
1e-153, 1e-152, 1e-151, 1e-150, 1e-149, 1e-148, 1e-147, 1e-146, 1e-145, 1e-144, 1e-143, 1e-142, 1e-141, 1e-140, 1e-139, 1e-138, 1e-137,
|
||||||
|
1e-136, 1e-135, 1e-134, 1e-133, 1e-132, 1e-131, 1e-130, 1e-129, 1e-128, 1e-127, 1e-126, 1e-125, 1e-124, 1e-123, 1e-122, 1e-121, 1e-120,
|
||||||
|
1e-119, 1e-118, 1e-117, 1e-116, 1e-115, 1e-114, 1e-113, 1e-112, 1e-111, 1e-110, 1e-109, 1e-108, 1e-107, 1e-106, 1e-105, 1e-104, 1e-103,
|
||||||
|
1e-102, 1e-101, 1e-100, 1e-99, 1e-98, 1e-97, 1e-96, 1e-95, 1e-94, 1e-93, 1e-92, 1e-91, 1e-90, 1e-89, 1e-88, 1e-87, 1e-86,
|
||||||
|
1e-85, 1e-84, 1e-83, 1e-82, 1e-81, 1e-80, 1e-79, 1e-78, 1e-77, 1e-76, 1e-75, 1e-74, 1e-73, 1e-72, 1e-71, 1e-70, 1e-69,
|
||||||
|
1e-68, 1e-67, 1e-66, 1e-65, 1e-64, 1e-63, 1e-62, 1e-61, 1e-60, 1e-59, 1e-58, 1e-57, 1e-56, 1e-55, 1e-54, 1e-53, 1e-52,
|
||||||
|
1e-51, 1e-50, 1e-49, 1e-48, 1e-47, 1e-46, 1e-45, 1e-44, 1e-43, 1e-42, 1e-41, 1e-40, 1e-39, 1e-38, 1e-37, 1e-36, 1e-35,
|
||||||
|
1e-34, 1e-33, 1e-32, 1e-31, 1e-30, 1e-29, 1e-28, 1e-27, 1e-26, 1e-25, 1e-24, 1e-23, 1e-22, 1e-21, 1e-20, 1e-19, 1e-18,
|
||||||
|
1e-17, 1e-16, 1e-15, 1e-14, 1e-13, 1e-12, 1e-11, 1e-10, 1e-9, 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1,
|
||||||
|
1e0, 1e+1, 1e+2, 1e+3, 1e+4, 1e+5, 1e+6, 1e+7, 1e+8, 1e+9, 1e+10, 1e+11, 1e+12, 1e+13, 1e+14, 1e+15, 1e+16,
|
||||||
|
1e+17, 1e+18, 1e+19, 1e+20, 1e+21, 1e+22, 1e+23, 1e+24, 1e+25, 1e+26, 1e+27, 1e+28, 1e+29, 1e+30, 1e+31, 1e+32, 1e+33,
|
||||||
|
1e+34, 1e+35, 1e+36, 1e+37, 1e+38, 1e+39, 1e+40, 1e+41, 1e+42, 1e+43, 1e+44, 1e+45, 1e+46, 1e+47, 1e+48, 1e+49, 1e+50,
|
||||||
|
1e+51, 1e+52, 1e+53, 1e+54, 1e+55, 1e+56, 1e+57, 1e+58, 1e+59, 1e+60, 1e+61, 1e+62, 1e+63, 1e+64, 1e+65, 1e+66, 1e+67,
|
||||||
|
1e+68, 1e+69, 1e+70, 1e+71, 1e+72, 1e+73, 1e+74, 1e+75, 1e+76, 1e+77, 1e+78, 1e+79, 1e+80, 1e+81, 1e+82, 1e+83, 1e+84,
|
||||||
|
1e+85, 1e+86, 1e+87, 1e+88, 1e+89, 1e+90, 1e+91, 1e+92, 1e+93, 1e+94, 1e+95, 1e+96, 1e+97, 1e+98, 1e+99, 1e+100, 1e+101,
|
||||||
|
1e+102, 1e+103, 1e+104, 1e+105, 1e+106, 1e+107, 1e+108, 1e+109, 1e+110, 1e+111, 1e+112, 1e+113, 1e+114, 1e+115, 1e+116, 1e+117, 1e+118,
|
||||||
|
1e+119, 1e+120, 1e+121, 1e+122, 1e+123, 1e+124, 1e+125, 1e+126, 1e+127, 1e+128, 1e+129, 1e+130, 1e+131, 1e+132, 1e+133, 1e+134, 1e+135,
|
||||||
|
1e+136, 1e+137, 1e+138, 1e+139, 1e+140, 1e+141, 1e+142, 1e+143, 1e+144, 1e+145, 1e+146, 1e+147, 1e+148, 1e+149, 1e+150, 1e+151, 1e+152,
|
||||||
|
1e+153, 1e+154, 1e+155, 1e+156, 1e+157, 1e+158, 1e+159, 1e+160, 1e+161, 1e+162, 1e+163, 1e+164, 1e+165, 1e+166, 1e+167, 1e+168, 1e+169,
|
||||||
|
1e+170, 1e+171, 1e+172, 1e+173, 1e+174, 1e+175, 1e+176, 1e+177, 1e+178, 1e+179, 1e+180, 1e+181, 1e+182, 1e+183, 1e+184, 1e+185, 1e+186,
|
||||||
|
1e+187, 1e+188, 1e+189, 1e+190, 1e+191, 1e+192, 1e+193, 1e+194, 1e+195, 1e+196, 1e+197, 1e+198, 1e+199, 1e+200, 1e+201, 1e+202, 1e+203,
|
||||||
|
1e+204, 1e+205, 1e+206, 1e+207, 1e+208, 1e+209, 1e+210, 1e+211, 1e+212, 1e+213, 1e+214, 1e+215, 1e+216, 1e+217, 1e+218, 1e+219, 1e+220,
|
||||||
|
1e+221, 1e+222, 1e+223, 1e+224, 1e+225, 1e+226, 1e+227, 1e+228, 1e+229, 1e+230, 1e+231, 1e+232, 1e+233, 1e+234, 1e+235, 1e+236, 1e+237,
|
||||||
|
1e+238, 1e+239, 1e+240, 1e+241, 1e+242, 1e+243, 1e+244, 1e+245, 1e+246, 1e+247, 1e+248, 1e+249, 1e+250, 1e+251, 1e+252, 1e+253, 1e+254,
|
||||||
|
1e+255, 1e+256, 1e+257, 1e+258, 1e+259, 1e+260, 1e+261, 1e+262, 1e+263, 1e+264, 1e+265, 1e+266, 1e+267, 1e+268, 1e+269, 1e+270, 1e+271,
|
||||||
|
1e+272, 1e+273, 1e+274, 1e+275, 1e+276, 1e+277, 1e+278, 1e+279, 1e+280, 1e+281, 1e+282, 1e+283, 1e+284, 1e+285, 1e+286, 1e+287, 1e+288,
|
||||||
|
1e+289, 1e+290, 1e+291, 1e+292, 1e+293, 1e+294, 1e+295, 1e+296, 1e+297, 1e+298, 1e+299, 1e+300, 1e+301, 1e+302, 1e+303, 1e+304, 1e+305,
|
||||||
|
1e+306, 1e+307, 1e+308};
|
||||||
|
|
||||||
|
double n, y = modf(x, &n);
|
||||||
|
if (n > 308) return INFINITY;
|
||||||
|
if (n < -323) return 0;
|
||||||
|
|
||||||
|
// Using lookup table based formula to get accurate results for integer arguments.
|
||||||
|
return exp2(3.32192809488736234787031942948939 * y) * p10[static_cast<int>(n) + 323];
|
||||||
|
}
|
@ -8,9 +8,4 @@
|
|||||||
* Note: the function names are different to avoid confusion with symbols from the system libm.
|
* Note: the function names are different to avoid confusion with symbols from the system libm.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
|
|
||||||
double preciseExp10(double x);
|
double preciseExp10(double x);
|
||||||
|
|
||||||
}
|
|
||||||
|
@ -22,7 +22,7 @@ void sleepForNanoseconds(uint64_t nanoseconds)
|
|||||||
#if defined(OS_DARWIN)
|
#if defined(OS_DARWIN)
|
||||||
//https://developer.apple.com/library/archive/technotes/tn2169/_index.html
|
//https://developer.apple.com/library/archive/technotes/tn2169/_index.html
|
||||||
//https://dshil.github.io/blog/missed-os-x-clock-guide/
|
//https://dshil.github.io/blog/missed-os-x-clock-guide/
|
||||||
static mach_timebase_info_data_t timebase_info = {0};
|
static mach_timebase_info_data_t timebase_info{};
|
||||||
if (timebase_info.denom == 0)
|
if (timebase_info.denom == 0)
|
||||||
mach_timebase_info(&timebase_info);
|
mach_timebase_info(&timebase_info);
|
||||||
|
|
||||||
|
@ -1,15 +1,9 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <boost/operators.hpp>
|
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
|
||||||
/** https://svn.boost.org/trac/boost/ticket/5182
|
|
||||||
*/
|
|
||||||
|
|
||||||
template <class T, class Tag>
|
template <class T, class Tag>
|
||||||
struct StrongTypedef
|
struct StrongTypedef
|
||||||
: boost::totally_ordered1< StrongTypedef<T, Tag>
|
|
||||||
, boost::totally_ordered2< StrongTypedef<T, Tag>, T> >
|
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
using Self = StrongTypedef;
|
using Self = StrongTypedef;
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
#define BOOST_TEST_MODULE StrongTypedef
|
|
||||||
|
|
||||||
#include <common/strong_typedef.h>
|
#include <common/strong_typedef.h>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
@ -12,15 +10,15 @@
|
|||||||
TEST(StrongTypedefSuite, TypedefsOfTheSameType)
|
TEST(StrongTypedefSuite, TypedefsOfTheSameType)
|
||||||
{
|
{
|
||||||
/// check that strong typedefs of same type differ
|
/// check that strong typedefs of same type differ
|
||||||
STRONG_TYPEDEF(int, Int);
|
STRONG_TYPEDEF(int, Int)
|
||||||
STRONG_TYPEDEF(int, AnotherInt);
|
STRONG_TYPEDEF(int, AnotherInt)
|
||||||
|
|
||||||
EXPECT_TRUE(!(std::is_same<Int, AnotherInt>::value));
|
EXPECT_TRUE(!(std::is_same<Int, AnotherInt>::value));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(StrongTypedefSuite, Map)
|
TEST(StrongTypedefSuite, Map)
|
||||||
{
|
{
|
||||||
STRONG_TYPEDEF(int, Int);
|
STRONG_TYPEDEF(int, Int)
|
||||||
|
|
||||||
/// check that this code compiles
|
/// check that this code compiles
|
||||||
std::set<Int> int_set;
|
std::set<Int> int_set;
|
||||||
@ -31,13 +29,13 @@ TEST(StrongTypedefSuite, Map)
|
|||||||
|
|
||||||
TEST(StrongTypedefSuite, CopyAndMoveCtor)
|
TEST(StrongTypedefSuite, CopyAndMoveCtor)
|
||||||
{
|
{
|
||||||
STRONG_TYPEDEF(int, Int);
|
STRONG_TYPEDEF(int, Int)
|
||||||
Int a(1);
|
Int a(1);
|
||||||
Int b(2);
|
Int b(2);
|
||||||
a = b;
|
a = b;
|
||||||
EXPECT_EQ(a.toUnderType(), 2);
|
EXPECT_EQ(a.toUnderType(), 2);
|
||||||
|
|
||||||
STRONG_TYPEDEF(std::unique_ptr<int>, IntPtr);
|
STRONG_TYPEDEF(std::unique_ptr<int>, IntPtr)
|
||||||
{
|
{
|
||||||
IntPtr ptr;
|
IntPtr ptr;
|
||||||
ptr = IntPtr(std::make_unique<int>(3));
|
ptr = IntPtr(std::make_unique<int>(3));
|
||||||
@ -57,6 +55,6 @@ TEST(StrongTypedefSuite, NoDefaultCtor)
|
|||||||
NoDefaultCtor(int) {} // NOLINT
|
NoDefaultCtor(int) {} // NOLINT
|
||||||
};
|
};
|
||||||
|
|
||||||
STRONG_TYPEDEF(NoDefaultCtor, MyStruct);
|
STRONG_TYPEDEF(NoDefaultCtor, MyStruct)
|
||||||
MyStruct m(1);
|
MyStruct m(1);
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,10 @@ using Int16 = int16_t;
|
|||||||
using Int32 = int32_t;
|
using Int32 = int32_t;
|
||||||
using Int64 = int64_t;
|
using Int64 = int64_t;
|
||||||
|
|
||||||
|
#if __cplusplus <= 201703L
|
||||||
|
using char8_t = unsigned char;
|
||||||
|
#endif
|
||||||
|
|
||||||
using UInt8 = char8_t;
|
using UInt8 = char8_t;
|
||||||
using UInt16 = uint16_t;
|
using UInt16 = uint16_t;
|
||||||
using UInt32 = uint32_t;
|
using UInt32 = uint32_t;
|
||||||
|
@ -1,12 +1,50 @@
|
|||||||
LIBRARY()
|
LIBRARY()
|
||||||
|
|
||||||
|
ADDINCL(
|
||||||
|
GLOBAL clickhouse/base
|
||||||
|
contrib/libs/cctz/include
|
||||||
|
)
|
||||||
|
|
||||||
|
CFLAGS (GLOBAL -DARCADIA_BUILD)
|
||||||
|
|
||||||
|
CFLAGS (GLOBAL -DUSE_CPUID=1)
|
||||||
|
CFLAGS (GLOBAL -DUSE_JEMALLOC=0)
|
||||||
|
|
||||||
|
IF (OS_DARWIN)
|
||||||
|
CFLAGS (GLOBAL -DOS_DARWIN)
|
||||||
|
ELSEIF (OS_FREEBSD)
|
||||||
|
CFLAGS (GLOBAL -DOS_FREEBSD)
|
||||||
|
ELSEIF (OS_LINUX)
|
||||||
|
CFLAGS (GLOBAL -DOS_LINUX)
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
PEERDIR(
|
PEERDIR(
|
||||||
|
contrib/libs/cctz/src
|
||||||
|
contrib/libs/cxxsupp/libcxx-filesystem
|
||||||
|
contrib/libs/poco/Net
|
||||||
contrib/libs/poco/Util
|
contrib/libs/poco/Util
|
||||||
|
contrib/restricted/boost
|
||||||
|
contrib/restricted/cityhash-1.0.2
|
||||||
)
|
)
|
||||||
|
|
||||||
SRCS(
|
SRCS(
|
||||||
argsToConfig.cpp
|
argsToConfig.cpp
|
||||||
coverage.cpp
|
coverage.cpp
|
||||||
|
DateLUT.cpp
|
||||||
|
DateLUTImpl.cpp
|
||||||
|
demangle.cpp
|
||||||
|
getFQDNOrHostName.cpp
|
||||||
|
getMemoryAmount.cpp
|
||||||
|
getThreadId.cpp
|
||||||
|
JSON.cpp
|
||||||
|
LineReader.cpp
|
||||||
|
mremap.cpp
|
||||||
|
phdr_cache.cpp
|
||||||
|
preciseExp10.cpp
|
||||||
|
setTerminalEcho.cpp
|
||||||
|
shift10.cpp
|
||||||
|
sleep.cpp
|
||||||
|
terminalColors.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
END()
|
END()
|
||||||
|
@ -50,11 +50,14 @@
|
|||||||
#include <Common/getMultipleKeysFromConfig.h>
|
#include <Common/getMultipleKeysFromConfig.h>
|
||||||
#include <Common/ClickHouseRevision.h>
|
#include <Common/ClickHouseRevision.h>
|
||||||
#include <Common/Config/ConfigProcessor.h>
|
#include <Common/Config/ConfigProcessor.h>
|
||||||
#include <Common/config_version.h>
|
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#if !defined(ARCADIA_BUILD)
|
||||||
// ucontext is not available without _XOPEN_SOURCE
|
# include <Common/config_version.h>
|
||||||
#define _XOPEN_SOURCE 700
|
#endif
|
||||||
|
|
||||||
|
#if defined(OS_DARWIN)
|
||||||
|
# pragma GCC diagnostic ignored "-Wunused-macros"
|
||||||
|
# define _XOPEN_SOURCE 700 // ucontext is not available without _XOPEN_SOURCE
|
||||||
#endif
|
#endif
|
||||||
#include <ucontext.h>
|
#include <ucontext.h>
|
||||||
|
|
||||||
@ -74,7 +77,7 @@ static void call_default_signal_handler(int sig)
|
|||||||
|
|
||||||
static constexpr size_t max_query_id_size = 127;
|
static constexpr size_t max_query_id_size = 127;
|
||||||
|
|
||||||
static const size_t buf_size =
|
static const size_t signal_pipe_buf_size =
|
||||||
sizeof(int)
|
sizeof(int)
|
||||||
+ sizeof(siginfo_t)
|
+ sizeof(siginfo_t)
|
||||||
+ sizeof(ucontext_t)
|
+ sizeof(ucontext_t)
|
||||||
@ -89,8 +92,8 @@ static void writeSignalIDtoSignalPipe(int sig)
|
|||||||
{
|
{
|
||||||
auto saved_errno = errno; /// We must restore previous value of errno in signal handler.
|
auto saved_errno = errno; /// We must restore previous value of errno in signal handler.
|
||||||
|
|
||||||
char buf[buf_size];
|
char buf[signal_pipe_buf_size];
|
||||||
DB::WriteBufferFromFileDescriptor out(signal_pipe.fds_rw[1], buf_size, buf);
|
DB::WriteBufferFromFileDescriptor out(signal_pipe.fds_rw[1], signal_pipe_buf_size, buf);
|
||||||
DB::writeBinary(sig, out);
|
DB::writeBinary(sig, out);
|
||||||
out.next();
|
out.next();
|
||||||
|
|
||||||
@ -115,8 +118,8 @@ static void signalHandler(int sig, siginfo_t * info, void * context)
|
|||||||
{
|
{
|
||||||
auto saved_errno = errno; /// We must restore previous value of errno in signal handler.
|
auto saved_errno = errno; /// We must restore previous value of errno in signal handler.
|
||||||
|
|
||||||
char buf[buf_size];
|
char buf[signal_pipe_buf_size];
|
||||||
DB::WriteBufferFromFileDescriptorDiscardOnFailure out(signal_pipe.fds_rw[1], buf_size, buf);
|
DB::WriteBufferFromFileDescriptorDiscardOnFailure out(signal_pipe.fds_rw[1], signal_pipe_buf_size, buf);
|
||||||
|
|
||||||
const ucontext_t signal_context = *reinterpret_cast<ucontext_t *>(context);
|
const ucontext_t signal_context = *reinterpret_cast<ucontext_t *>(context);
|
||||||
const StackTrace stack_trace(signal_context);
|
const StackTrace stack_trace(signal_context);
|
||||||
@ -164,10 +167,10 @@ public:
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void run()
|
void run() override
|
||||||
{
|
{
|
||||||
char buf[buf_size];
|
char buf[signal_pipe_buf_size];
|
||||||
DB::ReadBufferFromFileDescriptor in(signal_pipe.fds_rw[0], buf_size, buf);
|
DB::ReadBufferFromFileDescriptor in(signal_pipe.fds_rw[0], signal_pipe_buf_size, buf);
|
||||||
|
|
||||||
while (!in.eof())
|
while (!in.eof())
|
||||||
{
|
{
|
||||||
@ -231,7 +234,6 @@ private:
|
|||||||
Logger * log;
|
Logger * log;
|
||||||
BaseDaemon & daemon;
|
BaseDaemon & daemon;
|
||||||
|
|
||||||
private:
|
|
||||||
void onTerminate(const std::string & message, UInt32 thread_num) const
|
void onTerminate(const std::string & message, UInt32 thread_num) const
|
||||||
{
|
{
|
||||||
LOG_FATAL(log, "(version " << VERSION_STRING << VERSION_OFFICIAL << ") (from thread " << thread_num << ") " << message);
|
LOG_FATAL(log, "(version " << VERSION_STRING << VERSION_OFFICIAL << ") (from thread " << thread_num << ") " << message);
|
||||||
@ -286,14 +288,11 @@ private:
|
|||||||
* and send it to pipe. Other thread will read this info from pipe and asynchronously write it to log.
|
* and send it to pipe. Other thread will read this info from pipe and asynchronously write it to log.
|
||||||
* Look at libstdc++-v3/libsupc++/vterminate.cc for example.
|
* Look at libstdc++-v3/libsupc++/vterminate.cc for example.
|
||||||
*/
|
*/
|
||||||
static void terminate_handler()
|
[[noreturn]] static void terminate_handler()
|
||||||
{
|
{
|
||||||
static thread_local bool terminating = false;
|
static thread_local bool terminating = false;
|
||||||
if (terminating)
|
if (terminating)
|
||||||
{
|
|
||||||
abort();
|
abort();
|
||||||
return; /// Just for convenience.
|
|
||||||
}
|
|
||||||
|
|
||||||
terminating = true;
|
terminating = true;
|
||||||
|
|
||||||
@ -410,7 +409,7 @@ std::string BaseDaemon::getDefaultCorePath() const
|
|||||||
|
|
||||||
void BaseDaemon::closeFDs()
|
void BaseDaemon::closeFDs()
|
||||||
{
|
{
|
||||||
#if defined(__FreeBSD__) || (defined(__APPLE__) && defined(__MACH__))
|
#if defined(OS_FREEBSD) || defined(OS_DARWIN)
|
||||||
Poco::File proc_path{"/dev/fd"};
|
Poco::File proc_path{"/dev/fd"};
|
||||||
#else
|
#else
|
||||||
Poco::File proc_path{"/proc/self/fd"};
|
Poco::File proc_path{"/proc/self/fd"};
|
||||||
@ -430,7 +429,7 @@ void BaseDaemon::closeFDs()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
int max_fd = -1;
|
int max_fd = -1;
|
||||||
#ifdef _SC_OPEN_MAX
|
#if defined(_SC_OPEN_MAX)
|
||||||
max_fd = sysconf(_SC_OPEN_MAX);
|
max_fd = sysconf(_SC_OPEN_MAX);
|
||||||
if (max_fd == -1)
|
if (max_fd == -1)
|
||||||
#endif
|
#endif
|
||||||
@ -448,7 +447,7 @@ namespace
|
|||||||
/// the maximum is 1000, and chromium uses 300 for its tab processes. Ignore
|
/// the maximum is 1000, and chromium uses 300 for its tab processes. Ignore
|
||||||
/// whatever errors that occur, because it's just a debugging aid and we don't
|
/// whatever errors that occur, because it's just a debugging aid and we don't
|
||||||
/// care if it breaks.
|
/// care if it breaks.
|
||||||
#if defined(__linux__) && !defined(NDEBUG)
|
#if defined(OS_LINUX) && !defined(NDEBUG)
|
||||||
void debugIncreaseOOMScore()
|
void debugIncreaseOOMScore()
|
||||||
{
|
{
|
||||||
const std::string new_score = "555";
|
const std::string new_score = "555";
|
||||||
@ -523,12 +522,12 @@ void BaseDaemon::initialize(Application & self)
|
|||||||
/// This must be done before any usage of DateLUT. In particular, before any logging.
|
/// This must be done before any usage of DateLUT. In particular, before any logging.
|
||||||
if (config().has("timezone"))
|
if (config().has("timezone"))
|
||||||
{
|
{
|
||||||
const std::string timezone = config().getString("timezone");
|
const std::string config_timezone = config().getString("timezone");
|
||||||
if (0 != setenv("TZ", timezone.data(), 1))
|
if (0 != setenv("TZ", config_timezone.data(), 1))
|
||||||
throw Poco::Exception("Cannot setenv TZ variable");
|
throw Poco::Exception("Cannot setenv TZ variable");
|
||||||
|
|
||||||
tzset();
|
tzset();
|
||||||
DateLUT::setDefaultTimezone(timezone);
|
DateLUT::setDefaultTimezone(config_timezone);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string log_path = config().getString("logger.log", "");
|
std::string log_path = config().getString("logger.log", "");
|
||||||
@ -546,6 +545,9 @@ void BaseDaemon::initialize(Application & self)
|
|||||||
std::string stderr_path = config().getString("logger.stderr", log_path + "/stderr.log");
|
std::string stderr_path = config().getString("logger.stderr", log_path + "/stderr.log");
|
||||||
if (!freopen(stderr_path.c_str(), "a+", stderr))
|
if (!freopen(stderr_path.c_str(), "a+", stderr))
|
||||||
throw Poco::OpenFileException("Cannot attach stderr to " + stderr_path);
|
throw Poco::OpenFileException("Cannot attach stderr to " + stderr_path);
|
||||||
|
|
||||||
|
/// Disable buffering for stderr
|
||||||
|
setbuf(stderr, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!log_path.empty() && is_daemon) || config().has("logger.stdout"))
|
if ((!log_path.empty() && is_daemon) || config().has("logger.stdout"))
|
||||||
@ -632,12 +634,18 @@ void BaseDaemon::initializeTerminationAndSignalProcessing()
|
|||||||
sa.sa_flags = SA_SIGINFO;
|
sa.sa_flags = SA_SIGINFO;
|
||||||
|
|
||||||
{
|
{
|
||||||
|
#if defined(OS_DARWIN)
|
||||||
|
sigemptyset(&sa.sa_mask);
|
||||||
|
for (auto signal : signals)
|
||||||
|
sigaddset(&sa.sa_mask, signal);
|
||||||
|
#else
|
||||||
if (sigemptyset(&sa.sa_mask))
|
if (sigemptyset(&sa.sa_mask))
|
||||||
throw Poco::Exception("Cannot set signal handler.");
|
throw Poco::Exception("Cannot set signal handler.");
|
||||||
|
|
||||||
for (auto signal : signals)
|
for (auto signal : signals)
|
||||||
if (sigaddset(&sa.sa_mask, signal))
|
if (sigaddset(&sa.sa_mask, signal))
|
||||||
throw Poco::Exception("Cannot set signal handler.");
|
throw Poco::Exception("Cannot set signal handler.");
|
||||||
|
#endif
|
||||||
|
|
||||||
for (auto signal : signals)
|
for (auto signal : signals)
|
||||||
if (sigaction(signal, &sa, nullptr))
|
if (sigaction(signal, &sa, nullptr))
|
||||||
@ -686,37 +694,37 @@ void BaseDaemon::handleNotification(Poco::TaskFailedNotification *_tfn)
|
|||||||
ServerApplication::terminate();
|
ServerApplication::terminate();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BaseDaemon::defineOptions(Poco::Util::OptionSet& _options)
|
void BaseDaemon::defineOptions(Poco::Util::OptionSet & new_options)
|
||||||
{
|
{
|
||||||
Poco::Util::ServerApplication::defineOptions (_options);
|
new_options.addOption(
|
||||||
|
|
||||||
_options.addOption(
|
|
||||||
Poco::Util::Option("config-file", "C", "load configuration from a given file")
|
Poco::Util::Option("config-file", "C", "load configuration from a given file")
|
||||||
.required(false)
|
.required(false)
|
||||||
.repeatable(false)
|
.repeatable(false)
|
||||||
.argument("<file>")
|
.argument("<file>")
|
||||||
.binding("config-file"));
|
.binding("config-file"));
|
||||||
|
|
||||||
_options.addOption(
|
new_options.addOption(
|
||||||
Poco::Util::Option("log-file", "L", "use given log file")
|
Poco::Util::Option("log-file", "L", "use given log file")
|
||||||
.required(false)
|
.required(false)
|
||||||
.repeatable(false)
|
.repeatable(false)
|
||||||
.argument("<file>")
|
.argument("<file>")
|
||||||
.binding("logger.log"));
|
.binding("logger.log"));
|
||||||
|
|
||||||
_options.addOption(
|
new_options.addOption(
|
||||||
Poco::Util::Option("errorlog-file", "E", "use given log file for errors only")
|
Poco::Util::Option("errorlog-file", "E", "use given log file for errors only")
|
||||||
.required(false)
|
.required(false)
|
||||||
.repeatable(false)
|
.repeatable(false)
|
||||||
.argument("<file>")
|
.argument("<file>")
|
||||||
.binding("logger.errorlog"));
|
.binding("logger.errorlog"));
|
||||||
|
|
||||||
_options.addOption(
|
new_options.addOption(
|
||||||
Poco::Util::Option("pid-file", "P", "use given pidfile")
|
Poco::Util::Option("pid-file", "P", "use given pidfile")
|
||||||
.required(false)
|
.required(false)
|
||||||
.repeatable(false)
|
.repeatable(false)
|
||||||
.argument("<file>")
|
.argument("<file>")
|
||||||
.binding("pid"));
|
.binding("pid"));
|
||||||
|
|
||||||
|
Poco::Util::ServerApplication::defineOptions(new_options);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isPidRunning(pid_t pid)
|
bool isPidRunning(pid_t pid)
|
||||||
|
@ -58,7 +58,7 @@ public:
|
|||||||
void reloadConfiguration();
|
void reloadConfiguration();
|
||||||
|
|
||||||
/// Определяет параметр командной строки
|
/// Определяет параметр командной строки
|
||||||
void defineOptions(Poco::Util::OptionSet & _options) override;
|
void defineOptions(Poco::Util::OptionSet & new_options) override;
|
||||||
|
|
||||||
/// Заставляет демон завершаться, если хотя бы одна задача завершилась неудачно
|
/// Заставляет демон завершаться, если хотя бы одна задача завершилась неудачно
|
||||||
void exitOnTaskError();
|
void exitOnTaskError();
|
||||||
|
@ -4,4 +4,4 @@ add_library (daemon
|
|||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories (daemon PUBLIC ..)
|
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})
|
||||||
|
14
base/daemon/ya.make
Normal file
14
base/daemon/ya.make
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
LIBRARY()
|
||||||
|
|
||||||
|
NO_COMPILER_WARNINGS()
|
||||||
|
|
||||||
|
PEERDIR(
|
||||||
|
clickhouse/src/Common
|
||||||
|
)
|
||||||
|
|
||||||
|
SRCS(
|
||||||
|
BaseDaemon.cpp
|
||||||
|
GraphiteWriter.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
END()
|
@ -1,5 +1,5 @@
|
|||||||
include(${ClickHouse_SOURCE_DIR}/cmake/dbms_glob_sources.cmake)
|
include(${ClickHouse_SOURCE_DIR}/cmake/dbms_glob_sources.cmake)
|
||||||
add_headers_and_sources(loggers .)
|
add_headers_and_sources(loggers .)
|
||||||
add_library(loggers ${loggers_sources} ${loggers_headers})
|
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 ..)
|
target_include_directories(loggers PUBLIC ..)
|
||||||
|
@ -166,12 +166,29 @@ void Loggers::buildLoggers(Poco::Util::AbstractConfiguration & config, Poco::Log
|
|||||||
logger.root().setChannel(logger.getChannel());
|
logger.root().setChannel(logger.getChannel());
|
||||||
|
|
||||||
// Explicitly specified log levels for specific loggers.
|
// Explicitly specified log levels for specific loggers.
|
||||||
Poco::Util::AbstractConfiguration::Keys levels;
|
{
|
||||||
config.keys("logger.levels", levels);
|
Poco::Util::AbstractConfiguration::Keys loggers_level;
|
||||||
|
config.keys("logger.levels", loggers_level);
|
||||||
|
|
||||||
if (!levels.empty())
|
if (!loggers_level.empty())
|
||||||
for (const auto & level : levels)
|
{
|
||||||
logger.root().get(level).setLevel(config.getString("logger.levels." + level, "trace"));
|
for (const auto & key : loggers_level)
|
||||||
|
{
|
||||||
|
if (key == "logger" || key.starts_with("logger["))
|
||||||
|
{
|
||||||
|
const std::string name(config.getString("logger.levels." + key + ".name"));
|
||||||
|
const std::string level(config.getString("logger.levels." + key + ".level"));
|
||||||
|
logger.root().get(name).setLevel(level);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Legacy syntax
|
||||||
|
const std::string level(config.getString("logger.levels." + key, "trace"));
|
||||||
|
logger.root().get(key).setLevel(level);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Loggers::closeLogs(Poco::Logger & logger)
|
void Loggers::closeLogs(Poco::Logger & logger)
|
||||||
|
@ -75,7 +75,11 @@ void OwnPatternFormatter::formatExtended(const DB::ExtendedLogMessage & msg_ext,
|
|||||||
if (color)
|
if (color)
|
||||||
writeCString(resetColor(), wb);
|
writeCString(resetColor(), wb);
|
||||||
writeCString("> ", wb);
|
writeCString("> ", wb);
|
||||||
|
if (color)
|
||||||
|
writeString(setColor(std::hash<std::string>()(msg.getSource())), wb);
|
||||||
DB::writeString(msg.getSource(), wb);
|
DB::writeString(msg.getSource(), wb);
|
||||||
|
if (color)
|
||||||
|
writeCString(resetColor(), wb);
|
||||||
writeCString(": ", wb);
|
writeCString(": ", wb);
|
||||||
DB::writeString(msg.getText(), wb);
|
DB::writeString(msg.getText(), wb);
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ void OwnSplitChannel::log(const Poco::Message & msg)
|
|||||||
if (channels.empty() && (logs_queue == nullptr || msg.getPriority() > logs_queue->max_priority))
|
if (channels.empty() && (logs_queue == nullptr || msg.getPriority() > logs_queue->max_priority))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (auto masker = SensitiveDataMasker::getInstance())
|
if (auto * masker = SensitiveDataMasker::getInstance())
|
||||||
{
|
{
|
||||||
auto message_text = msg.getText();
|
auto message_text = msg.getText();
|
||||||
auto matches = masker->wipeSensitiveData(message_text);
|
auto matches = masker->wipeSensitiveData(message_text);
|
||||||
|
15
base/loggers/ya.make
Normal file
15
base/loggers/ya.make
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
LIBRARY()
|
||||||
|
|
||||||
|
PEERDIR(
|
||||||
|
clickhouse/src/Common
|
||||||
|
)
|
||||||
|
|
||||||
|
SRCS(
|
||||||
|
ExtendedLogChannel.cpp
|
||||||
|
Loggers.cpp
|
||||||
|
OwnFormattingChannel.cpp
|
||||||
|
OwnPatternFormatter.cpp
|
||||||
|
OwnSplitChannel.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
END()
|
@ -32,7 +32,7 @@ else ()
|
|||||||
endif ()
|
endif ()
|
||||||
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)
|
if(OPENSSL_LIBRARIES)
|
||||||
target_link_libraries(mysqlxx PRIVATE ${OPENSSL_LIBRARIES})
|
target_link_libraries(mysqlxx PRIVATE ${OPENSSL_LIBRARIES})
|
||||||
endif()
|
endif()
|
||||||
|
@ -18,8 +18,6 @@ std::string errorMessage(MYSQL * driver)
|
|||||||
return res.str();
|
return res.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Для внутренних нужд библиотеки.
|
|
||||||
void checkError(MYSQL * driver)
|
void checkError(MYSQL * driver)
|
||||||
{
|
{
|
||||||
unsigned num = mysql_errno(driver);
|
unsigned num = mysql_errno(driver);
|
||||||
@ -28,8 +26,6 @@ void checkError(MYSQL * driver)
|
|||||||
throw Exception(errorMessage(driver), num);
|
throw Exception(errorMessage(driver), num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Для внутренних нужд библиотеки.
|
|
||||||
void onError(MYSQL * driver)
|
void onError(MYSQL * driver)
|
||||||
{
|
{
|
||||||
throw Exception(errorMessage(driver), mysql_errno(driver));
|
throw Exception(errorMessage(driver), mysql_errno(driver));
|
||||||
|
@ -48,6 +48,6 @@ std::string errorMessage(MYSQL * driver);
|
|||||||
|
|
||||||
/// For internal need of library.
|
/// For internal need of library.
|
||||||
void checkError(MYSQL * driver);
|
void checkError(MYSQL * driver);
|
||||||
void onError(MYSQL * driver);
|
[[noreturn]] void onError(MYSQL * driver);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ public:
|
|||||||
Null() : is_null(true) {}
|
Null() : is_null(true) {}
|
||||||
Null(const Null<T> &) = default;
|
Null(const Null<T> &) = default;
|
||||||
Null(Null<T> &&) noexcept = default;
|
Null(Null<T> &&) noexcept = default;
|
||||||
Null(NullType data) : is_null(true) {}
|
Null(NullType) : is_null(true) {}
|
||||||
explicit Null(const T & data_) : data(data_), is_null(false) {}
|
explicit Null(const T & data_) : data(data_), is_null(false) {}
|
||||||
|
|
||||||
operator T & ()
|
operator T & ()
|
||||||
@ -47,7 +47,7 @@ public:
|
|||||||
Null<T> & operator= (Null<T> &&) noexcept = default;
|
Null<T> & operator= (Null<T> &&) noexcept = default;
|
||||||
Null<T> & operator= (const Null<T> &) = default;
|
Null<T> & operator= (const Null<T> &) = default;
|
||||||
Null<T> & operator= (const T & data_) { is_null = false; data = data_; return *this; }
|
Null<T> & operator= (const T & data_) { is_null = false; data = data_; return *this; }
|
||||||
Null<T> & operator= (const NullType other) { is_null = true; data = T(); return *this; }
|
Null<T> & operator= (const NullType) { is_null = true; data = T(); return *this; }
|
||||||
|
|
||||||
bool isNull() const { return is_null; }
|
bool isNull() const { return is_null; }
|
||||||
|
|
||||||
@ -57,7 +57,7 @@ public:
|
|||||||
|| (is_null == other.is_null && data < other.data);
|
|| (is_null == other.is_null && data < other.data);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator< (const NullType other) const { return false; }
|
bool operator< (const NullType) const { return false; }
|
||||||
|
|
||||||
bool operator== (const Null<T> & other) const
|
bool operator== (const Null<T> & other) const
|
||||||
{
|
{
|
||||||
@ -69,14 +69,14 @@ public:
|
|||||||
return !is_null && data == other;
|
return !is_null && data == other;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator== (const NullType other) const { return is_null; }
|
bool operator== (const NullType) const { return is_null; }
|
||||||
|
|
||||||
bool operator!= (const Null<T> & other) const
|
bool operator!= (const Null<T> & other) const
|
||||||
{
|
{
|
||||||
return !(*this == other);
|
return !(*this == other);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator!= (const NullType other) const { return !is_null; }
|
bool operator!= (const NullType) const { return !is_null; }
|
||||||
|
|
||||||
bool operator!= (const T & other) const
|
bool operator!= (const T & other) const
|
||||||
{
|
{
|
||||||
|
@ -10,46 +10,47 @@ static bool startsWith(const std::string & s, const char * prefix)
|
|||||||
|
|
||||||
using namespace mysqlxx;
|
using namespace mysqlxx;
|
||||||
|
|
||||||
PoolWithFailover::PoolWithFailover(const Poco::Util::AbstractConfiguration & config,
|
PoolWithFailover::PoolWithFailover(const Poco::Util::AbstractConfiguration & config_,
|
||||||
const std::string & config_name, const unsigned default_connections,
|
const std::string & config_name_, const unsigned default_connections_,
|
||||||
const unsigned max_connections, const size_t max_tries)
|
const unsigned max_connections_, const size_t max_tries_)
|
||||||
: max_tries(max_tries)
|
: max_tries(max_tries_)
|
||||||
{
|
{
|
||||||
shareable = config.getBool(config_name + ".share_connection", false);
|
shareable = config_.getBool(config_name_ + ".share_connection", false);
|
||||||
if (config.has(config_name + ".replica"))
|
if (config_.has(config_name_ + ".replica"))
|
||||||
{
|
{
|
||||||
Poco::Util::AbstractConfiguration::Keys replica_keys;
|
Poco::Util::AbstractConfiguration::Keys replica_keys;
|
||||||
config.keys(config_name, replica_keys);
|
config_.keys(config_name_, replica_keys);
|
||||||
for (const auto & replica_config_key : replica_keys)
|
for (const auto & replica_config_key : replica_keys)
|
||||||
{
|
{
|
||||||
/// There could be another elements in the same level in configuration file, like "password", "port"...
|
/// There could be another elements in the same level in configuration file, like "password", "port"...
|
||||||
if (startsWith(replica_config_key, "replica"))
|
if (startsWith(replica_config_key, "replica"))
|
||||||
{
|
{
|
||||||
std::string replica_name = config_name + "." + replica_config_key;
|
std::string replica_name = config_name_ + "." + replica_config_key;
|
||||||
|
|
||||||
int priority = config.getInt(replica_name + ".priority", 0);
|
int priority = config_.getInt(replica_name + ".priority", 0);
|
||||||
|
|
||||||
replicas_by_priority[priority].emplace_back(
|
replicas_by_priority[priority].emplace_back(
|
||||||
std::make_shared<Pool>(config, replica_name, default_connections, max_connections, config_name.c_str()));
|
std::make_shared<Pool>(config_, replica_name, default_connections_, max_connections_, config_name_.c_str()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
replicas_by_priority[0].emplace_back(
|
replicas_by_priority[0].emplace_back(
|
||||||
std::make_shared<Pool>(config, config_name, default_connections, max_connections));
|
std::make_shared<Pool>(config_, config_name_, default_connections_, max_connections_));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PoolWithFailover::PoolWithFailover(const std::string & config_name, const unsigned default_connections,
|
PoolWithFailover::PoolWithFailover(const std::string & config_name_, const unsigned default_connections_,
|
||||||
const unsigned max_connections, const size_t max_tries)
|
const unsigned max_connections_, const size_t max_tries_)
|
||||||
: PoolWithFailover{
|
: PoolWithFailover{
|
||||||
Poco::Util::Application::instance().config(), config_name,
|
Poco::Util::Application::instance().config(), config_name_,
|
||||||
default_connections, max_connections, max_tries}
|
default_connections_, max_connections_, max_tries_}
|
||||||
{}
|
{
|
||||||
|
}
|
||||||
|
|
||||||
PoolWithFailover::PoolWithFailover(const PoolWithFailover & other)
|
PoolWithFailover::PoolWithFailover(const PoolWithFailover & other)
|
||||||
: max_tries{other.max_tries}, config_name{other.config_name}, shareable{other.shareable}
|
: max_tries{other.max_tries}, shareable{other.shareable}
|
||||||
{
|
{
|
||||||
if (shareable)
|
if (shareable)
|
||||||
{
|
{
|
||||||
|
@ -77,7 +77,6 @@ namespace mysqlxx
|
|||||||
size_t max_tries;
|
size_t max_tries;
|
||||||
/// Mutex for set of replicas.
|
/// Mutex for set of replicas.
|
||||||
std::mutex mutex;
|
std::mutex mutex;
|
||||||
std::string config_name;
|
|
||||||
|
|
||||||
/// Can the Pool be shared
|
/// Can the Pool be shared
|
||||||
bool shareable;
|
bool shareable;
|
||||||
@ -91,16 +90,16 @@ namespace mysqlxx
|
|||||||
* max_connections Maximum number of connections in pool to each replica.
|
* max_connections Maximum number of connections in pool to each replica.
|
||||||
* max_tries_ Max number of connection tries.
|
* max_tries_ Max number of connection tries.
|
||||||
*/
|
*/
|
||||||
PoolWithFailover(const std::string & config_name,
|
PoolWithFailover(const std::string & config_name_,
|
||||||
unsigned default_connections = MYSQLXX_POOL_WITH_FAILOVER_DEFAULT_START_CONNECTIONS,
|
unsigned default_connections_ = MYSQLXX_POOL_WITH_FAILOVER_DEFAULT_START_CONNECTIONS,
|
||||||
unsigned max_connections = MYSQLXX_POOL_WITH_FAILOVER_DEFAULT_MAX_CONNECTIONS,
|
unsigned max_connections_ = MYSQLXX_POOL_WITH_FAILOVER_DEFAULT_MAX_CONNECTIONS,
|
||||||
size_t max_tries = MYSQLXX_POOL_WITH_FAILOVER_DEFAULT_MAX_TRIES);
|
size_t max_tries_ = MYSQLXX_POOL_WITH_FAILOVER_DEFAULT_MAX_TRIES);
|
||||||
|
|
||||||
PoolWithFailover(const Poco::Util::AbstractConfiguration & config,
|
PoolWithFailover(const Poco::Util::AbstractConfiguration & config_,
|
||||||
const std::string & config_name,
|
const std::string & config_name_,
|
||||||
unsigned default_connections = MYSQLXX_POOL_WITH_FAILOVER_DEFAULT_START_CONNECTIONS,
|
unsigned default_connections_ = MYSQLXX_POOL_WITH_FAILOVER_DEFAULT_START_CONNECTIONS,
|
||||||
unsigned max_connections = MYSQLXX_POOL_WITH_FAILOVER_DEFAULT_MAX_CONNECTIONS,
|
unsigned max_connections_ = MYSQLXX_POOL_WITH_FAILOVER_DEFAULT_MAX_CONNECTIONS,
|
||||||
size_t max_tries = MYSQLXX_POOL_WITH_FAILOVER_DEFAULT_MAX_TRIES);
|
size_t max_tries_ = MYSQLXX_POOL_WITH_FAILOVER_DEFAULT_MAX_TRIES);
|
||||||
|
|
||||||
PoolWithFailover(const PoolWithFailover & other);
|
PoolWithFailover(const PoolWithFailover & other);
|
||||||
|
|
||||||
|
@ -11,29 +11,23 @@
|
|||||||
namespace mysqlxx
|
namespace mysqlxx
|
||||||
{
|
{
|
||||||
|
|
||||||
Query::Query(Connection * conn_, const std::string & query_string) : std::ostream(nullptr), conn(conn_)
|
Query::Query(Connection * conn_, const std::string & query_string) : conn(conn_)
|
||||||
{
|
{
|
||||||
/// Важно в случае, если Query используется не из того же потока, что Connection.
|
/// Важно в случае, если Query используется не из того же потока, что Connection.
|
||||||
mysql_thread_init();
|
mysql_thread_init();
|
||||||
|
|
||||||
init(&query_buf);
|
|
||||||
|
|
||||||
if (!query_string.empty())
|
if (!query_string.empty())
|
||||||
{
|
query_buf << query_string;
|
||||||
query_buf.str(query_string);
|
|
||||||
seekp(0, std::ios::end);
|
query_buf.imbue(std::locale::classic());
|
||||||
}
|
}
|
||||||
|
|
||||||
imbue(std::locale::classic());
|
Query::Query(const Query & other) : conn(other.conn)
|
||||||
}
|
|
||||||
|
|
||||||
Query::Query(const Query & other) : std::ostream(nullptr), conn(other.conn)
|
|
||||||
{
|
{
|
||||||
/// Важно в случае, если Query используется не из того же потока, что Connection.
|
/// Важно в случае, если Query используется не из того же потока, что Connection.
|
||||||
mysql_thread_init();
|
mysql_thread_init();
|
||||||
|
|
||||||
init(&query_buf);
|
query_buf.imbue(std::locale::classic());
|
||||||
imbue(std::locale::classic());
|
|
||||||
|
|
||||||
*this << other.str();
|
*this << other.str();
|
||||||
}
|
}
|
||||||
@ -45,9 +39,7 @@ Query & Query::operator= (const Query & other)
|
|||||||
|
|
||||||
conn = other.conn;
|
conn = other.conn;
|
||||||
|
|
||||||
seekp(0);
|
query_buf.str(other.str());
|
||||||
clear();
|
|
||||||
*this << other.str();
|
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
@ -59,9 +51,7 @@ Query::~Query()
|
|||||||
|
|
||||||
void Query::reset()
|
void Query::reset()
|
||||||
{
|
{
|
||||||
seekp(0);
|
query_buf.str({});
|
||||||
clear();
|
|
||||||
query_buf.str("");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Query::executeImpl()
|
void Query::executeImpl()
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <ostream>
|
|
||||||
|
|
||||||
#include <mysqlxx/UseQueryResult.h>
|
#include <mysqlxx/UseQueryResult.h>
|
||||||
#include <mysqlxx/StoreQueryResult.h>
|
#include <mysqlxx/StoreQueryResult.h>
|
||||||
@ -28,7 +27,7 @@ namespace mysqlxx
|
|||||||
*
|
*
|
||||||
* Внимание! Один объект запроса можно использовать только из одного потока.
|
* Внимание! Один объект запроса можно использовать только из одного потока.
|
||||||
*/
|
*/
|
||||||
class Query : public std::ostream
|
class Query
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Query(Connection * conn_, const std::string & query_string = "");
|
Query(Connection * conn_, const std::string & query_string = "");
|
||||||
@ -64,9 +63,21 @@ public:
|
|||||||
return query_buf.str();
|
return query_buf.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto rdbuf() const
|
||||||
|
{
|
||||||
|
return query_buf.rdbuf();
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
inline Query & operator<< (T && x)
|
||||||
|
{
|
||||||
|
query_buf << std::forward<T>(x);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Connection * conn;
|
Connection * conn;
|
||||||
std::stringbuf query_buf;
|
std::ostringstream query_buf;
|
||||||
|
|
||||||
void executeImpl();
|
void executeImpl();
|
||||||
};
|
};
|
||||||
|
@ -14,16 +14,15 @@ namespace mysqlxx
|
|||||||
StoreQueryResult::StoreQueryResult(MYSQL_RES * res_, Connection * conn_, const Query * query_) : ResultBase(res_, conn_, query_)
|
StoreQueryResult::StoreQueryResult(MYSQL_RES * res_, Connection * conn_, const Query * query_) : ResultBase(res_, conn_, query_)
|
||||||
{
|
{
|
||||||
UInt64 rows = mysql_num_rows(res);
|
UInt64 rows = mysql_num_rows(res);
|
||||||
UInt32 fields = getNumFields();
|
|
||||||
reserve(rows);
|
reserve(rows);
|
||||||
lengths.resize(rows * fields);
|
lengths.resize(rows * num_fields);
|
||||||
|
|
||||||
for (UInt64 i = 0; MYSQL_ROW row = mysql_fetch_row(res); ++i)
|
for (UInt64 i = 0; MYSQL_ROW row = mysql_fetch_row(res); ++i)
|
||||||
{
|
{
|
||||||
MYSQL_LENGTHS lengths_for_row = mysql_fetch_lengths(res);
|
MYSQL_LENGTHS lengths_for_row = mysql_fetch_lengths(res);
|
||||||
memcpy(&lengths[i * fields], lengths_for_row, sizeof(lengths[0]) * fields);
|
memcpy(&lengths[i * num_fields], lengths_for_row, sizeof(lengths[0]) * num_fields);
|
||||||
|
|
||||||
push_back(Row(row, this, &lengths[i * fields]));
|
push_back(Row(row, this, &lengths[i * num_fields]));
|
||||||
}
|
}
|
||||||
checkError(conn->getDriver());
|
checkError(conn->getDriver());
|
||||||
}
|
}
|
||||||
|
@ -68,10 +68,10 @@ int main(int, char **)
|
|||||||
Queries queries;
|
Queries queries;
|
||||||
queries.push_back(query);
|
queries.push_back(query);
|
||||||
|
|
||||||
for (auto & query : queries)
|
for (auto & q : queries)
|
||||||
{
|
{
|
||||||
std::cerr << query.str() << std::endl;
|
std::cerr << q.str() << std::endl;
|
||||||
std::cerr << query.store().at(0) << std::endl;
|
std::cerr << q.store().at(0) << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
base/pcg-random/CMakeLists.txt
Normal file
2
base/pcg-random/CMakeLists.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
add_library(pcg_random INTERFACE)
|
||||||
|
target_include_directories(pcg_random INTERFACE .)
|
@ -292,7 +292,7 @@ inline itype rotl(itype value, bitcount_t rot)
|
|||||||
{
|
{
|
||||||
constexpr bitcount_t bits = sizeof(itype) * 8;
|
constexpr bitcount_t bits = sizeof(itype) * 8;
|
||||||
constexpr bitcount_t mask = bits - 1;
|
constexpr bitcount_t mask = bits - 1;
|
||||||
#if PCG_USE_ZEROCHECK_ROTATE_IDIOM
|
#if defined(PCG_USE_ZEROCHECK_ROTATE_IDIOM)
|
||||||
return rot ? (value << rot) | (value >> (bits - rot)) : value;
|
return rot ? (value << rot) | (value >> (bits - rot)) : value;
|
||||||
#else
|
#else
|
||||||
return (value << rot) | (value >> ((- rot) & mask));
|
return (value << rot) | (value >> ((- rot) & mask));
|
||||||
@ -304,7 +304,7 @@ inline itype rotr(itype value, bitcount_t rot)
|
|||||||
{
|
{
|
||||||
constexpr bitcount_t bits = sizeof(itype) * 8;
|
constexpr bitcount_t bits = sizeof(itype) * 8;
|
||||||
constexpr bitcount_t mask = bits - 1;
|
constexpr bitcount_t mask = bits - 1;
|
||||||
#if PCG_USE_ZEROCHECK_ROTATE_IDIOM
|
#if defined(PCG_USE_ZEROCHECK_ROTATE_IDIOM)
|
||||||
return rot ? (value >> rot) | (value << (bits - rot)) : value;
|
return rot ? (value >> rot) | (value << (bits - rot)) : value;
|
||||||
#else
|
#else
|
||||||
return (value >> rot) | (value << ((- rot) & mask));
|
return (value >> rot) | (value << ((- rot) & mask));
|
||||||
@ -318,7 +318,7 @@ inline itype rotr(itype value, bitcount_t rot)
|
|||||||
*
|
*
|
||||||
* These overloads will be preferred over the general template code above.
|
* These overloads will be preferred over the general template code above.
|
||||||
*/
|
*/
|
||||||
#if PCG_USE_INLINE_ASM && __GNUC__ && (__x86_64__ || __i386__)
|
#if defined(PCG_USE_INLINE_ASM) && __GNUC__ && (__x86_64__ || __i386__)
|
||||||
|
|
||||||
inline uint8_t rotr(uint8_t value, bitcount_t rot)
|
inline uint8_t rotr(uint8_t value, bitcount_t rot)
|
||||||
{
|
{
|
||||||
@ -600,7 +600,7 @@ std::ostream& operator<<(std::ostream& out, printable_typename<T>) {
|
|||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
int status;
|
int status;
|
||||||
char* pretty_name =
|
char* pretty_name =
|
||||||
abi::__cxa_demangle(implementation_typename, NULL, NULL, &status);
|
abi::__cxa_demangle(implementation_typename, nullptr, nullptr, &status);
|
||||||
if (status == 0)
|
if (status == 0)
|
||||||
out << pretty_name;
|
out << pretty_name;
|
||||||
free(static_cast<void*>(pretty_name));
|
free(static_cast<void*>(pretty_name));
|
5
base/pcg-random/ya.make
Normal file
5
base/pcg-random/ya.make
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
LIBRARY()
|
||||||
|
|
||||||
|
ADDINCL (GLOBAL clickhouse/base/pcg-random)
|
||||||
|
|
||||||
|
END()
|
9
base/widechar_width/ya.make
Normal file
9
base/widechar_width/ya.make
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
LIBRARY()
|
||||||
|
|
||||||
|
ADDINCL(GLOBAL clickhouse/base/widechar_width)
|
||||||
|
|
||||||
|
SRCS(
|
||||||
|
widechar_width.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
END()
|
@ -1,3 +1,7 @@
|
|||||||
RECURSE(
|
RECURSE(
|
||||||
common
|
common
|
||||||
|
daemon
|
||||||
|
loggers
|
||||||
|
pcg-random
|
||||||
|
widechar_width
|
||||||
)
|
)
|
||||||
|
@ -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)
|
|
@ -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}")
|
|
@ -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}")
|
|
@ -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}")
|
|
@ -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()
|
|
@ -70,6 +70,7 @@ elseif(NOT MISSING_INTERNAL_PARQUET_LIBRARY AND NOT OS_FREEBSD)
|
|||||||
|
|
||||||
set(USE_PARQUET 1)
|
set(USE_PARQUET 1)
|
||||||
set(USE_ORC 1)
|
set(USE_ORC 1)
|
||||||
|
set(USE_ARROW 1)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -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
|
|
@ -27,7 +27,7 @@ elseif(NOT MISSING_INTERNAL_PROTOBUF_LIBRARY)
|
|||||||
set(Protobuf_PROTOC_LIBRARY libprotoc)
|
set(Protobuf_PROTOC_LIBRARY libprotoc)
|
||||||
set(Protobuf_LITE_LIBRARY libprotobuf-lite)
|
set(Protobuf_LITE_LIBRARY libprotobuf-lite)
|
||||||
|
|
||||||
set(Protobuf_PROTOC_EXECUTABLE ${ClickHouse_BINARY_DIR}/contrib/protobuf/cmake/protoc)
|
set(Protobuf_PROTOC_EXECUTABLE "$<TARGET_FILE:protoc>")
|
||||||
|
|
||||||
if(NOT DEFINED PROTOBUF_GENERATE_CPP_APPEND_PATH)
|
if(NOT DEFINED PROTOBUF_GENERATE_CPP_APPEND_PATH)
|
||||||
set(PROTOBUF_GENERATE_CPP_APPEND_PATH TRUE)
|
set(PROTOBUF_GENERATE_CPP_APPEND_PATH TRUE)
|
||||||
|
@ -4,7 +4,11 @@ if (NOT COMPILER_CLANG)
|
|||||||
message (FATAL_ERROR "FreeBSD build is supported only for Clang")
|
message (FATAL_ERROR "FreeBSD build is supported only for Clang")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "amd64")
|
||||||
|
execute_process (COMMAND ${CMAKE_CXX_COMPILER} --print-file-name=libclang_rt.builtins-x86_64.a OUTPUT_VARIABLE BUILTINS_LIBRARY OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
else ()
|
||||||
execute_process (COMMAND ${CMAKE_CXX_COMPILER} --print-file-name=libclang_rt.builtins-${CMAKE_SYSTEM_PROCESSOR}.a OUTPUT_VARIABLE BUILTINS_LIBRARY OUTPUT_STRIP_TRAILING_WHITESPACE)
|
execute_process (COMMAND ${CMAKE_CXX_COMPILER} --print-file-name=libclang_rt.builtins-${CMAKE_SYSTEM_PROCESSOR}.a OUTPUT_VARIABLE BUILTINS_LIBRARY OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
endif ()
|
||||||
|
|
||||||
set (DEFAULT_LIBS "${DEFAULT_LIBS} ${BUILTINS_LIBRARY} ${COVERAGE_OPTION} -lc -lm -lrt -lpthread")
|
set (DEFAULT_LIBS "${DEFAULT_LIBS} ${BUILTINS_LIBRARY} ${COVERAGE_OPTION} -lc -lm -lrt -lpthread")
|
||||||
|
|
||||||
|
@ -7,6 +7,9 @@ set (CMAKE_SYSROOT "${CMAKE_CURRENT_LIST_DIR}/../toolchain/freebsd-x86_64")
|
|||||||
|
|
||||||
set (CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) # disable linkage check - it doesn't work in CMake
|
set (CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) # disable linkage check - it doesn't work in CMake
|
||||||
|
|
||||||
|
set (CMAKE_AR "/usr/bin/ar" CACHE FILEPATH "" FORCE)
|
||||||
|
set (CMAKE_RANLIB "/usr/bin/ranlib" CACHE FILEPATH "" FORCE)
|
||||||
|
|
||||||
set (LINKER_NAME "lld" CACHE STRING "" FORCE)
|
set (LINKER_NAME "lld" CACHE STRING "" FORCE)
|
||||||
|
|
||||||
set (CMAKE_EXE_LINKER_FLAGS_INIT "-fuse-ld=lld")
|
set (CMAKE_EXE_LINKER_FLAGS_INIT "-fuse-ld=lld")
|
||||||
|
21
cmake/fuzzer.cmake
Normal file
21
cmake/fuzzer.cmake
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
option (FUZZER "Enable fuzzer: libfuzzer")
|
||||||
|
|
||||||
|
if (FUZZER)
|
||||||
|
if (FUZZER STREQUAL "libfuzzer")
|
||||||
|
# NOTE: Eldar Zaitov decided to name it "libfuzzer" instead of "fuzzer" to keep in mind another possible fuzzer backends.
|
||||||
|
# NOTE: no-link means that all the targets are built with instrumentation for fuzzer, but only some of them (tests) have entry point for fuzzer and it's not checked.
|
||||||
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SAN_FLAGS} -fsanitize=fuzzer-no-link")
|
||||||
|
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SAN_FLAGS} -fsanitize=fuzzer-no-link")
|
||||||
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
|
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=fuzzer-no-link")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# NOTE: oss-fuzz can change LIB_FUZZING_ENGINE variable
|
||||||
|
if (NOT LIB_FUZZING_ENGINE)
|
||||||
|
set (LIB_FUZZING_ENGINE "-fsanitize=fuzzer")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
else ()
|
||||||
|
message (FATAL_ERROR "Unknown fuzzer type: ${FUZZER}")
|
||||||
|
endif ()
|
||||||
|
endif()
|
@ -2,4 +2,3 @@ set(DIVIDE_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/contrib/libdivide)
|
|||||||
set(DBMS_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/src ${ClickHouse_BINARY_DIR}/src)
|
set(DBMS_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/src ${ClickHouse_BINARY_DIR}/src)
|
||||||
set(DOUBLE_CONVERSION_CONTRIB_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/contrib/double-conversion)
|
set(DOUBLE_CONVERSION_CONTRIB_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/contrib/double-conversion)
|
||||||
set(METROHASH_CONTRIB_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/contrib/libmetrohash/src)
|
set(METROHASH_CONTRIB_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/contrib/libmetrohash/src)
|
||||||
set(PCG_RANDOM_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/contrib/libpcg-random/include)
|
|
||||||
|
@ -26,10 +26,6 @@ if (TARGET ${Boost_PROGRAM_OPTIONS_LIBRARY})
|
|||||||
list(APPEND dirs ${dirs1})
|
list(APPEND dirs ${dirs1})
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (USE_INTERNAL_POCO_LIBRARY)
|
|
||||||
list(APPEND dirs "./contrib/poco/Foundation/include")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
list(REMOVE_DUPLICATES dirs)
|
list(REMOVE_DUPLICATES dirs)
|
||||||
file (WRITE ${CMAKE_CURRENT_BINARY_DIR}/include_directories.txt "")
|
file (WRITE ${CMAKE_CURRENT_BINARY_DIR}/include_directories.txt "")
|
||||||
foreach (dir ${dirs})
|
foreach (dir ${dirs})
|
||||||
|
@ -36,8 +36,10 @@ if (SANITIZE)
|
|||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
elseif (SANITIZE STREQUAL "thread")
|
elseif (SANITIZE STREQUAL "thread")
|
||||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SAN_FLAGS} -fsanitize=thread")
|
set (TSAN_FLAGS "-fsanitize=thread -fsanitize-blacklist=${CMAKE_SOURCE_DIR}/tests/tsan_suppressions.txt")
|
||||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SAN_FLAGS} -fsanitize=thread")
|
|
||||||
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SAN_FLAGS} ${TSAN_FLAGS}")
|
||||||
|
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SAN_FLAGS} ${TSAN_FLAGS}")
|
||||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread")
|
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread")
|
||||||
endif()
|
endif()
|
||||||
@ -58,18 +60,6 @@ if (SANITIZE)
|
|||||||
# llvm-tblgen, that is used during LLVM build, doesn't work with UBSan.
|
# llvm-tblgen, that is used during LLVM build, doesn't work with UBSan.
|
||||||
set (ENABLE_EMBEDDED_COMPILER 0 CACHE BOOL "")
|
set (ENABLE_EMBEDDED_COMPILER 0 CACHE BOOL "")
|
||||||
|
|
||||||
elseif (SANITIZE STREQUAL "libfuzzer")
|
|
||||||
# NOTE: Eldar Zaitov decided to name it "libfuzzer" instead of "fuzzer" to keep in mind another possible fuzzer backends.
|
|
||||||
# NOTE: no-link means that all the targets are built with instrumentation for fuzzer, but only some of them (tests) have entry point for fuzzer and it's not checked.
|
|
||||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SAN_FLAGS} -fsanitize=fuzzer-no-link,address,undefined -fsanitize-address-use-after-scope")
|
|
||||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SAN_FLAGS} -fsanitize=fuzzer-no-link,address,undefined -fsanitize-address-use-after-scope")
|
|
||||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|
||||||
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=fuzzer-no-link,address,undefined -fsanitize-address-use-after-scope")
|
|
||||||
endif()
|
|
||||||
if (MAKE_STATIC_LIBRARIES AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|
||||||
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libasan -static-libubsan")
|
|
||||||
endif ()
|
|
||||||
set (LIBFUZZER_CMAKE_CXX_FLAGS "-fsanitize=fuzzer,address,undefined -fsanitize-address-use-after-scope")
|
|
||||||
else ()
|
else ()
|
||||||
message (FATAL_ERROR "Unknown sanitizer type: ${SANITIZE}")
|
message (FATAL_ERROR "Unknown sanitizer type: ${SANITIZE}")
|
||||||
endif ()
|
endif ()
|
||||||
|
@ -27,6 +27,7 @@ if (CMAKE_CROSSCOMPILING)
|
|||||||
elseif (OS_FREEBSD)
|
elseif (OS_FREEBSD)
|
||||||
# FIXME: broken dependencies
|
# FIXME: broken dependencies
|
||||||
set (ENABLE_PROTOBUF OFF CACHE INTERNAL "")
|
set (ENABLE_PROTOBUF OFF CACHE INTERNAL "")
|
||||||
|
set (ENABLE_EMBEDDED_COMPILER OFF CACHE INTERNAL "")
|
||||||
else ()
|
else ()
|
||||||
message (FATAL_ERROR "Trying to cross-compile to unsupported system: ${CMAKE_SYSTEM_NAME}!")
|
message (FATAL_ERROR "Trying to cross-compile to unsupported system: ${CMAKE_SYSTEM_NAME}!")
|
||||||
endif ()
|
endif ()
|
||||||
|
2
cmake/toolchain/freebsd-x86_64/README.txt
Normal file
2
cmake/toolchain/freebsd-x86_64/README.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
wget https://clickhouse-datasets.s3.yandex.net/toolchains/toolchains/freebsd-11.3-toolchain.tar.xz
|
||||||
|
tar xJf freebsd-11.3-toolchain.tar.xz --strip-components=1
|
@ -1,6 +1,8 @@
|
|||||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
set (COMPILER_GCC 1)
|
set (COMPILER_GCC 1)
|
||||||
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang|AppleClang")
|
elseif (CMAKE_CXX_COMPILER_ID MATCHES "AppleClang")
|
||||||
|
set (COMPILER_CLANG 1) # Safe to treat AppleClang as a regular Clang, in general.
|
||||||
|
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
set (COMPILER_CLANG 1)
|
set (COMPILER_CLANG 1)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
@ -11,11 +13,26 @@ if (COMPILER_GCC)
|
|||||||
message (FATAL_ERROR "GCC version must be at least ${GCC_MINIMUM_VERSION}. For example, if GCC ${GCC_MINIMUM_VERSION} is available under gcc-${GCC_MINIMUM_VERSION}, g++-${GCC_MINIMUM_VERSION} names, do the following: export CC=gcc-${GCC_MINIMUM_VERSION} CXX=g++-${GCC_MINIMUM_VERSION}; rm -rf CMakeCache.txt CMakeFiles; and re run cmake or ./release.")
|
message (FATAL_ERROR "GCC version must be at least ${GCC_MINIMUM_VERSION}. For example, if GCC ${GCC_MINIMUM_VERSION} is available under gcc-${GCC_MINIMUM_VERSION}, g++-${GCC_MINIMUM_VERSION} names, do the following: export CC=gcc-${GCC_MINIMUM_VERSION} CXX=g++-${GCC_MINIMUM_VERSION}; rm -rf CMakeCache.txt CMakeFiles; and re run cmake or ./release.")
|
||||||
endif ()
|
endif ()
|
||||||
elseif (COMPILER_CLANG)
|
elseif (COMPILER_CLANG)
|
||||||
# Require minimum version of clang
|
# Require minimum version of clang/apple-clang
|
||||||
|
if (CMAKE_CXX_COMPILER_ID MATCHES "AppleClang")
|
||||||
|
# AppleClang 10.0.1 (Xcode 10.2) corresponds to LLVM/Clang upstream version 7.0.0
|
||||||
|
# AppleClang 11.0.0 (Xcode 11.0) corresponds to LLVM/Clang upstream version 8.0.0
|
||||||
|
set (XCODE_MINIMUM_VERSION 10.2)
|
||||||
|
set (APPLE_CLANG_MINIMUM_VERSION 10.0.1)
|
||||||
|
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${APPLE_CLANG_MINIMUM_VERSION})
|
||||||
|
message (FATAL_ERROR "AppleClang compiler version must be at least ${APPLE_CLANG_MINIMUM_VERSION} (Xcode ${XCODE_MINIMUM_VERSION}).")
|
||||||
|
elseif (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 11.0.0)
|
||||||
|
# char8_t is available staring (upstream vanilla) Clang 7, but prior to Clang 8,
|
||||||
|
# it is not enabled by -std=c++20 and can be enabled with an explicit -fchar8_t.
|
||||||
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fchar8_t")
|
||||||
|
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fchar8_t")
|
||||||
|
endif ()
|
||||||
|
else ()
|
||||||
set (CLANG_MINIMUM_VERSION 8)
|
set (CLANG_MINIMUM_VERSION 8)
|
||||||
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${CLANG_MINIMUM_VERSION})
|
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${CLANG_MINIMUM_VERSION})
|
||||||
message (FATAL_ERROR "Clang version must be at least ${CLANG_MINIMUM_VERSION}.")
|
message (FATAL_ERROR "Clang version must be at least ${CLANG_MINIMUM_VERSION}.")
|
||||||
endif ()
|
endif ()
|
||||||
|
endif ()
|
||||||
else ()
|
else ()
|
||||||
message (WARNING "You are using an unsupported compiler. Compilation has only been tested with Clang and GCC.")
|
message (WARNING "You are using an unsupported compiler. Compilation has only been tested with Clang and GCC.")
|
||||||
endif ()
|
endif ()
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
# This strings autochanged from release_lib.sh:
|
# This strings autochanged from release_lib.sh:
|
||||||
set(VERSION_REVISION 54434)
|
set(VERSION_REVISION 54435)
|
||||||
set(VERSION_MAJOR 20)
|
set(VERSION_MAJOR 20)
|
||||||
set(VERSION_MINOR 4)
|
set(VERSION_MINOR 5)
|
||||||
set(VERSION_PATCH 1)
|
set(VERSION_PATCH 1)
|
||||||
set(VERSION_GITHASH 05da1bff8b5826608d05618dab984cdf8f96e679)
|
set(VERSION_GITHASH 91df18a906dcffdbee6816e5389df6c65f86e35f)
|
||||||
set(VERSION_DESCRIBE v20.4.1.1-prestable)
|
set(VERSION_DESCRIBE v20.5.1.1-prestable)
|
||||||
set(VERSION_STRING 20.4.1.1)
|
set(VERSION_STRING 20.5.1.1)
|
||||||
# end of autochange
|
# end of autochange
|
||||||
|
|
||||||
set(VERSION_EXTRA "" CACHE STRING "")
|
set(VERSION_EXTRA "" CACHE STRING "")
|
||||||
|
165
cmake/warnings.cmake
Normal file
165
cmake/warnings.cmake
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
# Our principle is to enable as many warnings as possible and always do it with "warnings as errors" flag.
|
||||||
|
#
|
||||||
|
# But it comes with some cost:
|
||||||
|
# - we have to disable some warnings in 3rd party libraries (they are located in "contrib" directory)
|
||||||
|
# - we have to include headers of these libraries as -isystem to avoid warnings from headers
|
||||||
|
# (this is the same behaviour as if these libraries were located in /usr/include)
|
||||||
|
# - sometimes warnings from 3rd party libraries may come from macro substitutions in our code
|
||||||
|
# and we have to wrap them with #pragma GCC/clang diagnostic ignored
|
||||||
|
|
||||||
|
if (NOT MSVC)
|
||||||
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (USE_DEBUG_HELPERS)
|
||||||
|
set (INCLUDE_DEBUG_HELPERS "-I${ClickHouse_SOURCE_DIR}/base -include ${ClickHouse_SOURCE_DIR}/src/Core/iostream_debug_helpers.h")
|
||||||
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${INCLUDE_DEBUG_HELPERS}")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
# Add some warnings that are not available even with -Wall -Wextra -Wpedantic.
|
||||||
|
|
||||||
|
option (WEVERYTHING "Enables -Weverything option with some exceptions. This is intended for exploration of new compiler warnings that may be found to be useful. Only makes sense for clang." ON)
|
||||||
|
|
||||||
|
if (COMPILER_CLANG)
|
||||||
|
add_warning(pedantic)
|
||||||
|
no_warning(vla-extension)
|
||||||
|
no_warning(zero-length-array)
|
||||||
|
|
||||||
|
add_warning(comma)
|
||||||
|
add_warning(conditional-uninitialized)
|
||||||
|
add_warning(covered-switch-default)
|
||||||
|
add_warning(deprecated)
|
||||||
|
add_warning(embedded-directive)
|
||||||
|
add_warning(empty-init-stmt) # linux-only
|
||||||
|
add_warning(extra-semi-stmt) # linux-only
|
||||||
|
add_warning(extra-semi)
|
||||||
|
add_warning(gnu-case-range)
|
||||||
|
add_warning(inconsistent-missing-destructor-override)
|
||||||
|
add_warning(newline-eof)
|
||||||
|
add_warning(old-style-cast)
|
||||||
|
add_warning(range-loop-analysis)
|
||||||
|
add_warning(redundant-parens)
|
||||||
|
add_warning(reserved-id-macro)
|
||||||
|
add_warning(shadow-field) # clang 8+
|
||||||
|
add_warning(shadow-uncaptured-local)
|
||||||
|
add_warning(shadow)
|
||||||
|
add_warning(string-plus-int) # clang 8+
|
||||||
|
add_warning(undef)
|
||||||
|
add_warning(unreachable-code-return)
|
||||||
|
add_warning(unreachable-code)
|
||||||
|
add_warning(unused-exception-parameter)
|
||||||
|
add_warning(unused-macros)
|
||||||
|
add_warning(unused-member-function)
|
||||||
|
add_warning(zero-as-null-pointer-constant)
|
||||||
|
|
||||||
|
if (WEVERYTHING)
|
||||||
|
add_warning(everything)
|
||||||
|
no_warning(c++98-compat-pedantic)
|
||||||
|
no_warning(c++98-compat)
|
||||||
|
no_warning(c99-extensions)
|
||||||
|
no_warning(conversion)
|
||||||
|
no_warning(ctad-maybe-unsupported) # clang 9+, linux-only
|
||||||
|
no_warning(deprecated-dynamic-exception-spec)
|
||||||
|
no_warning(disabled-macro-expansion)
|
||||||
|
no_warning(documentation-unknown-command)
|
||||||
|
no_warning(double-promotion)
|
||||||
|
no_warning(exit-time-destructors)
|
||||||
|
no_warning(float-equal)
|
||||||
|
no_warning(global-constructors)
|
||||||
|
no_warning(missing-prototypes)
|
||||||
|
no_warning(missing-variable-declarations)
|
||||||
|
no_warning(nested-anon-types)
|
||||||
|
no_warning(packed)
|
||||||
|
no_warning(padded)
|
||||||
|
no_warning(return-std-move-in-c++11) # clang 7+
|
||||||
|
no_warning(shift-sign-overflow)
|
||||||
|
no_warning(sign-conversion)
|
||||||
|
no_warning(switch-enum)
|
||||||
|
no_warning(undefined-func-template)
|
||||||
|
no_warning(unused-template)
|
||||||
|
no_warning(vla)
|
||||||
|
no_warning(weak-template-vtables)
|
||||||
|
no_warning(weak-vtables)
|
||||||
|
|
||||||
|
# TODO Enable conversion, sign-conversion, double-promotion warnings.
|
||||||
|
endif ()
|
||||||
|
elseif (COMPILER_GCC)
|
||||||
|
# Add compiler options only to c++ compiler
|
||||||
|
function(add_cxx_compile_options option)
|
||||||
|
add_compile_options("$<$<STREQUAL:$<TARGET_PROPERTY:LINKER_LANGUAGE>,CXX>:${option}>")
|
||||||
|
endfunction()
|
||||||
|
# Warn about boolean expression compared with an integer value different from true/false
|
||||||
|
add_cxx_compile_options(-Wbool-compare)
|
||||||
|
# Warn whenever a pointer is cast such that the required alignment of the target is increased.
|
||||||
|
add_cxx_compile_options(-Wcast-align)
|
||||||
|
# Warn whenever a pointer is cast so as to remove a type qualifier from the target type.
|
||||||
|
add_cxx_compile_options(-Wcast-qual)
|
||||||
|
# Warn when deleting a pointer to incomplete type, which may cause undefined behavior at runtime
|
||||||
|
add_cxx_compile_options(-Wdelete-incomplete)
|
||||||
|
# Warn if a requested optimization pass is disabled. Code is too big or too complex
|
||||||
|
add_cxx_compile_options(-Wdisabled-optimization)
|
||||||
|
# Warn about duplicated conditions in an if-else-if chain
|
||||||
|
add_cxx_compile_options(-Wduplicated-cond)
|
||||||
|
# Warn about a comparison between values of different enumerated types
|
||||||
|
add_cxx_compile_options(-Wenum-compare)
|
||||||
|
# Warn about uninitialized variables that are initialized with themselves
|
||||||
|
add_cxx_compile_options(-Winit-self)
|
||||||
|
# Warn about logical not used on the left hand side operand of a comparison
|
||||||
|
add_cxx_compile_options(-Wlogical-not-parentheses)
|
||||||
|
# Warn about suspicious uses of logical operators in expressions
|
||||||
|
add_cxx_compile_options(-Wlogical-op)
|
||||||
|
# Warn if there exists a path from the function entry to a use of the variable that is uninitialized.
|
||||||
|
add_cxx_compile_options(-Wmaybe-uninitialized)
|
||||||
|
# Warn when the indentation of the code does not reflect the block structure
|
||||||
|
add_cxx_compile_options(-Wmisleading-indentation)
|
||||||
|
# Warn if a global function is defined without a previous declaration - disabled because of build times
|
||||||
|
# add_cxx_compile_options(-Wmissing-declarations)
|
||||||
|
# Warn if a user-supplied include directory does not exist
|
||||||
|
add_cxx_compile_options(-Wmissing-include-dirs)
|
||||||
|
# Obvious
|
||||||
|
add_cxx_compile_options(-Wnon-virtual-dtor)
|
||||||
|
# Obvious
|
||||||
|
add_cxx_compile_options(-Wno-return-local-addr)
|
||||||
|
# This warning is disabled due to false positives if compiled with libc++: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90037
|
||||||
|
#add_cxx_compile_options(-Wnull-dereference)
|
||||||
|
# Obvious
|
||||||
|
add_cxx_compile_options(-Wodr)
|
||||||
|
# Obvious
|
||||||
|
add_cxx_compile_options(-Wold-style-cast)
|
||||||
|
# Warn when a function declaration hides virtual functions from a base class
|
||||||
|
# add_cxx_compile_options(-Woverloaded-virtual)
|
||||||
|
# Warn about placement new expressions with undefined behavior
|
||||||
|
add_cxx_compile_options(-Wplacement-new=2)
|
||||||
|
# Warn about anything that depends on the “size of” a function type or of void
|
||||||
|
add_cxx_compile_options(-Wpointer-arith)
|
||||||
|
# Warn if anything is declared more than once in the same scope
|
||||||
|
add_cxx_compile_options(-Wredundant-decls)
|
||||||
|
# Member initialization reordering
|
||||||
|
add_cxx_compile_options(-Wreorder)
|
||||||
|
# Obvious
|
||||||
|
add_cxx_compile_options(-Wshadow)
|
||||||
|
# Warn if left shifting a negative value
|
||||||
|
add_cxx_compile_options(-Wshift-negative-value)
|
||||||
|
# Warn about a definition of an unsized deallocation function
|
||||||
|
add_cxx_compile_options(-Wsized-deallocation)
|
||||||
|
# Warn when the sizeof operator is applied to a parameter that is declared as an array in a function definition
|
||||||
|
add_cxx_compile_options(-Wsizeof-array-argument)
|
||||||
|
# Warn for suspicious length parameters to certain string and memory built-in functions if the argument uses sizeof
|
||||||
|
add_cxx_compile_options(-Wsizeof-pointer-memaccess)
|
||||||
|
|
||||||
|
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9)
|
||||||
|
# Warn about overriding virtual functions that are not marked with the override keyword
|
||||||
|
add_cxx_compile_options(-Wsuggest-override)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
# Warn whenever a switch statement has an index of boolean type and the case values are outside the range of a boolean type
|
||||||
|
add_cxx_compile_options(-Wswitch-bool)
|
||||||
|
# Warn if a self-comparison always evaluates to true or false
|
||||||
|
add_cxx_compile_options(-Wtautological-compare)
|
||||||
|
# Warn about trampolines generated for pointers to nested functions
|
||||||
|
add_cxx_compile_options(-Wtrampolines)
|
||||||
|
# Obvious
|
||||||
|
add_cxx_compile_options(-Wunused)
|
||||||
|
# Warn if vector operation is not implemented via SIMD capabilities of the architecture
|
||||||
|
add_cxx_compile_options(-Wvector-operation-performance)
|
||||||
|
endif ()
|
91
contrib/CMakeLists.txt
vendored
91
contrib/CMakeLists.txt
vendored
@ -1,10 +1,39 @@
|
|||||||
# Third-party libraries may have substandard code.
|
# Third-party libraries may have substandard code.
|
||||||
|
|
||||||
|
# Put all targets defined here and in added subfolders under "contrib/" folder in GUI-based IDEs by default.
|
||||||
|
# Some of third-party projects may override CMAKE_FOLDER or FOLDER property of their targets, so they will
|
||||||
|
# appear not in "contrib/" as originally planned here.
|
||||||
|
get_filename_component (_current_dir_name "${CMAKE_CURRENT_LIST_DIR}" NAME)
|
||||||
|
if (CMAKE_FOLDER)
|
||||||
|
set (CMAKE_FOLDER "${CMAKE_FOLDER}/${_current_dir_name}")
|
||||||
|
else ()
|
||||||
|
set (CMAKE_FOLDER "${_current_dir_name}")
|
||||||
|
endif ()
|
||||||
|
unset (_current_dir_name)
|
||||||
|
|
||||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w")
|
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w")
|
||||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w")
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w")
|
||||||
|
|
||||||
set_property(DIRECTORY PROPERTY EXCLUDE_FROM_ALL 1)
|
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)
|
if (USE_INTERNAL_BOOST_LIBRARY)
|
||||||
add_subdirectory (boost-cmake)
|
add_subdirectory (boost-cmake)
|
||||||
endif ()
|
endif ()
|
||||||
@ -27,8 +56,6 @@ if (USE_INTERNAL_DOUBLE_CONVERSION_LIBRARY)
|
|||||||
add_subdirectory (double-conversion-cmake)
|
add_subdirectory (double-conversion-cmake)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
add_subdirectory (ryu-cmake)
|
|
||||||
|
|
||||||
if (USE_INTERNAL_CITYHASH_LIBRARY)
|
if (USE_INTERNAL_CITYHASH_LIBRARY)
|
||||||
add_subdirectory (cityhash102)
|
add_subdirectory (cityhash102)
|
||||||
endif ()
|
endif ()
|
||||||
@ -41,9 +68,6 @@ if (USE_INTERNAL_METROHASH_LIBRARY)
|
|||||||
add_subdirectory (libmetrohash)
|
add_subdirectory (libmetrohash)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
add_subdirectory (murmurhash)
|
|
||||||
add_subdirectory (croaring)
|
|
||||||
|
|
||||||
if (USE_INTERNAL_BTRIE_LIBRARY)
|
if (USE_INTERNAL_BTRIE_LIBRARY)
|
||||||
add_subdirectory (libbtrie)
|
add_subdirectory (libbtrie)
|
||||||
endif ()
|
endif ()
|
||||||
@ -75,14 +99,6 @@ if (USE_INTERNAL_ZLIB_LIBRARY)
|
|||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
add_subdirectory (cctz-cmake)
|
|
||||||
|
|
||||||
add_subdirectory (jemalloc-cmake)
|
|
||||||
|
|
||||||
if (USE_INTERNAL_CPUID_LIBRARY)
|
|
||||||
add_subdirectory (libcpuid)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (USE_INTERNAL_H3_LIBRARY)
|
if (USE_INTERNAL_H3_LIBRARY)
|
||||||
add_subdirectory(h3-cmake)
|
add_subdirectory(h3-cmake)
|
||||||
endif ()
|
endif ()
|
||||||
@ -90,8 +106,6 @@ endif ()
|
|||||||
if (USE_INTERNAL_SSL_LIBRARY)
|
if (USE_INTERNAL_SSL_LIBRARY)
|
||||||
add_subdirectory (openssl-cmake)
|
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::Crypto ALIAS ${OPENSSL_CRYPTO_LIBRARY})
|
||||||
add_library(OpenSSL::SSL ALIAS ${OPENSSL_SSL_LIBRARY})
|
add_library(OpenSSL::SSL ALIAS ${OPENSSL_SSL_LIBRARY})
|
||||||
endif ()
|
endif ()
|
||||||
@ -131,11 +145,6 @@ if (USE_RDKAFKA)
|
|||||||
add_subdirectory (cppkafka-cmake)
|
add_subdirectory (cppkafka-cmake)
|
||||||
endif()
|
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)
|
if (ENABLE_ICU AND USE_INTERNAL_ICU_LIBRARY)
|
||||||
add_subdirectory (icu-cmake)
|
add_subdirectory (icu-cmake)
|
||||||
endif ()
|
endif ()
|
||||||
@ -179,9 +188,10 @@ if (USE_INTERNAL_PARQUET_LIBRARY_NATIVE_CMAKE)
|
|||||||
set (ARROW_TEST_LINKAGE "shared" CACHE INTERNAL "")
|
set (ARROW_TEST_LINKAGE "shared" CACHE INTERNAL "")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if(CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO")
|
if (CMAKE_BUILD_TYPE_UC STREQUAL "RELWITHDEBINFO")
|
||||||
set (_save_build_type ${CMAKE_BUILD_TYPE})
|
set (_save_build_type ${CMAKE_BUILD_TYPE})
|
||||||
set(CMAKE_BUILD_TYPE RELEASE)
|
set (CMAKE_BUILD_TYPE Release)
|
||||||
|
string (TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UC)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# Because Arrow uses CMAKE_SOURCE_DIR as a project path
|
# Because Arrow uses CMAKE_SOURCE_DIR as a project path
|
||||||
@ -191,6 +201,8 @@ if (USE_INTERNAL_PARQUET_LIBRARY_NATIVE_CMAKE)
|
|||||||
|
|
||||||
if (_save_build_type)
|
if (_save_build_type)
|
||||||
set (CMAKE_BUILD_TYPE ${_save_build_type})
|
set (CMAKE_BUILD_TYPE ${_save_build_type})
|
||||||
|
unset (_save_build_type)
|
||||||
|
string (TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UC)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
else()
|
else()
|
||||||
@ -207,29 +219,6 @@ if (USE_INTERNAL_AVRO_LIBRARY)
|
|||||||
add_subdirectory(avro-cmake)
|
add_subdirectory(avro-cmake)
|
||||||
endif()
|
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)
|
if(USE_INTERNAL_GTEST_LIBRARY)
|
||||||
# Google Test from sources
|
# Google Test from sources
|
||||||
add_subdirectory(${ClickHouse_SOURCE_DIR}/contrib/googletest/googletest ${CMAKE_CURRENT_BINARY_DIR}/googletest)
|
add_subdirectory(${ClickHouse_SOURCE_DIR}/contrib/googletest/googletest ${CMAKE_CURRENT_BINARY_DIR}/googletest)
|
||||||
@ -321,18 +310,6 @@ if (USE_SIMDJSON)
|
|||||||
add_subdirectory (simdjson-cmake)
|
add_subdirectory (simdjson-cmake)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (USE_MIMALLOC)
|
|
||||||
add_subdirectory (mimalloc)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (USE_FASTOPS)
|
if (USE_FASTOPS)
|
||||||
add_subdirectory (fastops-cmake)
|
add_subdirectory (fastops-cmake)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_subdirectory(grpc-cmake)
|
|
||||||
|
|
||||||
add_subdirectory(replxx-cmake)
|
|
||||||
add_subdirectory(FastMemcpy)
|
|
||||||
add_subdirectory(widecharwidth)
|
|
||||||
add_subdirectory(consistent-hashing)
|
|
||||||
add_subdirectory(consistent-hashing-sumbur)
|
|
||||||
|
@ -83,7 +83,7 @@ add_custom_command(OUTPUT orc_proto.pb.h orc_proto.pb.cc
|
|||||||
set(FLATBUFFERS_SRC_DIR ${ClickHouse_SOURCE_DIR}/contrib/flatbuffers)
|
set(FLATBUFFERS_SRC_DIR ${ClickHouse_SOURCE_DIR}/contrib/flatbuffers)
|
||||||
set(FLATBUFFERS_BINARY_DIR ${ClickHouse_BINARY_DIR}/contrib/flatbuffers)
|
set(FLATBUFFERS_BINARY_DIR ${ClickHouse_BINARY_DIR}/contrib/flatbuffers)
|
||||||
set(FLATBUFFERS_INCLUDE_DIR ${FLATBUFFERS_SRC_DIR}/include)
|
set(FLATBUFFERS_INCLUDE_DIR ${FLATBUFFERS_SRC_DIR}/include)
|
||||||
set(FLATBUFFERS_COMPILER "${FLATBUFFERS_BINARY_DIR}/flatc")
|
set(FLATBUFFERS_COMPILER "$<TARGET_FILE:flatc>")
|
||||||
|
|
||||||
# set flatbuffers CMake options
|
# set flatbuffers CMake options
|
||||||
if (${USE_STATIC_LIBRARIES})
|
if (${USE_STATIC_LIBRARIES})
|
||||||
|
2
contrib/aws
vendored
2
contrib/aws
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 45dd8552d3c492defca79d2720bcc809e35654da
|
Subproject commit 04d54dfa0342d9465fb2eb3bfd4b77a3f7682e99
|
@ -83,7 +83,7 @@ set(S3_INCLUDES
|
|||||||
|
|
||||||
add_library(aws_s3_checksums ${AWS_CHECKSUMS_SOURCES})
|
add_library(aws_s3_checksums ${AWS_CHECKSUMS_SOURCES})
|
||||||
target_include_directories(aws_s3_checksums PUBLIC "${AWS_CHECKSUMS_LIBRARY_DIR}/include/")
|
target_include_directories(aws_s3_checksums PUBLIC "${AWS_CHECKSUMS_LIBRARY_DIR}/include/")
|
||||||
if(CMAKE_BUILD_TYPE STREQUAL "" OR CMAKE_BUILD_TYPE STREQUAL "Debug")
|
if(CMAKE_BUILD_TYPE_UC STREQUAL "DEBUG")
|
||||||
target_compile_definitions(aws_s3_checksums PRIVATE "-DDEBUG_BUILD")
|
target_compile_definitions(aws_s3_checksums PRIVATE "-DDEBUG_BUILD")
|
||||||
endif()
|
endif()
|
||||||
set_target_properties(aws_s3_checksums PROPERTIES LINKER_LANGUAGE C)
|
set_target_properties(aws_s3_checksums PROPERTIES LINKER_LANGUAGE C)
|
||||||
|
@ -31,3 +31,13 @@ else ()
|
|||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
target_include_directories(base64 SYSTEM PUBLIC ${LIBRARY_DIR})
|
target_include_directories(base64 SYSTEM PUBLIC ${LIBRARY_DIR})
|
||||||
|
|
||||||
|
if (XCODE OR XCODE_VERSION)
|
||||||
|
# https://gitlab.kitware.com/cmake/cmake/issues/17457
|
||||||
|
# Some native build systems may not like targets that have only object files, so consider adding at least one real source file
|
||||||
|
# This applies to Xcode.
|
||||||
|
if (NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/dummy.c")
|
||||||
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/dummy.c" "")
|
||||||
|
endif ()
|
||||||
|
target_sources(base64 PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/dummy.c")
|
||||||
|
endif ()
|
||||||
|
2
contrib/cctz
vendored
2
contrib/cctz
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 5a3f785329cecdd2b68cd950e0647e9246774ef2
|
Subproject commit 7a2db4ece6e0f1b246173cbdb62711ae258ee841
|
@ -23,6 +23,604 @@ if (USE_INTERNAL_CCTZ)
|
|||||||
# yes, need linux, because bsd check inside linux in time_zone_libc.cc:24
|
# yes, need linux, because bsd check inside linux in time_zone_libc.cc:24
|
||||||
target_compile_definitions (cctz PRIVATE __USE_BSD linux _XOPEN_SOURCE=600)
|
target_compile_definitions (cctz PRIVATE __USE_BSD linux _XOPEN_SOURCE=600)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
# Build a libray with embedded tzdata
|
||||||
|
|
||||||
|
if (OS_LINUX AND ARCH_AMD64)
|
||||||
|
|
||||||
|
find_program (OBJCOPY_PATH NAMES "llvm-objcopy" "llvm-objcopy-10" "llvm-objcopy-9" "llvm-objcopy-8" "objcopy")
|
||||||
|
if (OBJCOPY_PATH)
|
||||||
|
message(STATUS "Using objcopy: ${OBJCOPY_PATH}.")
|
||||||
|
else ()
|
||||||
|
message(FATAL_ERROR "Cannot find objcopy.")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
set (TIMEZONES
|
||||||
|
Africa/Abidjan
|
||||||
|
Africa/Accra
|
||||||
|
Africa/Addis_Ababa
|
||||||
|
Africa/Algiers
|
||||||
|
Africa/Asmara
|
||||||
|
Africa/Asmera
|
||||||
|
Africa/Bamako
|
||||||
|
Africa/Bangui
|
||||||
|
Africa/Banjul
|
||||||
|
Africa/Bissau
|
||||||
|
Africa/Blantyre
|
||||||
|
Africa/Brazzaville
|
||||||
|
Africa/Bujumbura
|
||||||
|
Africa/Cairo
|
||||||
|
Africa/Casablanca
|
||||||
|
Africa/Ceuta
|
||||||
|
Africa/Conakry
|
||||||
|
Africa/Dakar
|
||||||
|
Africa/Dar_es_Salaam
|
||||||
|
Africa/Djibouti
|
||||||
|
Africa/Douala
|
||||||
|
Africa/El_Aaiun
|
||||||
|
Africa/Freetown
|
||||||
|
Africa/Gaborone
|
||||||
|
Africa/Harare
|
||||||
|
Africa/Johannesburg
|
||||||
|
Africa/Juba
|
||||||
|
Africa/Kampala
|
||||||
|
Africa/Khartoum
|
||||||
|
Africa/Kigali
|
||||||
|
Africa/Kinshasa
|
||||||
|
Africa/Lagos
|
||||||
|
Africa/Libreville
|
||||||
|
Africa/Lome
|
||||||
|
Africa/Luanda
|
||||||
|
Africa/Lubumbashi
|
||||||
|
Africa/Lusaka
|
||||||
|
Africa/Malabo
|
||||||
|
Africa/Maputo
|
||||||
|
Africa/Maseru
|
||||||
|
Africa/Mbabane
|
||||||
|
Africa/Mogadishu
|
||||||
|
Africa/Monrovia
|
||||||
|
Africa/Nairobi
|
||||||
|
Africa/Ndjamena
|
||||||
|
Africa/Niamey
|
||||||
|
Africa/Nouakchott
|
||||||
|
Africa/Ouagadougou
|
||||||
|
Africa/Porto-Novo
|
||||||
|
Africa/Sao_Tome
|
||||||
|
Africa/Timbuktu
|
||||||
|
Africa/Tripoli
|
||||||
|
Africa/Tunis
|
||||||
|
Africa/Windhoek
|
||||||
|
America/Adak
|
||||||
|
America/Anchorage
|
||||||
|
America/Anguilla
|
||||||
|
America/Antigua
|
||||||
|
America/Araguaina
|
||||||
|
America/Argentina/Buenos_Aires
|
||||||
|
America/Argentina/Catamarca
|
||||||
|
America/Argentina/ComodRivadavia
|
||||||
|
America/Argentina/Cordoba
|
||||||
|
America/Argentina/Jujuy
|
||||||
|
America/Argentina/La_Rioja
|
||||||
|
America/Argentina/Mendoza
|
||||||
|
America/Argentina/Rio_Gallegos
|
||||||
|
America/Argentina/Salta
|
||||||
|
America/Argentina/San_Juan
|
||||||
|
America/Argentina/San_Luis
|
||||||
|
America/Argentina/Tucuman
|
||||||
|
America/Argentina/Ushuaia
|
||||||
|
America/Aruba
|
||||||
|
America/Asuncion
|
||||||
|
America/Atikokan
|
||||||
|
America/Atka
|
||||||
|
America/Bahia
|
||||||
|
America/Bahia_Banderas
|
||||||
|
America/Barbados
|
||||||
|
America/Belem
|
||||||
|
America/Belize
|
||||||
|
America/Blanc-Sablon
|
||||||
|
America/Boa_Vista
|
||||||
|
America/Bogota
|
||||||
|
America/Boise
|
||||||
|
America/Buenos_Aires
|
||||||
|
America/Cambridge_Bay
|
||||||
|
America/Campo_Grande
|
||||||
|
America/Cancun
|
||||||
|
America/Caracas
|
||||||
|
America/Catamarca
|
||||||
|
America/Cayenne
|
||||||
|
America/Cayman
|
||||||
|
America/Chicago
|
||||||
|
America/Chihuahua
|
||||||
|
America/Coral_Harbour
|
||||||
|
America/Cordoba
|
||||||
|
America/Costa_Rica
|
||||||
|
America/Creston
|
||||||
|
America/Cuiaba
|
||||||
|
America/Curacao
|
||||||
|
America/Danmarkshavn
|
||||||
|
America/Dawson
|
||||||
|
America/Dawson_Creek
|
||||||
|
America/Denver
|
||||||
|
America/Detroit
|
||||||
|
America/Dominica
|
||||||
|
America/Edmonton
|
||||||
|
America/Eirunepe
|
||||||
|
America/El_Salvador
|
||||||
|
America/Ensenada
|
||||||
|
America/Fortaleza
|
||||||
|
America/Fort_Nelson
|
||||||
|
America/Fort_Wayne
|
||||||
|
America/Glace_Bay
|
||||||
|
America/Godthab
|
||||||
|
America/Goose_Bay
|
||||||
|
America/Grand_Turk
|
||||||
|
America/Grenada
|
||||||
|
America/Guadeloupe
|
||||||
|
America/Guatemala
|
||||||
|
America/Guayaquil
|
||||||
|
America/Guyana
|
||||||
|
America/Halifax
|
||||||
|
America/Havana
|
||||||
|
America/Hermosillo
|
||||||
|
America/Indiana/Indianapolis
|
||||||
|
America/Indiana/Knox
|
||||||
|
America/Indiana/Marengo
|
||||||
|
America/Indiana/Petersburg
|
||||||
|
America/Indianapolis
|
||||||
|
America/Indiana/Tell_City
|
||||||
|
America/Indiana/Vevay
|
||||||
|
America/Indiana/Vincennes
|
||||||
|
America/Indiana/Winamac
|
||||||
|
America/Inuvik
|
||||||
|
America/Iqaluit
|
||||||
|
America/Jamaica
|
||||||
|
America/Jujuy
|
||||||
|
America/Juneau
|
||||||
|
America/Kentucky/Louisville
|
||||||
|
America/Kentucky/Monticello
|
||||||
|
America/Knox_IN
|
||||||
|
America/Kralendijk
|
||||||
|
America/La_Paz
|
||||||
|
America/Lima
|
||||||
|
America/Los_Angeles
|
||||||
|
America/Louisville
|
||||||
|
America/Lower_Princes
|
||||||
|
America/Maceio
|
||||||
|
America/Managua
|
||||||
|
America/Manaus
|
||||||
|
America/Marigot
|
||||||
|
America/Martinique
|
||||||
|
America/Matamoros
|
||||||
|
America/Mazatlan
|
||||||
|
America/Mendoza
|
||||||
|
America/Menominee
|
||||||
|
America/Merida
|
||||||
|
America/Metlakatla
|
||||||
|
America/Mexico_City
|
||||||
|
America/Miquelon
|
||||||
|
America/Moncton
|
||||||
|
America/Monterrey
|
||||||
|
America/Montevideo
|
||||||
|
America/Montreal
|
||||||
|
America/Montserrat
|
||||||
|
America/Nassau
|
||||||
|
America/New_York
|
||||||
|
America/Nipigon
|
||||||
|
America/Nome
|
||||||
|
America/Noronha
|
||||||
|
America/North_Dakota/Beulah
|
||||||
|
America/North_Dakota/Center
|
||||||
|
America/North_Dakota/New_Salem
|
||||||
|
America/Ojinaga
|
||||||
|
America/Panama
|
||||||
|
America/Pangnirtung
|
||||||
|
America/Paramaribo
|
||||||
|
America/Phoenix
|
||||||
|
America/Port-au-Prince
|
||||||
|
America/Porto_Acre
|
||||||
|
America/Port_of_Spain
|
||||||
|
America/Porto_Velho
|
||||||
|
America/Puerto_Rico
|
||||||
|
America/Punta_Arenas
|
||||||
|
America/Rainy_River
|
||||||
|
America/Rankin_Inlet
|
||||||
|
America/Recife
|
||||||
|
America/Regina
|
||||||
|
America/Resolute
|
||||||
|
America/Rio_Branco
|
||||||
|
America/Rosario
|
||||||
|
America/Santa_Isabel
|
||||||
|
America/Santarem
|
||||||
|
America/Santiago
|
||||||
|
America/Santo_Domingo
|
||||||
|
America/Sao_Paulo
|
||||||
|
America/Scoresbysund
|
||||||
|
America/Shiprock
|
||||||
|
America/Sitka
|
||||||
|
America/St_Barthelemy
|
||||||
|
America/St_Johns
|
||||||
|
America/St_Kitts
|
||||||
|
America/St_Lucia
|
||||||
|
America/St_Thomas
|
||||||
|
America/St_Vincent
|
||||||
|
America/Swift_Current
|
||||||
|
America/Tegucigalpa
|
||||||
|
America/Thule
|
||||||
|
America/Thunder_Bay
|
||||||
|
America/Tijuana
|
||||||
|
America/Toronto
|
||||||
|
America/Tortola
|
||||||
|
America/Vancouver
|
||||||
|
America/Virgin
|
||||||
|
America/Whitehorse
|
||||||
|
America/Winnipeg
|
||||||
|
America/Yakutat
|
||||||
|
America/Yellowknife
|
||||||
|
Antarctica/Casey
|
||||||
|
Antarctica/Davis
|
||||||
|
Antarctica/DumontDUrville
|
||||||
|
Antarctica/Macquarie
|
||||||
|
Antarctica/Mawson
|
||||||
|
Antarctica/McMurdo
|
||||||
|
Antarctica/Palmer
|
||||||
|
Antarctica/Rothera
|
||||||
|
Antarctica/South_Pole
|
||||||
|
Antarctica/Syowa
|
||||||
|
Antarctica/Troll
|
||||||
|
Antarctica/Vostok
|
||||||
|
Arctic/Longyearbyen
|
||||||
|
Asia/Aden
|
||||||
|
Asia/Almaty
|
||||||
|
Asia/Amman
|
||||||
|
Asia/Anadyr
|
||||||
|
Asia/Aqtau
|
||||||
|
Asia/Aqtobe
|
||||||
|
Asia/Ashgabat
|
||||||
|
Asia/Ashkhabad
|
||||||
|
Asia/Atyrau
|
||||||
|
Asia/Baghdad
|
||||||
|
Asia/Bahrain
|
||||||
|
Asia/Baku
|
||||||
|
Asia/Bangkok
|
||||||
|
Asia/Barnaul
|
||||||
|
Asia/Beirut
|
||||||
|
Asia/Bishkek
|
||||||
|
Asia/Brunei
|
||||||
|
Asia/Calcutta
|
||||||
|
Asia/Chita
|
||||||
|
Asia/Choibalsan
|
||||||
|
Asia/Chongqing
|
||||||
|
Asia/Chungking
|
||||||
|
Asia/Colombo
|
||||||
|
Asia/Dacca
|
||||||
|
Asia/Damascus
|
||||||
|
Asia/Dhaka
|
||||||
|
Asia/Dili
|
||||||
|
Asia/Dubai
|
||||||
|
Asia/Dushanbe
|
||||||
|
Asia/Famagusta
|
||||||
|
Asia/Gaza
|
||||||
|
Asia/Harbin
|
||||||
|
Asia/Hebron
|
||||||
|
Asia/Ho_Chi_Minh
|
||||||
|
Asia/Hong_Kong
|
||||||
|
Asia/Hovd
|
||||||
|
Asia/Irkutsk
|
||||||
|
Asia/Istanbul
|
||||||
|
Asia/Jakarta
|
||||||
|
Asia/Jayapura
|
||||||
|
Asia/Jerusalem
|
||||||
|
Asia/Kabul
|
||||||
|
Asia/Kamchatka
|
||||||
|
Asia/Karachi
|
||||||
|
Asia/Kashgar
|
||||||
|
Asia/Kathmandu
|
||||||
|
Asia/Katmandu
|
||||||
|
Asia/Khandyga
|
||||||
|
Asia/Kolkata
|
||||||
|
Asia/Krasnoyarsk
|
||||||
|
Asia/Kuala_Lumpur
|
||||||
|
Asia/Kuching
|
||||||
|
Asia/Kuwait
|
||||||
|
Asia/Macao
|
||||||
|
Asia/Macau
|
||||||
|
Asia/Magadan
|
||||||
|
Asia/Makassar
|
||||||
|
Asia/Manila
|
||||||
|
Asia/Muscat
|
||||||
|
Asia/Nicosia
|
||||||
|
Asia/Novokuznetsk
|
||||||
|
Asia/Novosibirsk
|
||||||
|
Asia/Omsk
|
||||||
|
Asia/Oral
|
||||||
|
Asia/Phnom_Penh
|
||||||
|
Asia/Pontianak
|
||||||
|
Asia/Pyongyang
|
||||||
|
Asia/Qatar
|
||||||
|
Asia/Qostanay
|
||||||
|
Asia/Qyzylorda
|
||||||
|
Asia/Rangoon
|
||||||
|
Asia/Riyadh
|
||||||
|
Asia/Saigon
|
||||||
|
Asia/Sakhalin
|
||||||
|
Asia/Samarkand
|
||||||
|
Asia/Seoul
|
||||||
|
Asia/Shanghai
|
||||||
|
Asia/Singapore
|
||||||
|
Asia/Srednekolymsk
|
||||||
|
Asia/Taipei
|
||||||
|
Asia/Tashkent
|
||||||
|
Asia/Tbilisi
|
||||||
|
Asia/Tehran
|
||||||
|
Asia/Tel_Aviv
|
||||||
|
Asia/Thimbu
|
||||||
|
Asia/Thimphu
|
||||||
|
Asia/Tokyo
|
||||||
|
Asia/Tomsk
|
||||||
|
Asia/Ujung_Pandang
|
||||||
|
Asia/Ulaanbaatar
|
||||||
|
Asia/Ulan_Bator
|
||||||
|
Asia/Urumqi
|
||||||
|
Asia/Ust-Nera
|
||||||
|
Asia/Vientiane
|
||||||
|
Asia/Vladivostok
|
||||||
|
Asia/Yakutsk
|
||||||
|
Asia/Yangon
|
||||||
|
Asia/Yekaterinburg
|
||||||
|
Asia/Yerevan
|
||||||
|
Atlantic/Azores
|
||||||
|
Atlantic/Bermuda
|
||||||
|
Atlantic/Canary
|
||||||
|
Atlantic/Cape_Verde
|
||||||
|
Atlantic/Faeroe
|
||||||
|
Atlantic/Faroe
|
||||||
|
Atlantic/Jan_Mayen
|
||||||
|
Atlantic/Madeira
|
||||||
|
Atlantic/Reykjavik
|
||||||
|
Atlantic/South_Georgia
|
||||||
|
Atlantic/Stanley
|
||||||
|
Atlantic/St_Helena
|
||||||
|
Australia/ACT
|
||||||
|
Australia/Adelaide
|
||||||
|
Australia/Brisbane
|
||||||
|
Australia/Broken_Hill
|
||||||
|
Australia/Canberra
|
||||||
|
Australia/Currie
|
||||||
|
Australia/Darwin
|
||||||
|
Australia/Eucla
|
||||||
|
Australia/Hobart
|
||||||
|
Australia/LHI
|
||||||
|
Australia/Lindeman
|
||||||
|
Australia/Lord_Howe
|
||||||
|
Australia/Melbourne
|
||||||
|
Australia/North
|
||||||
|
Australia/NSW
|
||||||
|
Australia/Perth
|
||||||
|
Australia/Queensland
|
||||||
|
Australia/South
|
||||||
|
Australia/Sydney
|
||||||
|
Australia/Tasmania
|
||||||
|
Australia/Victoria
|
||||||
|
Australia/West
|
||||||
|
Australia/Yancowinna
|
||||||
|
Brazil/Acre
|
||||||
|
Brazil/DeNoronha
|
||||||
|
Brazil/East
|
||||||
|
Brazil/West
|
||||||
|
Canada/Atlantic
|
||||||
|
Canada/Central
|
||||||
|
Canada/Eastern
|
||||||
|
Canada/Mountain
|
||||||
|
Canada/Newfoundland
|
||||||
|
Canada/Pacific
|
||||||
|
Canada/Saskatchewan
|
||||||
|
Canada/Yukon
|
||||||
|
CET
|
||||||
|
Chile/Continental
|
||||||
|
Chile/EasterIsland
|
||||||
|
CST6CDT
|
||||||
|
Cuba
|
||||||
|
EET
|
||||||
|
Egypt
|
||||||
|
Eire
|
||||||
|
EST
|
||||||
|
EST5EDT
|
||||||
|
Etc/GMT
|
||||||
|
Etc/Greenwich
|
||||||
|
Etc/UCT
|
||||||
|
Etc/Universal
|
||||||
|
Etc/UTC
|
||||||
|
Etc/Zulu
|
||||||
|
Europe/Amsterdam
|
||||||
|
Europe/Andorra
|
||||||
|
Europe/Astrakhan
|
||||||
|
Europe/Athens
|
||||||
|
Europe/Belfast
|
||||||
|
Europe/Belgrade
|
||||||
|
Europe/Berlin
|
||||||
|
Europe/Bratislava
|
||||||
|
Europe/Brussels
|
||||||
|
Europe/Bucharest
|
||||||
|
Europe/Budapest
|
||||||
|
Europe/Busingen
|
||||||
|
Europe/Chisinau
|
||||||
|
Europe/Copenhagen
|
||||||
|
Europe/Dublin
|
||||||
|
Europe/Gibraltar
|
||||||
|
Europe/Guernsey
|
||||||
|
Europe/Helsinki
|
||||||
|
Europe/Isle_of_Man
|
||||||
|
Europe/Istanbul
|
||||||
|
Europe/Jersey
|
||||||
|
Europe/Kaliningrad
|
||||||
|
Europe/Kiev
|
||||||
|
Europe/Kirov
|
||||||
|
Europe/Lisbon
|
||||||
|
Europe/Ljubljana
|
||||||
|
Europe/London
|
||||||
|
Europe/Luxembourg
|
||||||
|
Europe/Madrid
|
||||||
|
Europe/Malta
|
||||||
|
Europe/Mariehamn
|
||||||
|
Europe/Minsk
|
||||||
|
Europe/Monaco
|
||||||
|
Europe/Moscow
|
||||||
|
Europe/Nicosia
|
||||||
|
Europe/Oslo
|
||||||
|
Europe/Paris
|
||||||
|
Europe/Podgorica
|
||||||
|
Europe/Prague
|
||||||
|
Europe/Riga
|
||||||
|
Europe/Rome
|
||||||
|
Europe/Samara
|
||||||
|
Europe/San_Marino
|
||||||
|
Europe/Sarajevo
|
||||||
|
Europe/Saratov
|
||||||
|
Europe/Simferopol
|
||||||
|
Europe/Skopje
|
||||||
|
Europe/Sofia
|
||||||
|
Europe/Stockholm
|
||||||
|
Europe/Tallinn
|
||||||
|
Europe/Tirane
|
||||||
|
Europe/Tiraspol
|
||||||
|
Europe/Ulyanovsk
|
||||||
|
Europe/Uzhgorod
|
||||||
|
Europe/Vaduz
|
||||||
|
Europe/Vatican
|
||||||
|
Europe/Vienna
|
||||||
|
Europe/Vilnius
|
||||||
|
Europe/Volgograd
|
||||||
|
Europe/Warsaw
|
||||||
|
Europe/Zagreb
|
||||||
|
Europe/Zaporozhye
|
||||||
|
Europe/Zurich
|
||||||
|
Factory
|
||||||
|
GB
|
||||||
|
GB-Eire
|
||||||
|
GMT
|
||||||
|
GMT0
|
||||||
|
Greenwich
|
||||||
|
Hongkong
|
||||||
|
HST
|
||||||
|
Iceland
|
||||||
|
Indian/Antananarivo
|
||||||
|
Indian/Chagos
|
||||||
|
Indian/Christmas
|
||||||
|
Indian/Cocos
|
||||||
|
Indian/Comoro
|
||||||
|
Indian/Kerguelen
|
||||||
|
Indian/Mahe
|
||||||
|
Indian/Maldives
|
||||||
|
Indian/Mauritius
|
||||||
|
Indian/Mayotte
|
||||||
|
Indian/Reunion
|
||||||
|
Iran
|
||||||
|
Israel
|
||||||
|
Jamaica
|
||||||
|
Japan
|
||||||
|
Kwajalein
|
||||||
|
Libya
|
||||||
|
MET
|
||||||
|
Mexico/BajaNorte
|
||||||
|
Mexico/BajaSur
|
||||||
|
Mexico/General
|
||||||
|
MST
|
||||||
|
MST7MDT
|
||||||
|
Navajo
|
||||||
|
NZ
|
||||||
|
NZ-CHAT
|
||||||
|
Pacific/Apia
|
||||||
|
Pacific/Auckland
|
||||||
|
Pacific/Bougainville
|
||||||
|
Pacific/Chatham
|
||||||
|
Pacific/Chuuk
|
||||||
|
Pacific/Easter
|
||||||
|
Pacific/Efate
|
||||||
|
Pacific/Enderbury
|
||||||
|
Pacific/Fakaofo
|
||||||
|
Pacific/Fiji
|
||||||
|
Pacific/Funafuti
|
||||||
|
Pacific/Galapagos
|
||||||
|
Pacific/Gambier
|
||||||
|
Pacific/Guadalcanal
|
||||||
|
Pacific/Guam
|
||||||
|
Pacific/Honolulu
|
||||||
|
Pacific/Johnston
|
||||||
|
Pacific/Kiritimati
|
||||||
|
Pacific/Kosrae
|
||||||
|
Pacific/Kwajalein
|
||||||
|
Pacific/Majuro
|
||||||
|
Pacific/Marquesas
|
||||||
|
Pacific/Midway
|
||||||
|
Pacific/Nauru
|
||||||
|
Pacific/Niue
|
||||||
|
Pacific/Norfolk
|
||||||
|
Pacific/Noumea
|
||||||
|
Pacific/Pago_Pago
|
||||||
|
Pacific/Palau
|
||||||
|
Pacific/Pitcairn
|
||||||
|
Pacific/Pohnpei
|
||||||
|
Pacific/Ponape
|
||||||
|
Pacific/Port_Moresby
|
||||||
|
Pacific/Rarotonga
|
||||||
|
Pacific/Saipan
|
||||||
|
Pacific/Samoa
|
||||||
|
Pacific/Tahiti
|
||||||
|
Pacific/Tarawa
|
||||||
|
Pacific/Tongatapu
|
||||||
|
Pacific/Truk
|
||||||
|
Pacific/Wake
|
||||||
|
Pacific/Wallis
|
||||||
|
Pacific/Yap
|
||||||
|
Poland
|
||||||
|
Portugal
|
||||||
|
PRC
|
||||||
|
PST8PDT
|
||||||
|
ROC
|
||||||
|
ROK
|
||||||
|
Singapore
|
||||||
|
Turkey
|
||||||
|
UCT
|
||||||
|
Universal
|
||||||
|
US/Alaska
|
||||||
|
US/Aleutian
|
||||||
|
US/Arizona
|
||||||
|
US/Central
|
||||||
|
US/Eastern
|
||||||
|
US/East-Indiana
|
||||||
|
US/Hawaii
|
||||||
|
US/Indiana-Starke
|
||||||
|
US/Michigan
|
||||||
|
US/Mountain
|
||||||
|
US/Pacific
|
||||||
|
US/Samoa
|
||||||
|
UTC
|
||||||
|
WET
|
||||||
|
W-SU
|
||||||
|
Zulu)
|
||||||
|
|
||||||
|
set(TZDIR ${LIBRARY_DIR}/testdata/zoneinfo)
|
||||||
|
set(TZ_OBJS)
|
||||||
|
|
||||||
|
foreach(TIMEZONE ${TIMEZONES})
|
||||||
|
string(REPLACE "/" "_" TIMEZONE_ID ${TIMEZONE})
|
||||||
|
set(TZ_OBJ ${TIMEZONE_ID}.o)
|
||||||
|
set(TZ_OBJS ${TZ_OBJS} ${TZ_OBJ})
|
||||||
|
|
||||||
|
# https://stackoverflow.com/questions/14776463/compile-and-add-an-object-file-from-a-binary-with-cmake
|
||||||
|
add_custom_command(OUTPUT ${TZ_OBJ}
|
||||||
|
COMMAND cd ${TZDIR} && ${OBJCOPY_PATH} -I binary -O elf64-x86-64 -B i386 ${TIMEZONE} ${CMAKE_CURRENT_BINARY_DIR}/${TZ_OBJ}
|
||||||
|
COMMAND ${OBJCOPY_PATH} --rename-section .data=.rodata,alloc,load,readonly,data,contents
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/${TZ_OBJ} ${CMAKE_CURRENT_BINARY_DIR}/${TZ_OBJ})
|
||||||
|
|
||||||
|
set_source_files_properties(${TZ_OBJ} PROPERTIES EXTERNAL_OBJECT true GENERATED true)
|
||||||
|
endforeach(TIMEZONE)
|
||||||
|
|
||||||
|
add_library(tzdata STATIC ${TZ_OBJS})
|
||||||
|
set_target_properties(tzdata PROPERTIES LINKER_LANGUAGE C)
|
||||||
|
target_link_libraries(cctz -Wl,--whole-archive tzdata -Wl,--no-whole-archive) # whole-archive prevents symbols from being discarded
|
||||||
|
endif ()
|
||||||
|
|
||||||
else ()
|
else ()
|
||||||
find_library (LIBRARY_CCTZ cctz)
|
find_library (LIBRARY_CCTZ cctz)
|
||||||
find_path (INCLUDE_CCTZ NAMES cctz/civil_time.h)
|
find_path (INCLUDE_CCTZ NAMES cctz/civil_time.h)
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
cmake_minimum_required(VERSION 3.5.1)
|
cmake_minimum_required(VERSION 3.5.1)
|
||||||
|
|
||||||
|
|
||||||
set(GRPC_SOURCE_DIR ${ClickHouse_SOURCE_DIR}/contrib/grpc)
|
set(GRPC_SOURCE_DIR ${ClickHouse_SOURCE_DIR}/contrib/grpc)
|
||||||
set(GRPC_INCLUDE_DIR ${GRPC_SOURCE_DIR}/include/)
|
set(GRPC_INCLUDE_DIR ${GRPC_SOURCE_DIR}/include/)
|
||||||
set(GRPC_BINARY_DIR ${ClickHouse_BINARY_DIR}/contrib/grpc)
|
set(GRPC_BINARY_DIR ${ClickHouse_BINARY_DIR}/contrib/grpc)
|
||||||
|
|
||||||
if(UNIX)
|
if(UNIX)
|
||||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
||||||
set(_gRPC_PLATFORM_LINUX ON)
|
set(_gRPC_PLATFORM_LINUX ON)
|
||||||
@ -56,29 +56,19 @@ endif()
|
|||||||
|
|
||||||
# protobuf.cmake
|
# protobuf.cmake
|
||||||
set(PROTOBUF_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../protobuf)
|
set(PROTOBUF_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../protobuf)
|
||||||
# if(NOT protobuf_BUILD_TESTS)
|
|
||||||
# set(protobuf_BUILD_TESTS OFF CACHE BOOL "Build protobuf tests")
|
|
||||||
# endif()
|
|
||||||
set(protobuf_BUILD_TESTS OFF CACHE BOOL "Build protobuf tests")
|
set(protobuf_BUILD_TESTS OFF CACHE BOOL "Build protobuf tests")
|
||||||
if(NOT protobuf_WITH_ZLIB)
|
if(NOT protobuf_WITH_ZLIB)
|
||||||
set(protobuf_WITH_ZLIB OFF CACHE BOOL "Build protobuf with zlib.")
|
set(protobuf_WITH_ZLIB OFF CACHE BOOL "Build protobuf with zlib.")
|
||||||
endif()
|
endif()
|
||||||
set(protobuf_MSVC_STATIC_RUNTIME OFF CACHE BOOL "Link static runtime libraries")
|
set(protobuf_MSVC_STATIC_RUNTIME OFF CACHE BOOL "Link static runtime libraries")
|
||||||
if(NOT USE_INTERNAL_PROTOBUF_LIBRARY)
|
|
||||||
add_subdirectory(${PROTOBUF_ROOT_DIR}/cmake ${GRPC_BINARY_DIR}/third_party/protobuf)
|
set(_gRPC_PROTOBUF_LIBRARIES libprotobuf)
|
||||||
endif()
|
|
||||||
if(TARGET ${_gRPC_PROTOBUF_LIBRARY_NAME})
|
|
||||||
set(_gRPC_PROTOBUF_LIBRARIES ${_gRPC_PROTOBUF_LIBRARY_NAME})
|
|
||||||
endif()
|
|
||||||
if(TARGET libprotoc)
|
|
||||||
set(_gRPC_PROTOBUF_PROTOC_LIBRARIES libprotoc)
|
set(_gRPC_PROTOBUF_PROTOC_LIBRARIES libprotoc)
|
||||||
endif()
|
|
||||||
if(TARGET protoc)
|
|
||||||
set(_gRPC_PROTOBUF_PROTOC protoc)
|
set(_gRPC_PROTOBUF_PROTOC protoc)
|
||||||
set(_gRPC_PROTOBUF_PROTOC_EXECUTABLE $<TARGET_FILE:protoc>)
|
set(_gRPC_PROTOBUF_PROTOC_EXECUTABLE $<TARGET_FILE:protoc>)
|
||||||
endif()
|
set(_gRPC_PROTOBUF_INCLUDE_DIR "${PROTOBUF_ROOT_DIR}/src")
|
||||||
# For well-known .proto files distributed with protobuf
|
|
||||||
set(_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR "${PROTOBUF_ROOT_DIR}/src")
|
|
||||||
if(gRPC_INSTALL)
|
if(gRPC_INSTALL)
|
||||||
message(WARNING "gRPC_INSTALL will be forced to FALSE because gRPC_PROTOBUF_PROVIDER is \"module\"")
|
message(WARNING "gRPC_INSTALL will be forced to FALSE because gRPC_PROTOBUF_PROVIDER is \"module\"")
|
||||||
set(gRPC_INSTALL FALSE)
|
set(gRPC_INSTALL FALSE)
|
||||||
@ -98,12 +88,13 @@ set(_gRPC_UPB_GRPC_GENERATED_DIR "${GRPC_SOURCE_DIR}/src/core/ext/upb-generated"
|
|||||||
set(_gRPC_UPB_LIBRARIES upb)
|
set(_gRPC_UPB_LIBRARIES upb)
|
||||||
|
|
||||||
# zlib.cmake
|
# zlib.cmake
|
||||||
set(ZLIB_ROOT_DIR ${GRPC_SOURCE_DIR}/third_party/zlib-ng)
|
set(ZLIB_ROOT_DIR ${GRPC_SOURCE_DIR}/../zlib-ng)
|
||||||
include_directories("${ZLIB_ROOT_DIR}")
|
include_directories("${ZLIB_ROOT_DIR}")
|
||||||
# add_subdirectory(${ZLIB_ROOT_DIR} ${ZLIB_ROOT_DIR})
|
## add_subdirectory(${ZLIB_ROOT_DIR} ${ZLIB_ROOT_DIR})
|
||||||
|
if(TARGET zlibstatic)
|
||||||
set(_gRPC_ZLIB_LIBRARIES zlibstatic)
|
set(_gRPC_ZLIB_LIBRARIES zlibstatic)
|
||||||
set(_gRPC_ZLIB_INCLUDE_DIR "${ZLIB_ROOT_DIR}")
|
set(_gRPC_ZLIB_INCLUDE_DIR "${ZLIB_ROOT_DIR}" "${GRPC_SOURCE_DIR}/third_party/zlib")
|
||||||
|
endif()
|
||||||
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||||
@ -134,6 +125,7 @@ target_include_directories(address_sorting
|
|||||||
)
|
)
|
||||||
target_link_libraries(address_sorting
|
target_link_libraries(address_sorting
|
||||||
${_gRPC_BASELIB_LIBRARIES}
|
${_gRPC_BASELIB_LIBRARIES}
|
||||||
|
${_gRPC_PROTOBUF_LIBRARIES}
|
||||||
${_gRPC_ALLTARGETS_LIBRARIES}
|
${_gRPC_ALLTARGETS_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -194,6 +186,7 @@ target_include_directories(gpr
|
|||||||
)
|
)
|
||||||
target_link_libraries(gpr
|
target_link_libraries(gpr
|
||||||
${_gRPC_ALLTARGETS_LIBRARIES}
|
${_gRPC_ALLTARGETS_LIBRARIES}
|
||||||
|
${_gRPC_PROTOBUF_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library(grpc
|
add_library(grpc
|
||||||
@ -597,6 +590,7 @@ target_link_libraries(grpc
|
|||||||
${_gRPC_CARES_LIBRARIES}
|
${_gRPC_CARES_LIBRARIES}
|
||||||
${_gRPC_ADDRESS_SORTING_LIBRARIES}
|
${_gRPC_ADDRESS_SORTING_LIBRARIES}
|
||||||
${_gRPC_ALLTARGETS_LIBRARIES}
|
${_gRPC_ALLTARGETS_LIBRARIES}
|
||||||
|
${_gRPC_PROTOBUF_LIBRARIES}
|
||||||
gpr
|
gpr
|
||||||
)
|
)
|
||||||
if (_gRPC_PLATFORM_MAC)
|
if (_gRPC_PLATFORM_MAC)
|
||||||
@ -943,6 +937,7 @@ target_link_libraries(grpc_cronet
|
|||||||
${_gRPC_CARES_LIBRARIES}
|
${_gRPC_CARES_LIBRARIES}
|
||||||
${_gRPC_ADDRESS_SORTING_LIBRARIES}
|
${_gRPC_ADDRESS_SORTING_LIBRARIES}
|
||||||
${_gRPC_ALLTARGETS_LIBRARIES}
|
${_gRPC_ALLTARGETS_LIBRARIES}
|
||||||
|
${_gRPC_PROTOBUF_LIBRARIES}
|
||||||
gpr
|
gpr
|
||||||
)
|
)
|
||||||
if (_gRPC_PLATFORM_MAC)
|
if (_gRPC_PLATFORM_MAC)
|
||||||
@ -1273,6 +1268,7 @@ target_link_libraries(grpc_unsecure
|
|||||||
${_gRPC_CARES_LIBRARIES}
|
${_gRPC_CARES_LIBRARIES}
|
||||||
${_gRPC_ADDRESS_SORTING_LIBRARIES}
|
${_gRPC_ADDRESS_SORTING_LIBRARIES}
|
||||||
${_gRPC_ALLTARGETS_LIBRARIES}
|
${_gRPC_ALLTARGETS_LIBRARIES}
|
||||||
|
${_gRPC_PROTOBUF_LIBRARIES}
|
||||||
gpr
|
gpr
|
||||||
)
|
)
|
||||||
if (_gRPC_PLATFORM_MAC)
|
if (_gRPC_PLATFORM_MAC)
|
||||||
|
@ -51,11 +51,11 @@ if (ENABLE_JEMALLOC)
|
|||||||
|
|
||||||
add_library(jemalloc ${SRCS})
|
add_library(jemalloc ${SRCS})
|
||||||
target_include_directories(jemalloc PRIVATE ${LIBRARY_DIR}/include)
|
target_include_directories(jemalloc PRIVATE ${LIBRARY_DIR}/include)
|
||||||
target_include_directories(jemalloc PUBLIC include)
|
target_include_directories(jemalloc SYSTEM PUBLIC include)
|
||||||
if (ARCH_AMD64)
|
if (ARCH_AMD64)
|
||||||
target_include_directories(jemalloc PUBLIC include_linux_x86_64)
|
target_include_directories(jemalloc SYSTEM PUBLIC include_linux_x86_64)
|
||||||
elseif (ARCH_ARM)
|
elseif (ARCH_ARM)
|
||||||
target_include_directories(jemalloc PUBLIC include_linux_aarch64)
|
target_include_directories(jemalloc SYSTEM PUBLIC include_linux_aarch64)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
target_compile_definitions(jemalloc PRIVATE -DJEMALLOC_NO_PRIVATE_NAMESPACE)
|
target_compile_definitions(jemalloc PRIVATE -DJEMALLOC_NO_PRIVATE_NAMESPACE)
|
||||||
@ -69,7 +69,7 @@ if (ENABLE_JEMALLOC)
|
|||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
target_compile_options(jemalloc PUBLIC -Wno-redundant-decls)
|
target_compile_options(jemalloc PRIVATE -Wno-redundant-decls)
|
||||||
else ()
|
else ()
|
||||||
find_library(LIBRARY_JEMALLOC jemalloc)
|
find_library(LIBRARY_JEMALLOC jemalloc)
|
||||||
find_path(INCLUDE_JEMALLOC jemalloc/jemalloc.h)
|
find_path(INCLUDE_JEMALLOC jemalloc/jemalloc.h)
|
||||||
|
1
contrib/libcpuid
vendored
Submodule
1
contrib/libcpuid
vendored
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 8db3b8d2d32d22437f063ce692a1b9bb15e42d18
|
35
contrib/libcpuid-cmake/CMakeLists.txt
Normal file
35
contrib/libcpuid-cmake/CMakeLists.txt
Normal file
@ -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 SYSTEM 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 PRIVATE -Wno-reserved-id-macro)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
message (STATUS "Using cpuid")
|
||||||
|
else ()
|
||||||
|
add_library (cpuid INTERFACE)
|
||||||
|
|
||||||
|
target_compile_definitions (cpuid INTERFACE USE_CPUID=0)
|
||||||
|
endif ()
|
@ -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)
|
|
@ -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.
|
|
@ -1 +0,0 @@
|
|||||||
https://github.com/anrieff/libcpuid.git
|
|
@ -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),
|
|
||||||
|
|
@ -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 */
|
|
@ -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__ */
|
|
@ -1,2 +0,0 @@
|
|||||||
/* Version number of package */
|
|
||||||
#define VERSION "0.4.0"
|
|
@ -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 <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
/* 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 <unistd.h>
|
|
||||||
#include <mach/clock_types.h>
|
|
||||||
#include <mach/clock.h>
|
|
||||||
#include <mach/mach.h>
|
|
||||||
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 <windows.h>
|
|
||||||
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 <sys/sysinfo.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
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 <sys/types.h>
|
|
||||||
#include <sys/sysctl.h>
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
@ -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),
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user