mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-22 23:52:03 +00:00
Add s390x cross build instructions
This commit is contained in:
parent
62688a2aee
commit
dc0858475d
123
docs/en/development/build-cross-s390x.md
Normal file
123
docs/en/development/build-cross-s390x.md
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
---
|
||||||
|
slug: /en/development/build-cross-s390x
|
||||||
|
sidebar_position: 69
|
||||||
|
title: How to Build, Run and Debug ClickHouse on Linux for s390x (zLinux)
|
||||||
|
sidebar_label: Build on Linux for s390x (zLinux)
|
||||||
|
---
|
||||||
|
|
||||||
|
As of writing (2023/3/10) building for s390x considered to be experimental. Not all features can be enabled, has broken features and is currently under active development.
|
||||||
|
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
As s390x does not support boringSSL, it uses openSSL and has two related build options.
|
||||||
|
- By default, the s390x build will create dynamiclly link to openSSL libraries. It will build openSSL, so its not neccessary to install openSSL beforehand. This is recommended in all cases.
|
||||||
|
- Another option is to build openSSL in-tree. In this case two build options need to be supplied to cmake
|
||||||
|
```bash
|
||||||
|
-DENABLE_OPENSSL_DYNAMIC=0 -DENABLE_OPENSSL=1
|
||||||
|
```
|
||||||
|
|
||||||
|
These instructions assume that the host machine is x86_64 and has all the tooling required to build natively base based on the [Build instructions](../development/build.md). It also assumes that the host is Ubuntu 22.04 but should work on Ubuntu 20.04.
|
||||||
|
|
||||||
|
In addition to installing the tooling used to build natively the following additional pacakges need to be installed:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt-get install binutils-s390x-linux-gnu libc6-dev-s390x-cross gcc-s390x-linux-gnu binfmt-support qemu-user-static
|
||||||
|
```
|
||||||
|
|
||||||
|
If you wish to cross compile rust code..
|
||||||
|
```bash
|
||||||
|
rustup target add s390x-unknown-linux-gnu
|
||||||
|
```
|
||||||
|
|
||||||
|
To build for s390x,
|
||||||
|
```bash
|
||||||
|
cmake -DCMAKE_TOOLCHAIN_FILE=cmake/linux/toolchain-s390x.cmake ..
|
||||||
|
ninja
|
||||||
|
```
|
||||||
|
|
||||||
|
## Running
|
||||||
|
|
||||||
|
Once built, the binary can be run with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
qemu-s390x-static -L /usr/s390x-linux-gnu ./clickhouse
|
||||||
|
```
|
||||||
|
|
||||||
|
## Debugging
|
||||||
|
|
||||||
|
Install lldb:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt-get install lldb-15
|
||||||
|
```
|
||||||
|
|
||||||
|
To Debug a s390x executable run clickhouse using qemu debug mode:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
qemu-s390x-static -g 31338 -L /usr/s390x-linux-gnu ./clickhouse
|
||||||
|
```
|
||||||
|
|
||||||
|
In antother shell run lldb and attach, replace `<Clickhouse Parent Directory>` and `<build directory>` with the values corresponding to your environment.
|
||||||
|
```bash
|
||||||
|
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 reliably
|
||||||
|
```
|
||||||
|
|
||||||
|
## Visual Studio Code integration
|
||||||
|
|
||||||
|
- (CodeLLDB extension)[https://github.com/vadimcn/vscode-lldb] is required for visual debugging, (Command Variable)[https://github.com/rioj7/command-variable] extension can help dynamic lauches if using cmake variants.
|
||||||
|
- Make sure to set the backend to your llvm installation ex. `"lldb.library": "/usr/lib/x86_64-linux-gnu/liblldb-15.so"`
|
||||||
|
- Launcher:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Debug",
|
||||||
|
"type": "lldb",
|
||||||
|
"request": "custom",
|
||||||
|
"targetCreateCommands": ["target create ${command:cmake.launchTargetDirectory}/clickhouse"],
|
||||||
|
"processCreateCommands": ["settings set target.source-map ${input:targetdir} ${workspaceFolder}", "gdb-remote 31338"],
|
||||||
|
"sourceMap": { "${input:targetdir}": "${workspaceFolder}" },
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"id": "targetdir",
|
||||||
|
"type": "command",
|
||||||
|
"command": "extension.commandvariable.transform",
|
||||||
|
"args": {
|
||||||
|
"text": "${command:cmake.launchTargetDirectory}",
|
||||||
|
"find": ".*/([^/]+)/[^/]+$",
|
||||||
|
"replace": "$1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
- Make sure to run the clickhouse executable in debug mode prior to launch. (It is possible to create a preLaunchTask that automates this)
|
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
slug: /en/development/contrib
|
slug: /en/development/contrib
|
||||||
sidebar_position: 71
|
sidebar_position: 72
|
||||||
sidebar_label: Third-Party Libraries
|
sidebar_label: Third-Party Libraries
|
||||||
description: A list of third-party libraries used
|
description: A list of third-party libraries used
|
||||||
---
|
---
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
slug: /en/development/style
|
slug: /en/development/style
|
||||||
sidebar_position: 69
|
sidebar_position: 70
|
||||||
sidebar_label: C++ Guide
|
sidebar_label: C++ Guide
|
||||||
description: A list of recommendations regarding coding style, naming convention, formatting and more
|
description: A list of recommendations regarding coding style, naming convention, formatting and more
|
||||||
---
|
---
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
slug: /en/development/tests
|
slug: /en/development/tests
|
||||||
sidebar_position: 70
|
sidebar_position: 71
|
||||||
sidebar_label: Testing
|
sidebar_label: Testing
|
||||||
title: ClickHouse Testing
|
title: ClickHouse Testing
|
||||||
description: Most of ClickHouse features can be tested with functional tests and they are mandatory to use for every change in ClickHouse code that can be tested that way.
|
description: Most of ClickHouse features can be tested with functional tests and they are mandatory to use for every change in ClickHouse code that can be tested that way.
|
||||||
|
Loading…
Reference in New Issue
Block a user