diff --git a/docker/packager/binary/Dockerfile b/docker/packager/binary/Dockerfile index 82fa93ec57084ae4e99dd89cbb724b0e09ac6b94..1ffeab0144067520c40a035ce8196fe126a7ec3a 100644 --- a/docker/packager/binary/Dockerfile +++ b/docker/packager/binary/Dockerfile @@ -57,7 +57,23 @@ RUN apt-get update -y \ gperf \ cmake \ gdb \ - rename + rename \ + wget + +# Build and install tools for cross-linking to Darwin + +ENV CC=clang-8 +ENV CXX=clang++-8 + +# libtapi is required to support .tbh format from recent MacOS SDKs +RUN git clone https://github.com/tpoechtrager/apple-libtapi.git +RUN cd apple-libtapi && INSTALLPREFIX=/cctools ./build.sh && ./install.sh + +RUN git clone https://github.com/tpoechtrager/cctools-port.git +RUN cd cctools-port/cctools && ./configure --prefix=/cctools --with-libtapi=/cctools --target=x86_64-apple-darwin && make install + +RUN wget https://github.com/phracker/MacOSX-SDKs/releases/download/10.14-beta4/MacOSX10.14.sdk.tar.xz +RUN tar xJf MacOSX10.14.sdk.tar.xz -C /cctools COPY build.sh / CMD ["/bin/bash", "/build.sh"] diff --git a/docker/packager/packager b/docker/packager/packager index 733cbff71d1e35cd72b45e807e0cd409d9202973..f9cd6974c5db49fb21b20cc3040ca4d4d61c95a0 100755 --- a/docker/packager/packager +++ b/docker/packager/packager @@ -118,6 +118,13 @@ def parse_env_variables(build_type, compiler, sanitizer, package_type, cache, di cmake_flags.append('-DCMAKE_C_COMPILER=`which {}`'.format(cc)) cmake_flags.append('-DCMAKE_CXX_COMPILER=`which {}`'.format(cxx)) + if "darwin" in compiler: + cmake_flags.append("-DCMAKE_AR:FILEPATH=/cctools/bin/x86_64-apple-darwin-ar") \ + .append("-DCMAKE_RANLIB:FILEPATH=/cctools/bin/x86_64-apple-darwin-ranlib") \ + .append("-DCMAKE_SYSTEM_NAME=Darwin") \ + .append("-DSDK_PATH=/cctools/MacOSX10.14.sdk") \ + .append("-DLINKER_NAME=/cctools/bin/x86_64-apple-darwin-ld") + if sanitizer: result.append("SANITIZER={}".format(sanitizer)) if build_type: @@ -166,12 +173,12 @@ def parse_env_variables(build_type, compiler, sanitizer, package_type, cache, di if __name__ == "__main__": logging.basicConfig(level=logging.INFO, format='%(asctime)s %(message)s') - parser = argparse.ArgumentParser(description="ClickHouse building script via virtualization mechanisms") + parser = argparse.ArgumentParser(description="ClickHouse building script using prebuilt Docker image") parser.add_argument("--package-type", choices=IMAGE_MAP.keys(), required=True) parser.add_argument("--clickhouse-repo-path", default="../../") parser.add_argument("--output-dir", required=True) parser.add_argument("--build-type", choices=("debug", ""), default="") - parser.add_argument("--compiler", choices=("clang-6.0", "clang-7", "gcc-7", "clang-8", "gcc-8", "gcc-9"), default="gcc-7") + parser.add_argument("--compiler", choices=("clang-6.0", "clang-7", "gcc-7", "clang-8", "clang-8-darwin", "gcc-8", "gcc-9"), default="gcc-7") parser.add_argument("--sanitizer", choices=("address", "thread", "memory", "undefined", ""), default="") parser.add_argument("--unbundled", action="store_true") parser.add_argument("--split-binary", action="store_true")