在前一章節中,我們展示了如何在Ubuntu 18.04的作業系統上編譯ClickHouse專案原始碼,以及將編譯好的ClickHouse資料庫進行相關的啟動與設定等操作,在本章節中,我們會展示如何在Linux作業系統上編譯給AARCH64(ARM64)與RISC-V 64等CPU的架構上需要的ClickHouse資料庫等相關執行檔。
所謂的跨編譯,就是將程式等專案編譯的非真正執行的環境,意思就是在A機器環境的作業系統進行編譯並將編譯好的執行檔在B環境作業系統上執行,這樣的過程就可以稱之為跨編譯,會使用到跨編譯的情形不外乎有幾種情況:
我們會示範如何在Linux發行版本Ubuntu 18.04上面進行跨編譯,並編譯好可以在AARCH64的架構上的作業系統執行ClickHouse資料庫與相關客戶端的執行檔。
首先,需要有clang-14以上的版本,這個已經在前一章節中安裝好了,若沒有安裝的話,請參考前一章節有關於Clang安裝的段落。
接著,執行下列的指令,相關的輸出訊息如下:
peter@ubuntu-s-4vcpu-8gb-amd-sgp1-01:~$ cd ClickHouse/
peter@ubuntu-s-4vcpu-8gb-amd-sgp1-01:~/ClickHouse$ mkdir aarch64-build/
peter@ubuntu-s-4vcpu-8gb-amd-sgp1-01:~/ClickHouse$ CC=clang-14 CXX=clang++-14 cmake . -Baarch64-build -G Ninja -DCMAKE_TOOLCHAIN_FILE=cmake/linux/toolchain-aarch64.cmake
-- The C compiler identification is Clang 14.0.6
-- The CXX compiler identification is Clang 14.0.6
-- The ASM compiler identification is Clang with GNU-like command-line
-- Found assembler: /usr/bin/clang-14
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/clang-14 - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/clang++-14 - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Cross-compiling for target:
......
[151/201] Building CXX object CMakeFiles/libprotoc.dir/home/peter/ClickHouse/contrib/protobuf/src/google/protobuf/compiler/java/java_enum_field.cc.o
[152/201] Building CXX object CMakeFiles/libprotoc.dir/home/peter/ClickHouse/contrib/protobuf/src/google/protobuf/compiler/java/java_enum_field_lite.cc.o
[153/201] Building CXX object CMakeFiles/libprotoc.dir/home/peter/ClickHouse/contrib/protobuf/src/google/protobuf/compiler/java/java_enum_lite.cc.o
[154/201] Building CXX object CMakeFiles/libprotoc.dir/home/peter/ClickHouse/contrib/protobuf/src/google/protobuf/compiler/java/java_extension_lite.cc.o
[155/201] Building CXX object CMakeFiles/libprotoc.dir/home/peter/ClickHouse/contrib/protobuf/src/google/protobuf/compiler/java/java_extension.cc.o
......
-- Target check already exists
-- /home/peter/ClickHouse/utils: Have 7975 megabytes of memory.
Limiting concurrent linkers jobs to 2 and compiler jobs to OFF (system has 4 logical cores)
-- Configuring done
-- Generating done
-- Build files have been written to: /home/peter/ClickHouse/aarch64-build
peter@ubuntu-s-4vcpu-8gb-amd-sgp1-01:~/ClickHouse$ ninja -C aarch64-build
ninja: Entering directory `aarch64-build'
[0/2] Re-checking globbed directories...
[115/8175] Building CXX object contrib/libcxx-c...e/CMakeFiles/cxx.dir/__/libcxx/src/locale.cpp.o
從上面訊息得知,我們在前一章節已經把ClickHouse的原始專案完整的複製下來了,因此沿用此專案,若還沒有下載ClickHouse原始碼的,可以先參考前一章節,接著切換到此專案目錄並新建一個目錄叫做「aarch64-build/」,接著再執行CC=clang-14 CXX=clang++-14 cmake . -Baarch64-build -G Ninja -DCMAKE_TOOLCHAIN_FILE=cmake/linux/toolchain-aarch64.cmake
指令產生給AARCH64所需要的相關檔案,接著再執行ninja -C aarch64-build
指令執行編譯,這個編譯的訊息相信讀者會很熟悉了,因為跟前一章節的訊息很類似,只差在執行cmake
時候帶入一些指定AARCH64的相關參數與設定檔。
當編譯好之後,就會變成下列這樣的訊息:
......
ofile/prof_err.et
[8175/8175] Linking CXX executable utils/wal-dump/wal-dump
peter@ubuntu-s-4vcpu-8gb-amd-sgp1-01:~/ClickHouse$
與AARCH64架構上的跨編譯是差不多的,除了要準備clang版本在14版本以上之外,還有CMake等指令,唯獨只有執行cmake指令所要帶的參數不同,下列是進行此CPU架構的跨編譯步驟:
cd ClickHouse
mkdir build-riscv64
CC=clang-14 CXX=clang++-14 cmake . -Bbuild-riscv64 -G Ninja -DCMAKE_TOOLCHAIN_FILE=cmake/linux/toolchain-riscv64.cmake -DGLIBC_COMPATIBILITY=OFF -DENABLE_LDAP=OFF -DOPENSSL_NO_ASM=ON -DENABLE_JEMALLOC=ON -DENABLE_PARQUET=OFF -DUSE_UNWIND=OFF -DENABLE_GRPC=OFF -DENABLE_HDFS=OFF -DENABLE_MYSQL=OFF
ninja -C build-riscv64
從上面的指令可以得知,首先先進入到ClickHouse的專案原始碼目錄,接著建立build-riscv64
目錄,接著設定clang-14版本的指令給CC與CXX環境變數,接著執行cmake並帶一些RISC-V 64架構所需要的參數,接著再用ninja
指令將相關的編譯好的執行檔與檔案寫入到build-riscv64
目錄中。
在官方的ClickHouse文件中,給RISC-V 64的CPU架構跨編譯仍在實驗階段,因此不是所有的ClickHouse特性都可以使用,所以在執行cmake
指令時候,需要帶一些參數將一些特性都關閉。
在本篇章節中,我們展示了分別給兩種不同的CPU架構上在Ubuntu 18.04的64位元發行的作業系統上進行跨編譯的動作,並利用數莓派4來驗證跨編譯出來的ClickHouse執行檔的目錄是可以在數莓派4上啟動ClickHouse的資料庫伺服器的,在下一章節中,我們將會完整整理與討論ClickHouse資料庫伺服器的啟動方法。