ClickHouse tiene soporte experimental para s390x.
Compilar ClickHouse para s390x
s390x, al igual que otras plataformas, compila OpenSSL como una biblioteca estática. Si desea compilar con OpenSSL dinámico, debe pasar -DENABLE_OPENSSL_DYNAMIC=1 a CMake.
Estas instrucciones asumen que la máquina host ejecuta Linux x86_64/ARM y cuenta con todas las herramientas necesarias para compilar de forma nativa, según las instrucciones de compilación. También se asume que el host es Ubuntu 22.04, aunque las siguientes instrucciones también deberían funcionar en Ubuntu 20.04.
Además de instalar las herramientas que se usan para compilar de forma nativa, también es necesario instalar los siguientes paquetes adicionales:
apt-get mold
rustup target add s390x-unknown-linux-gnuPara compilar para s390x:
cmake -DCMAKE_TOOLCHAIN_FILE=cmake/linux/toolchain-s390x.cmake ..
ninjaEjecución
Para emular, necesitarás el binario estático de usuario de QEMU para s390x. En Ubuntu se puede instalar con:
apt-get install binfmt-support binutils-s390x-linux-gnu qemu-user-staticUna vez compilado, el binario se puede ejecutar con, por ejemplo:
qemu-s390x-static -L /usr/s390x-linux-gnu ./programs/clickhouse local --query "Select 2"
2Depuración
Instala LLDB:
apt-get install lldb-21Para depurar un ejecutable s390x, ejecute clickhouse con QEMU en modo de depuración:
qemu-s390x-static -g 31338 -L /usr/s390x-linux-gnu ./clickhouseEn otra terminal, ejecute LLDB y haga attach; reemplace <ClickHouse Parent Directory> y <build directory> por los valores correspondientes a su entorno.
lldb-15
(lldb) target create ./clickhouse
Current executable set to '/<ClickHouse Parent Directory>/ClickHouse/<build directory>/programs/clickhouse' (s390x).
(lldb) settings set target.source-map <build directory> /<ClickHouse Parent Directory>/ClickHouse
(lldb) gdb-remote 31338
Process 1 stopped
* thread #1, stop reason = signal SIGTRAP
frame #0: 0x0000004020e74cd0
-> 0x4020e74cd0: lgr %r2, %r15
0x4020e74cd4: aghi %r15, -160
0x4020e74cd8: xc 0(8,%r15), 0(%r15)
0x4020e74cde: brasl %r14, 275429939040
(lldb) b main
Breakpoint 1: 9 locations.
(lldb) c
Process 1 resuming
Process 1 stopped
* thread #1, stop reason = breakpoint 1.1
frame #0: 0x0000004005cd9fc0 clickhouse`main(argc_=1, argv_=0x0000004020e594a8) at main.cpp:450:17
447 #if !defined(FUZZING_MODE)
448 int main(int argc_, char ** argv_)
449 {
-> 450 inside_main = true;
451 SCOPE_EXIT({ inside_main = false; });
452
453 /// PHDR cache is required for query profiler to work reliablyIntegración con Visual Studio Code
- La extensión CodeLLDB es necesaria para la depuración visual.
- La extensión Command Variable puede facilitar los lanzamientos dinámicos si usa CMake Variants.
- Asegúrese de configurar el backend para que apunte a su instalación de LLVM; por ejemplo,
"lldb.library": "/usr/lib/x86_64-linux-gnu/liblldb-21.so" - Asegúrese de ejecutar el ejecutable de ClickHouse en modo de depuración antes de iniciarlo. (También es posible crear una
preLaunchTaskque lo automatice)
Configuraciones de ejemplo
cmake-variants.yaml
buildType:
default: relwithdebinfo
choices:
debug:
short: Debug
long: Emit debug information
buildType: Debug
release:
short: Release
long: Optimize generated code
buildType: Release
relwithdebinfo:
short: RelWithDebInfo
long: Release with Debug Info
buildType: RelWithDebInfo
tsan:
short: MinSizeRel
long: Minimum Size Release
buildType: MinSizeRel
toolchain:
default: default
description: Select toolchain
choices:
default:
short: x86_64
long: x86_64
s390x:
short: s390x
long: s390x
settings:
CMAKE_TOOLCHAIN_FILE: cmake/linux/toolchain-s390x.cmakelaunch.json
{
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "custom",
"name": "(lldb) Launch s390x with qemu",
"targetCreateCommands": ["target create ${command:cmake.launchTargetPath}"],
"processCreateCommands": ["gdb-remote 2159"],
"preLaunchTask": "Run ClickHouse"
}
]
}settings.json
Esto también colocaría las distintas compilaciones en subcarpetas diferentes dentro de la carpeta build.
{
"cmake.buildDirectory": "${workspaceFolder}/build/${buildKitVendor}-${buildKitVersion}-${variant:toolchain}-${variant:buildType}",
"lldb.library": "/usr/lib/x86_64-linux-gnu/liblldb-21.so"
}run-debug.sh
#! /bin/sh
echo 'Starting debugger session'
cd $1
qemu-s390x-static -g 2159 -L /usr/s390x-linux-gnu $2 $3 $4tasks.json
Define una tarea para ejecutar el ejecutable compilado en modo server dentro de una carpeta tmp junto a los binarios, usando la configuración de programs/server/config.xml.
{
"version": "2.0.0",
"tasks": [
{
"label": "Run ClickHouse",
"type": "shell",
"isBackground": true,
"command": "${workspaceFolder}/.vscode/run-debug.sh",
"args": [
"${command:cmake.launchTargetDirectory}/tmp",
"${command:cmake.launchTargetPath}",
"server",
"--config-file=${workspaceFolder}/programs/server/config.xml"
],
"problemMatcher": [
{
"pattern": [
{
"regexp": ".",
"file": 1,
"location": 2,
"message": 3
}
],
"background": {
"activeOnStart": true,
"beginsPattern": "^Starting debugger session",
"endsPattern": ".*"
}
}
]
}
]
}