> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> Guide pour compiler ClickHouse depuis les sources pour l’architecture s390x

# Compiler sous Linux pour s390x (zLinux)

ClickHouse prend en charge s390x à titre expérimental.

<div id="building-clickhouse-for-s390x">
  ## Compilation de ClickHouse pour s390x
</div>

Comme les autres plateformes, s390x compile OpenSSL sous forme de bibliothèque statique. Si vous souhaitez effectuer la compilation avec une version dynamique d’OpenSSL, vous devez passer `-DENABLE_OPENSSL_DYNAMIC=1` à CMake.

Ces instructions partent du principe que la machine hôte est sous Linux x86\_64/ARM et dispose de tous les outils nécessaires pour une compilation native, comme indiqué dans les [instructions de compilation](/docs/fr/resources/develop-contribute/build/build). Elles supposent également que l’hôte utilise Ubuntu 22.04, mais les instructions suivantes devraient aussi fonctionner sur Ubuntu 20.04.

En plus d’installer les outils utilisés pour compiler nativement, vous devez installer les paquets supplémentaires suivants :

```bash theme={null}
apt-get mold
rustup target add s390x-unknown-linux-gnu
```

Pour compiler pour l’architecture s390x :

```bash theme={null}
cmake -DCMAKE_TOOLCHAIN_FILE=cmake/linux/toolchain-s390x.cmake ..
ninja
```

<div id="running">
  ## Exécution
</div>

Pour l’émulation, vous aurez besoin du binaire utilisateur statique de QEMU pour s390x. Sous Ubuntu, il peut être installé avec :

```bash theme={null}
apt-get install binfmt-support binutils-s390x-linux-gnu qemu-user-static
```

Une fois compilé, le binaire peut être lancé, par exemple, avec :

```bash theme={null}
qemu-s390x-static -L /usr/s390x-linux-gnu ./programs/clickhouse local --query "Select 2"
2
```

<div id="debugging">
  ## Débogage
</div>

Installez LLDB :

```bash theme={null}
apt-get install lldb-21
```

Pour déboguer un exécutable s390x, exécutez ClickHouse à l’aide de QEMU en mode de débogage :

```bash theme={null}
qemu-s390x-static -g 31338 -L /usr/s390x-linux-gnu ./clickhouse
```

Dans un autre shell, lancez LLDB et attachez-le, puis remplacez `<Clickhouse Parent Directory>` et `<build directory>` par les valeurs correspondant à votre environnement.

```bash theme={null}
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
```

<div id="visual-studio-code-integration">
  ## Intégration à Visual Studio Code
</div>

* L’extension [CodeLLDB](https://github.com/vadimcn/vscode-lldb) est requise pour le débogage visuel.
* L’extension [Command Variable](https://github.com/rioj7/command-variable) peut faciliter les lancements dynamiques si vous utilisez [CMake Variants](https://github.com/microsoft/vscode-cmake-tools/blob/main/docs/variants.md).
* Assurez-vous de configurer le backend pour qu’il pointe vers votre installation LLVM, par exemple : `"lldb.library": "/usr/lib/x86_64-linux-gnu/liblldb-21.so"`
* Assurez-vous d’exécuter l’exécutable ClickHouse en mode de débogage avant le lancement. (Il est également possible de créer une `preLaunchTask` pour automatiser cela)

<div id="example-configurations">
  ### Exemples de configuration
</div>

<div id="cmake-variantsyaml">
  #### cmake-variants.yaml
</div>

```yaml theme={null}
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.cmake
```

<div id="launchjson">
  #### launch.json
</div>

```json theme={null}
{
    "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"
        }
    ]
}
```

<div id="settingsjson">
  #### settings.json
</div>

Cela placerait également différents builds dans des sous-dossiers distincts du dossier `build`.

```json theme={null}
{
    "cmake.buildDirectory": "${workspaceFolder}/build/${buildKitVendor}-${buildKitVersion}-${variant:toolchain}-${variant:buildType}",
    "lldb.library": "/usr/lib/x86_64-linux-gnu/liblldb-21.so"
}
```

<div id="run-debugsh">
  #### run-debug.sh
</div>

```sh theme={null}
#! /bin/sh
echo 'Starting debugger session'
cd $1
qemu-s390x-static -g 2159 -L /usr/s390x-linux-gnu $2 $3 $4
```

<div id="tasksjson">
  #### tasks.json
</div>

Définit une tâche pour exécuter l’exécutable compilé en mode `server` dans un dossier `tmp` situé à côté des binaires, avec la configuration issue de `programs/server/config.xml`.

```json theme={null}
{
    "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": ".*"
                    }
                }
            ]
        }
    ]
}
```
