ClickHouse/docs/en/development/build-osx.md
Robert Schulze 76bd2533a3
Fix system.licenses on mac
- list-licenses.sh assumed GNU versions (e.g. the "-printf" flag of
  find) but Mac ships with a non-GNU version

- this led to error

  [8677/8942] Generating StorageSystemLicenses.generated.cpp
  find: -printf: unknown primary or operator
  find: -printf: unknown primary or operator
  find: -printf: unknown primary or operator
  find: -printf: unknown primary or operator

  during build and as a result, an empty system.licenses table

- As a fix, force the GNU versions of find and grep on Mac
2022-06-21 23:22:27 +02:00

4.5 KiB
Raw Blame History

sidebar_position sidebar_label description
65 Build on Mac OS X How to build ClickHouse on Mac OS X

How to Build ClickHouse on Mac OS X

:::info You don't have to build ClickHouse yourself! You can install pre-built ClickHouse as described in Quick Start. Follow macOS (Intel) or macOS (Apple silicon) installation instructions. :::

The build works on x86_64 (Intel) and arm64 (Apple Silicon) based on macOS 10.15 (Catalina) or higher with Homebrew's vanilla Clang.

:::note It is also possible to compile with Apple's XCode apple-clang or Homebrew's gcc, but it's strongly discouraged. :::

Install Homebrew

First install Homebrew

For Apple's Clang (discouraged): Install XCode and Command Line Tools

Install the latest XCode from App Store.

Open it at least once to accept the end-user license agreement and automatically install the required components.

Then, make sure that the latest Command Line Tools are installed and selected in the system:

sudo rm -rf /Library/Developer/CommandLineTools
sudo xcode-select --install

Install Required Compilers, Tools, and Libraries

brew update
brew install cmake ninja libtool gettext llvm gcc binutils grep findutils

Checkout ClickHouse Sources

git clone --recursive git@github.com:ClickHouse/ClickHouse.git
# ...alternatively, you can use https://github.com/ClickHouse/ClickHouse.git as the repo URL.

Build ClickHouse

To build using Homebrew's vanilla Clang compiler (the only recommended way):

cd ClickHouse
mkdir build
export PATH=$(brew --prefix llvm)/bin:$PATH
export CC=$(brew --prefix llvm)/bin/clang
export CXX=$(brew --prefix llvm)/bin/clang++
cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -S . -B build
cmake --build build
# The resulting binary will be created at: build/programs/clickhouse

To build using XCode native AppleClang compiler in XCode IDE (this option is only for development builds and workflows, and is not recommended unless you know what you are doing):

cd ClickHouse
rm -rf build
mkdir build
cd build
XCODE_IDE=1 ALLOW_APPLECLANG=1 cmake -G Xcode -DCMAKE_BUILD_TYPE=Debug -DENABLE_JEMALLOC=OFF ..
cmake --open .
# ...then, in XCode IDE select ALL_BUILD scheme and start the building process.
# The resulting binary will be created at: ./programs/Debug/clickhouse

To build using Homebrew's vanilla GCC compiler (this option is only for development experiments, and is absolutely not recommended unless you really know what you are doing):

cd ClickHouse
mkdir build
export PATH=$(brew --prefix binutils)/bin:$PATH
export PATH=$(brew --prefix gcc)/bin:$PATH
export CC=$(brew --prefix gcc)/bin/gcc-11
export CXX=$(brew --prefix gcc)/bin/g++-11
cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -S . -B build
cmake --build build
# The resulting binary will be created at: build/programs/clickhouse

Caveats

If you intend to run clickhouse-server, make sure to increase the systems maxfiles variable.

:::note Youll need to use sudo. :::

To do so, create the /Library/LaunchDaemons/limit.maxfiles.plist file with the following content:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
        "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>limit.maxfiles</string>
    <key>ProgramArguments</key>
    <array>
      <string>launchctl</string>
      <string>limit</string>
      <string>maxfiles</string>
      <string>524288</string>
      <string>524288</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
  </dict>
</plist>

Give the file correct permissions:

sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist

Validate that the file is correct:

plutil /Library/LaunchDaemons/limit.maxfiles.plist

Load the file (or reboot):

sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist

To check if its working, use the ulimit -n or launchctl limit maxfiles commands.

Running ClickHouse server

cd ClickHouse
./build/programs/clickhouse-server --config-file ./programs/server/config.xml

Original article