跳到主要内容

如何在 Linux 上为 macOS 构建 ClickHouse

这适用于您拥有 Linux 机器并希望使用它来构建将在 OS X 上运行的 clickhouse 二进制文件的情况。这旨在用于在 Linux 服务器上运行的持续集成检查。如果您想直接在 macOS 上构建 ClickHouse,请按照其他说明进行操作。

针对 macOS 的交叉构建基于构建说明,请先按照它们进行操作。

以下部分提供了为 x86_64 macOS 构建 ClickHouse 的逐步操作。如果您要面向 ARM 架构,只需将所有出现的 x86_64 替换为 aarch64 即可。例如,在整个步骤中将 x86_64-apple-darwin 替换为 aarch64-apple-darwin

安装 clang-18

按照https://apt.llvm.org/ 中的说明进行操作,以完成您的 Ubuntu 或 Debian 设置。例如,Bionic 的命令如下所示

sudo echo "deb [trusted=yes] http://apt.llvm.org/bionic/ llvm-toolchain-bionic-17 main" >> /etc/apt/sources.list
sudo apt-get install clang-18

安装交叉编译工具集

我们记住安装 cctools 的路径为 ${CCTOOLS}

mkdir ~/cctools
export CCTOOLS=$(cd ~/cctools && pwd)
cd ${CCTOOLS}

git clone https://github.com/tpoechtrager/apple-libtapi.git
cd apple-libtapi
git checkout 15dfc2a8c9a2a89d06ff227560a69f5265b692f9
INSTALLPREFIX=${CCTOOLS} ./build.sh
./install.sh
cd ..

git clone https://github.com/tpoechtrager/cctools-port.git
cd cctools-port/cctools
git checkout 2a3e1c2a6ff54a30f898b70cfb9ba1692a55fad7
./configure --prefix=$(readlink -f ${CCTOOLS}) --with-libtapi=$(readlink -f ${CCTOOLS}) --target=x86_64-apple-darwin
make install

此外,我们需要将 macOS X SDK 下载到工作树中。

cd ClickHouse/cmake/toolchain/darwin-x86_64
curl -L 'https://github.com/phracker/MacOSX-SDKs/releases/download/11.3/MacOSX11.0.sdk.tar.xz' | tar xJ --strip-components=1

构建 ClickHouse

cd ClickHouse
mkdir build-darwin
cd build-darwin
CC=clang-18 CXX=clang++-18 cmake -DCMAKE_AR:FILEPATH=${CCTOOLS}/bin/x86_64-apple-darwin-ar -DCMAKE_INSTALL_NAME_TOOL=${CCTOOLS}/bin/x86_64-apple-darwin-install_name_tool -DCMAKE_RANLIB:FILEPATH=${CCTOOLS}/bin/x86_64-apple-darwin-ranlib -DLINKER_NAME=${CCTOOLS}/bin/x86_64-apple-darwin-ld -DCMAKE_TOOLCHAIN_FILE=cmake/darwin/toolchain-x86_64.cmake ..
ninja

生成的二进制文件将具有 Mach-O 可执行文件格式,无法在 Linux 上运行。