|
| 1 | +FROM ubuntu:22.04 |
| 2 | + |
| 3 | +ARG PRESET=release-test-clang |
| 4 | + |
| 5 | +# Install software-properties-common for add-apt-repository |
| 6 | +RUN apt-get -y update && apt-get -y install software-properties-common && add-apt-repository ppa:ubuntu-toolchain-r/test |
| 7 | + |
| 8 | +# Install C++ tools and libraries |
| 9 | +RUN apt-get -y update && apt-get -y install \ |
| 10 | + git gdb wget ninja-build libidn11-dev ragel yasm libc-ares-dev libre2-dev \ |
| 11 | + rapidjson-dev zlib1g-dev libxxhash-dev libzstd-dev libsnappy-dev libgtest-dev libgmock-dev \ |
| 12 | + libbz2-dev liblz4-dev libdouble-conversion-dev libssl-dev libstdc++-13-dev gcc-13 g++-13 \ |
| 13 | + && apt-get clean && rm -rf /var/lib/apt/lists/* |
| 14 | + |
| 15 | +# Install CMake |
| 16 | +ENV CMAKE_VERSION=3.27.7 |
| 17 | +RUN wget https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-linux-x86_64.sh \ |
| 18 | + -q -O cmake-install.sh \ |
| 19 | + && chmod u+x cmake-install.sh \ |
| 20 | + && ./cmake-install.sh --skip-license --prefix=/usr/local \ |
| 21 | + && rm cmake-install.sh |
| 22 | + |
| 23 | +# Install LLVM |
| 24 | +ENV LLVM_VERSION=16 |
| 25 | +RUN wget https://apt.llvm.org/llvm.sh && \ |
| 26 | + chmod u+x llvm.sh && \ |
| 27 | + ./llvm.sh ${LLVM_VERSION} && \ |
| 28 | + rm llvm.sh |
| 29 | + |
| 30 | +# Update alternatives to use clang-16 by default |
| 31 | +RUN update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${LLVM_VERSION} 10000 && \ |
| 32 | + update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-${LLVM_VERSION} 10000 && \ |
| 33 | + update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-${LLVM_VERSION} 10000 |
| 34 | + |
| 35 | +# Update alternatives to use gcc-13 by default |
| 36 | +RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 10000 && \ |
| 37 | + update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 10000 |
| 38 | + |
| 39 | +# Install abseil-cpp |
| 40 | +ENV ABSEIL_CPP_VERSION=20230802.0 |
| 41 | +ENV ABSEIL_CPP_INSTALL_DIR=/root/ydb_deps/absl |
| 42 | +RUN wget -O abseil-cpp-${ABSEIL_CPP_VERSION}.tar.gz https://github.com/abseil/abseil-cpp/archive/refs/tags/${ABSEIL_CPP_VERSION}.tar.gz && \ |
| 43 | + tar -xvzf abseil-cpp-${ABSEIL_CPP_VERSION}.tar.gz && cd abseil-cpp-${ABSEIL_CPP_VERSION} && \ |
| 44 | + mkdir build && cd build && \ |
| 45 | + cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DABSL_PROPAGATE_CXX_STD=ON .. && \ |
| 46 | + cmake --build . --config Release && \ |
| 47 | + cmake --install . --config Release --prefix ${ABSEIL_CPP_INSTALL_DIR} && \ |
| 48 | + rm -rf abseil-cpp-${ABSEIL_CPP_VERSION}.tar.gz abseil-cpp-${ABSEIL_CPP_VERSION} |
| 49 | + |
| 50 | +# Install protobuf |
| 51 | +ENV PROTOBUF_VERSION=3.21.12 |
| 52 | +ENV PROTOBUF_INSTALL_DIR=/root/ydb_deps/protobuf |
| 53 | +RUN wget -O protobuf-${PROTOBUF_VERSION}.tar.gz https://github.com/protocolbuffers/protobuf/archive/refs/tags/v${PROTOBUF_VERSION}.tar.gz && \ |
| 54 | + tar -xvzf protobuf-${PROTOBUF_VERSION}.tar.gz && cd protobuf-${PROTOBUF_VERSION} && \ |
| 55 | + mkdir build && cd build && \ |
| 56 | + cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_INSTALL=ON -Dprotobuf_ABSL_PROVIDER=package .. && \ |
| 57 | + cmake --build . --config Release && \ |
| 58 | + cmake --install . --config Release --prefix ${PROTOBUF_INSTALL_DIR} && \ |
| 59 | + rm -rf protobuf-${PROTOBUF_VERSION}.tar.gz protobuf-${PROTOBUF_VERSION} |
| 60 | + |
| 61 | +# Install grpc |
| 62 | +ENV GRPC_VERSION=1.54.3 |
| 63 | +ENV GRPC_INSTALL_DIR=/root/ydb_deps/grpc |
| 64 | +RUN wget -O grpc-${GRPC_VERSION}.tar.gz https://github.com/grpc/grpc/archive/refs/tags/v${GRPC_VERSION}.tar.gz && \ |
| 65 | + tar -xvzf grpc-${GRPC_VERSION}.tar.gz && cd grpc-${GRPC_VERSION} && \ |
| 66 | + mkdir build && cd build && \ |
| 67 | + cmake -G Ninja -DCMAKE_PREFIX_PATH="${ABSEIL_CPP_INSTALL_DIR};${PROTOBUF_INSTALL_DIR}" \ |
| 68 | + -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 \ |
| 69 | + -DgRPC_INSTALL=ON -DgRPC_BUILD_TESTS=OFF -DgRPC_BUILD_CSHARP_EXT=OFF \ |
| 70 | + -DgRPC_ZLIB_PROVIDER=package -DgRPC_CARES_PROVIDER=package -DgRPC_RE2_PROVIDER=package \ |
| 71 | + -DgRPC_SSL_PROVIDER=package -DgRPC_PROTOBUF_PROVIDER=package -DgRPC_ABSL_PROVIDER=package \ |
| 72 | + -DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF -DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF -DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF \ |
| 73 | + -DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF -DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF -DgRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF .. && \ |
| 74 | + cmake --build . --config Release && \ |
| 75 | + cmake --install . --config Release --prefix ${GRPC_INSTALL_DIR} && \ |
| 76 | + rm -rf grpc-${GRPC_VERSION}.tar.gz grpc-${GRPC_VERSION} |
| 77 | + |
| 78 | +# Install base64 |
| 79 | +ENV BASE64_VERSION=0.5.2 |
| 80 | +ENV BASE64_INSTALL_DIR=/root/ydb_deps/base64 |
| 81 | +RUN wget -O base64-${BASE64_VERSION}.tar.gz https://github.com/aklomp/base64/archive/refs/tags/v${BASE64_VERSION}.tar.gz && \ |
| 82 | + tar -xvzf base64-${BASE64_VERSION}.tar.gz && cd base64-${BASE64_VERSION} && \ |
| 83 | + mkdir build && cd build && \ |
| 84 | + cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .. && \ |
| 85 | + cmake --build . --config Release && \ |
| 86 | + cmake --install . --config Release --prefix ${BASE64_INSTALL_DIR} && \ |
| 87 | + rm -rf base64-${BASE64_VERSION}.tar.gz base64-${BASE64_VERSION} |
| 88 | + |
| 89 | +# Install brotli |
| 90 | +ENV BROTLI_VERSION=1.1.0 |
| 91 | +ENV BROTLI_INSTALL_DIR=/root/ydb_deps/brotli |
| 92 | +RUN wget -O brotli-${BROTLI_VERSION}.tar.gz https://github.com/google/brotli/archive/refs/tags/v${BROTLI_VERSION}.tar.gz && \ |
| 93 | + tar -xvzf brotli-${BROTLI_VERSION}.tar.gz && cd brotli-${BROTLI_VERSION} && \ |
| 94 | + mkdir build && cd build && \ |
| 95 | + cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .. && \ |
| 96 | + cmake --build . --config Release && \ |
| 97 | + cmake --install . --config Release --prefix ${BROTLI_INSTALL_DIR} && \ |
| 98 | + rm -rf brotli-${BROTLI_VERSION}.tar.gz brotli-${BROTLI_VERSION} |
| 99 | + |
| 100 | +# Install jwt-cpp |
| 101 | +ENV JWT_CPP_VERSION=0.7.0 |
| 102 | +ENV JWT_CPP_INSTALL_DIR=/root/ydb_deps/jwt-cpp |
| 103 | +RUN wget -O jwt-cpp-${JWT_CPP_VERSION}.tar.gz https://github.com/Thalhammer/jwt-cpp/archive/refs/tags/v${JWT_CPP_VERSION}.tar.gz && \ |
| 104 | + tar -xvzf jwt-cpp-${JWT_CPP_VERSION}.tar.gz && cd jwt-cpp-${JWT_CPP_VERSION} && \ |
| 105 | + mkdir build && cd build && \ |
| 106 | + cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .. && \ |
| 107 | + cmake --build . --config Release && \ |
| 108 | + cmake --install . --config Release --prefix ${JWT_CPP_INSTALL_DIR} && \ |
| 109 | + rm -rf jwt-cpp-${JWT_CPP_VERSION}.tar.gz jwt-cpp-${JWT_CPP_VERSION} |
| 110 | + |
| 111 | +# Install ccache 4.8.1 or above |
| 112 | +ENV CCACHE_VERSION=4.8.1 |
| 113 | +RUN wget https://github.com/ccache/ccache/releases/download/v${CCACHE_VERSION}/ccache-${CCACHE_VERSION}-linux-x86_64.tar.xz \ |
| 114 | + && tar -xf ccache-${CCACHE_VERSION}-linux-x86_64.tar.xz \ |
| 115 | + && cp ccache-${CCACHE_VERSION}-linux-x86_64/ccache /usr/local/bin/ \ |
| 116 | + && rm -rf ccache-${CCACHE_VERSION}-linux-x86_64 ccache-${CCACHE_VERSION}-linux-x86_64.tar.xz |
| 117 | + |
| 118 | +COPY . /ydb-cpp-sdk |
| 119 | +WORKDIR /ydb-cpp-sdk |
| 120 | +RUN rm -rf build |
| 121 | + |
| 122 | +RUN cmake --preset ${PRESET} |
| 123 | +RUN cmake --build --preset default --target slo-key-value |
| 124 | + |
| 125 | +ENTRYPOINT ["./build/tests/slo_workloads/key_value/slo-key-value"] |
0 commit comments