mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 15:12:02 +00:00
Merge pull request #40999 from ClickHouse/sse2-special-build
Add special x86-SSE2-only build
This commit is contained in:
commit
9d4de0cbaa
48
.github/workflows/master.yml
vendored
48
.github/workflows/master.yml
vendored
@ -923,6 +923,53 @@ jobs:
|
|||||||
# shellcheck disable=SC2046
|
# shellcheck disable=SC2046
|
||||||
docker rm -f $(docker ps -a -q) ||:
|
docker rm -f $(docker ps -a -q) ||:
|
||||||
sudo rm -fr "$TEMP_PATH" "$CACHES_PATH"
|
sudo rm -fr "$TEMP_PATH" "$CACHES_PATH"
|
||||||
|
BuilderBinAmd64SSE2:
|
||||||
|
needs: [DockerHubPush]
|
||||||
|
runs-on: [self-hosted, builder]
|
||||||
|
steps:
|
||||||
|
- name: Set envs
|
||||||
|
run: |
|
||||||
|
cat >> "$GITHUB_ENV" << 'EOF'
|
||||||
|
TEMP_PATH=${{runner.temp}}/build_check
|
||||||
|
IMAGES_PATH=${{runner.temp}}/images_path
|
||||||
|
REPO_COPY=${{runner.temp}}/build_check/ClickHouse
|
||||||
|
CACHES_PATH=${{runner.temp}}/../ccaches
|
||||||
|
BUILD_NAME=binary_amd64sse2
|
||||||
|
EOF
|
||||||
|
- name: Download changed images
|
||||||
|
uses: actions/download-artifact@v2
|
||||||
|
with:
|
||||||
|
name: changed_images
|
||||||
|
path: ${{ env.IMAGES_PATH }}
|
||||||
|
- name: Clear repository
|
||||||
|
run: |
|
||||||
|
sudo rm -fr "$GITHUB_WORKSPACE" && mkdir "$GITHUB_WORKSPACE"
|
||||||
|
- name: Check out repository code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0 # otherwise we will have no info about contributors
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
git -C "$GITHUB_WORKSPACE" submodule sync --recursive
|
||||||
|
git -C "$GITHUB_WORKSPACE" submodule update --depth=1 --recursive --init --jobs=10
|
||||||
|
sudo rm -fr "$TEMP_PATH"
|
||||||
|
mkdir -p "$TEMP_PATH"
|
||||||
|
cp -r "$GITHUB_WORKSPACE" "$TEMP_PATH"
|
||||||
|
cd "$REPO_COPY/tests/ci" && python3 build_check.py "$BUILD_NAME"
|
||||||
|
- name: Upload build URLs to artifacts
|
||||||
|
if: ${{ success() || failure() }}
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: ${{ env.BUILD_URLS }}
|
||||||
|
path: ${{ env.TEMP_PATH }}/${{ env.BUILD_URLS }}.json
|
||||||
|
- name: Cleanup
|
||||||
|
if: always()
|
||||||
|
run: |
|
||||||
|
# shellcheck disable=SC2046
|
||||||
|
docker kill $(docker ps -q) ||:
|
||||||
|
# shellcheck disable=SC2046
|
||||||
|
docker rm -f $(docker ps -a -q) ||:
|
||||||
|
sudo rm -fr "$TEMP_PATH" "$CACHES_PATH"
|
||||||
############################################################################################
|
############################################################################################
|
||||||
##################################### Docker images #######################################
|
##################################### Docker images #######################################
|
||||||
############################################################################################
|
############################################################################################
|
||||||
@ -1011,6 +1058,7 @@ jobs:
|
|||||||
- BuilderBinFreeBSD
|
- BuilderBinFreeBSD
|
||||||
# - BuilderBinGCC
|
# - BuilderBinGCC
|
||||||
- BuilderBinPPC64
|
- BuilderBinPPC64
|
||||||
|
- BuilderBinAmd64SSE2
|
||||||
- BuilderBinClangTidy
|
- BuilderBinClangTidy
|
||||||
- BuilderDebShared
|
- BuilderDebShared
|
||||||
runs-on: [self-hosted, style-checker]
|
runs-on: [self-hosted, style-checker]
|
||||||
|
46
.github/workflows/pull_request.yml
vendored
46
.github/workflows/pull_request.yml
vendored
@ -935,6 +935,51 @@ jobs:
|
|||||||
# shellcheck disable=SC2046
|
# shellcheck disable=SC2046
|
||||||
docker rm -f $(docker ps -a -q) ||:
|
docker rm -f $(docker ps -a -q) ||:
|
||||||
sudo rm -fr "$TEMP_PATH" "$CACHES_PATH"
|
sudo rm -fr "$TEMP_PATH" "$CACHES_PATH"
|
||||||
|
BuilderBinAmd64SSE2:
|
||||||
|
needs: [DockerHubPush, FastTest, StyleCheck]
|
||||||
|
runs-on: [self-hosted, builder]
|
||||||
|
steps:
|
||||||
|
- name: Set envs
|
||||||
|
run: |
|
||||||
|
cat >> "$GITHUB_ENV" << 'EOF'
|
||||||
|
TEMP_PATH=${{runner.temp}}/build_check
|
||||||
|
IMAGES_PATH=${{runner.temp}}/images_path
|
||||||
|
REPO_COPY=${{runner.temp}}/build_check/ClickHouse
|
||||||
|
CACHES_PATH=${{runner.temp}}/../ccaches
|
||||||
|
BUILD_NAME=binary_amd64sse2
|
||||||
|
EOF
|
||||||
|
- name: Download changed images
|
||||||
|
uses: actions/download-artifact@v2
|
||||||
|
with:
|
||||||
|
name: changed_images
|
||||||
|
path: ${{ env.IMAGES_PATH }}
|
||||||
|
- name: Clear repository
|
||||||
|
run: |
|
||||||
|
sudo rm -fr "$GITHUB_WORKSPACE" && mkdir "$GITHUB_WORKSPACE"
|
||||||
|
- name: Check out repository code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
git -C "$GITHUB_WORKSPACE" submodule sync --recursive
|
||||||
|
git -C "$GITHUB_WORKSPACE" submodule update --depth=1 --recursive --init --jobs=10
|
||||||
|
sudo rm -fr "$TEMP_PATH"
|
||||||
|
mkdir -p "$TEMP_PATH"
|
||||||
|
cp -r "$GITHUB_WORKSPACE" "$TEMP_PATH"
|
||||||
|
cd "$REPO_COPY/tests/ci" && python3 build_check.py "$BUILD_NAME"
|
||||||
|
- name: Upload build URLs to artifacts
|
||||||
|
if: ${{ success() || failure() }}
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: ${{ env.BUILD_URLS }}
|
||||||
|
path: ${{ env.TEMP_PATH }}/${{ env.BUILD_URLS }}.json
|
||||||
|
- name: Cleanup
|
||||||
|
if: always()
|
||||||
|
run: |
|
||||||
|
# shellcheck disable=SC2046
|
||||||
|
docker kill $(docker ps -q) ||:
|
||||||
|
# shellcheck disable=SC2046
|
||||||
|
docker rm -f $(docker ps -a -q) ||:
|
||||||
|
sudo rm -fr "$TEMP_PATH" "$CACHES_PATH"
|
||||||
############################################################################################
|
############################################################################################
|
||||||
##################################### Docker images #######################################
|
##################################### Docker images #######################################
|
||||||
############################################################################################
|
############################################################################################
|
||||||
@ -1023,6 +1068,7 @@ jobs:
|
|||||||
- BuilderBinFreeBSD
|
- BuilderBinFreeBSD
|
||||||
# - BuilderBinGCC
|
# - BuilderBinGCC
|
||||||
- BuilderBinPPC64
|
- BuilderBinPPC64
|
||||||
|
- BuilderBinAmd64SSE2
|
||||||
- BuilderBinClangTidy
|
- BuilderBinClangTidy
|
||||||
- BuilderDebShared
|
- BuilderDebShared
|
||||||
runs-on: [self-hosted, style-checker]
|
runs-on: [self-hosted, style-checker]
|
||||||
|
@ -24,6 +24,23 @@ option (ENABLE_BMI "Use BMI instructions on x86_64" 0)
|
|||||||
option (ENABLE_AVX2_FOR_SPEC_OP "Use avx2 instructions for specific operations on x86_64" 0)
|
option (ENABLE_AVX2_FOR_SPEC_OP "Use avx2 instructions for specific operations on x86_64" 0)
|
||||||
option (ENABLE_AVX512_FOR_SPEC_OP "Use avx512 instructions for specific operations on x86_64" 0)
|
option (ENABLE_AVX512_FOR_SPEC_OP "Use avx512 instructions for specific operations on x86_64" 0)
|
||||||
|
|
||||||
|
# X86: Allow compilation for a SSE2-only target machine. Done by a special build in CI for embedded or very old hardware.
|
||||||
|
option (NO_SSE3_OR_HIGHER "Disable SSE3 or higher on x86_64" 0)
|
||||||
|
if (NO_SSE3_OR_HIGHER)
|
||||||
|
SET(ENABLE_SSSE3 0)
|
||||||
|
SET(ENABLE_SSE41 0)
|
||||||
|
SET(ENABLE_SSE42 0)
|
||||||
|
SET(ENABLE_PCLMULQDQ 0)
|
||||||
|
SET(ENABLE_POPCNT 0)
|
||||||
|
SET(ENABLE_AVX 0)
|
||||||
|
SET(ENABLE_AVX2 0)
|
||||||
|
SET(ENABLE_AVX512 0)
|
||||||
|
SET(ENABLE_AVX512_VBMI 0)
|
||||||
|
SET(ENABLE_BMI 0)
|
||||||
|
SET(ENABLE_AVX2_FOR_SPEC_OP 0)
|
||||||
|
SET(ENABLE_AVX512_FOR_SPEC_OP 0)
|
||||||
|
endif()
|
||||||
|
|
||||||
option (ARCH_NATIVE "Add -march=native compiler flag. This makes your binaries non-portable but more performant code may be generated. This option overrides ENABLE_* options for specific instruction set. Highly not recommended to use." 0)
|
option (ARCH_NATIVE "Add -march=native compiler flag. This makes your binaries non-portable but more performant code may be generated. This option overrides ENABLE_* options for specific instruction set. Highly not recommended to use." 0)
|
||||||
|
|
||||||
if (ARCH_NATIVE)
|
if (ARCH_NATIVE)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# We use vectorscan, a portable and API/ABI-compatible drop-in replacement for hyperscan.
|
# We use vectorscan, a portable and API/ABI-compatible drop-in replacement for hyperscan.
|
||||||
|
|
||||||
if (ARCH_AMD64)
|
if (ARCH_AMD64 AND NOT NO_SSE3_OR_HIGHER)
|
||||||
option (ENABLE_VECTORSCAN "Enable vectorscan library" ${ENABLE_LIBRARIES})
|
option (ENABLE_VECTORSCAN "Enable vectorscan library" ${ENABLE_LIBRARIES})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -130,6 +130,7 @@ def parse_env_variables(
|
|||||||
ARM_SUFFIX = "-aarch64"
|
ARM_SUFFIX = "-aarch64"
|
||||||
FREEBSD_SUFFIX = "-freebsd"
|
FREEBSD_SUFFIX = "-freebsd"
|
||||||
PPC_SUFFIX = "-ppc64le"
|
PPC_SUFFIX = "-ppc64le"
|
||||||
|
AMD64_SSE2_SUFFIX = "-amd64sse2"
|
||||||
|
|
||||||
result = []
|
result = []
|
||||||
result.append("OUTPUT_DIR=/output")
|
result.append("OUTPUT_DIR=/output")
|
||||||
@ -141,6 +142,7 @@ def parse_env_variables(
|
|||||||
is_cross_arm = compiler.endswith(ARM_SUFFIX)
|
is_cross_arm = compiler.endswith(ARM_SUFFIX)
|
||||||
is_cross_ppc = compiler.endswith(PPC_SUFFIX)
|
is_cross_ppc = compiler.endswith(PPC_SUFFIX)
|
||||||
is_cross_freebsd = compiler.endswith(FREEBSD_SUFFIX)
|
is_cross_freebsd = compiler.endswith(FREEBSD_SUFFIX)
|
||||||
|
is_amd64_sse2 = compiler.endswith(AMD64_SSE2_SUFFIX)
|
||||||
|
|
||||||
if is_cross_darwin:
|
if is_cross_darwin:
|
||||||
cc = compiler[: -len(DARWIN_SUFFIX)]
|
cc = compiler[: -len(DARWIN_SUFFIX)]
|
||||||
@ -186,6 +188,10 @@ def parse_env_variables(
|
|||||||
cmake_flags.append(
|
cmake_flags.append(
|
||||||
"-DCMAKE_TOOLCHAIN_FILE=/build/cmake/linux/toolchain-ppc64le.cmake"
|
"-DCMAKE_TOOLCHAIN_FILE=/build/cmake/linux/toolchain-ppc64le.cmake"
|
||||||
)
|
)
|
||||||
|
elif is_amd64_sse2:
|
||||||
|
cc = compiler[: -len(AMD64_SSE2_SUFFIX)]
|
||||||
|
result.append("DEB_ARCH=amd64")
|
||||||
|
cmake_flags.append("-DNO_SSE3_OR_HIGHER=1")
|
||||||
else:
|
else:
|
||||||
cc = compiler
|
cc = compiler
|
||||||
result.append("DEB_ARCH=amd64")
|
result.append("DEB_ARCH=amd64")
|
||||||
@ -339,6 +345,7 @@ if __name__ == "__main__":
|
|||||||
"clang-14-darwin-aarch64",
|
"clang-14-darwin-aarch64",
|
||||||
"clang-14-aarch64",
|
"clang-14-aarch64",
|
||||||
"clang-14-ppc64le",
|
"clang-14-ppc64le",
|
||||||
|
"clang-14-amd64sse2",
|
||||||
"clang-14-freebsd",
|
"clang-14-freebsd",
|
||||||
"gcc-11",
|
"gcc-11",
|
||||||
),
|
),
|
||||||
|
@ -42,6 +42,14 @@ endif ()
|
|||||||
# See `src/Common/TargetSpecific.h`
|
# See `src/Common/TargetSpecific.h`
|
||||||
option(ENABLE_MULTITARGET_CODE "Enable platform-dependent code" ON)
|
option(ENABLE_MULTITARGET_CODE "Enable platform-dependent code" ON)
|
||||||
|
|
||||||
|
if (NO_SSE3_OR_HIGHER)
|
||||||
|
# Optimized x86 code in DECLARE_*_SPECIFIC_CODE blocks (see `src/Common/TargetSpecific.h`) is sometimes marked FORCE_INLINE. As a
|
||||||
|
# result, its instruction set requirements (e.g. SSE4.2) leak into generic code. This is normally not a problem for standard x86 builds
|
||||||
|
# because generic code is compiled with SSE 4.2 anyways. But it breaks SSE2-only builds. Therefore disabling the multitarget code
|
||||||
|
# machinery and always use generic code. (The cleaner alternative is removing FORCE_INLINE but that impacts performance too much.)
|
||||||
|
set(ENABLE_MULTITARGET_CODE OFF)
|
||||||
|
endif()
|
||||||
|
|
||||||
if (ENABLE_MULTITARGET_CODE)
|
if (ENABLE_MULTITARGET_CODE)
|
||||||
add_definitions(-DENABLE_MULTITARGET_CODE=1)
|
add_definitions(-DENABLE_MULTITARGET_CODE=1)
|
||||||
else()
|
else()
|
||||||
|
@ -161,6 +161,16 @@ CI_CONFIG = {
|
|||||||
"tidy": "disable",
|
"tidy": "disable",
|
||||||
"with_coverage": False,
|
"with_coverage": False,
|
||||||
},
|
},
|
||||||
|
"binary_amd64sse2": {
|
||||||
|
"compiler": "clang-14-amd64sse2",
|
||||||
|
"build_type": "",
|
||||||
|
"sanitizer": "",
|
||||||
|
"package_type": "binary",
|
||||||
|
"static_binary_name": "amd64sse2",
|
||||||
|
"libraries": "static",
|
||||||
|
"tidy": "disable",
|
||||||
|
"with_coverage": False,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
"builds_report_config": {
|
"builds_report_config": {
|
||||||
"ClickHouse build check": [
|
"ClickHouse build check": [
|
||||||
@ -182,6 +192,7 @@ CI_CONFIG = {
|
|||||||
"binary_freebsd",
|
"binary_freebsd",
|
||||||
"binary_darwin_aarch64",
|
"binary_darwin_aarch64",
|
||||||
"binary_ppc64le",
|
"binary_ppc64le",
|
||||||
|
"binary_amd64sse2",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
"tests_config": {
|
"tests_config": {
|
||||||
|
Loading…
Reference in New Issue
Block a user