|
1 | 1 | FROM --platform=linux/amd64 mcr.microsoft.com/devcontainers/cpp:1-ubuntu-22.04 |
2 | 2 |
|
3 | 3 | # Install software-properties-common for add-apt-repository |
4 | | -RUN apt-get update && apt-get -y install software-properties-common |
5 | | - |
6 | | -# Install CMake |
7 | | -ENV CMAKE_VERSION=3.27.7 |
8 | | -RUN add-apt-repository ppa:ubuntu-toolchain-r/test && apt-get -y update && apt-get -y install make && \ |
9 | | - wget https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}.tar.gz && \ |
10 | | - tar -xvzf cmake-${CMAKE_VERSION}.tar.gz && cd cmake-${CMAKE_VERSION} && \ |
11 | | - ./bootstrap && \ |
12 | | - make -j$(nproc) && \ |
13 | | - make install |
| 4 | +RUN apt-get -y update && apt-get -y install software-properties-common && add-apt-repository ppa:ubuntu-toolchain-r/test |
14 | 5 |
|
15 | 6 | # Install C++ tools and libraries |
16 | 7 | RUN apt-get -y update && apt-get -y install \ |
17 | | - git gdb ninja-build libidn11-dev ragel yasm protobuf-compiler \ |
18 | | - protobuf-compiler-grpc libprotobuf-dev libgrpc++-dev libgrpc-dev libgrpc++1 libgrpc10 \ |
| 8 | + git gdb ninja-build libidn11-dev ragel yasm libc-ares-dev libre2-dev \ |
19 | 9 | rapidjson-dev zlib1g-dev libxxhash-dev libzstd-dev libsnappy-dev libgtest-dev libgmock-dev \ |
20 | 10 | libbz2-dev libdouble-conversion-dev libstdc++-13-dev gcc-13 g++-13 liblz4-dev libssl-dev \ |
21 | 11 | && apt-get clean && rm -rf /var/lib/apt/lists/* |
22 | 12 |
|
| 13 | +# Install CMake |
| 14 | +ENV CMAKE_VERSION=3.27.7 |
| 15 | +RUN wget https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-linux-x86_64.sh \ |
| 16 | + -q -O cmake-install.sh \ |
| 17 | + && chmod u+x cmake-install.sh \ |
| 18 | + && ./cmake-install.sh --skip-license --prefix=/usr/local \ |
| 19 | + && rm cmake-install.sh |
| 20 | + |
23 | 21 | # Install LLVM |
| 22 | +ENV LLVM_VERSION=16 |
24 | 23 | RUN wget https://apt.llvm.org/llvm.sh && \ |
25 | 24 | chmod u+x llvm.sh && \ |
26 | | - ./llvm.sh 16 |
| 25 | + ./llvm.sh ${LLVM_VERSION} |
27 | 26 |
|
28 | 27 | # Update alternatives to use clang-16 by default |
29 | | -RUN update-alternatives --install /usr/bin/clang clang /usr/bin/clang-16 10000 && \ |
30 | | - update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-16 10000 && \ |
31 | | - update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-16 10000 |
| 28 | +RUN update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${LLVM_VERSION} 10000 && \ |
| 29 | + update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-${LLVM_VERSION} 10000 && \ |
| 30 | + update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-${LLVM_VERSION} 10000 |
32 | 31 |
|
33 | 32 | # Update alternatives to use gcc-13 by default |
34 | 33 | RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 10000 && \ |
35 | 34 | update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 10000 |
36 | 35 |
|
37 | | -# Install libiconv |
38 | | -ENV LIBICONV_VERSION=1.15 |
39 | | -RUN wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-${LIBICONV_VERSION}.tar.gz && \ |
40 | | - tar -xvzf libiconv-${LIBICONV_VERSION}.tar.gz && cd libiconv-${LIBICONV_VERSION} && \ |
41 | | - ./configure --prefix=/usr/local && \ |
42 | | - make && \ |
43 | | - make install |
| 36 | +# Install abseil-cpp |
| 37 | +ENV ABSEIL_CPP_VERSION=20230802.0 |
| 38 | +RUN wget -O abseil-cpp-${ABSEIL_CPP_VERSION}.tar.gz https://github.com/abseil/abseil-cpp/archive/refs/tags/${ABSEIL_CPP_VERSION}.tar.gz && \ |
| 39 | + tar -xvzf abseil-cpp-${ABSEIL_CPP_VERSION}.tar.gz && cd abseil-cpp-${ABSEIL_CPP_VERSION} && \ |
| 40 | + mkdir build && cd build && \ |
| 41 | + cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DABSL_PROPAGATE_CXX_STD=ON .. && \ |
| 42 | + cmake --build . --config Release --target install |
| 43 | + |
| 44 | +# Install protobuf |
| 45 | +ENV PROTOBUF_VERSION=3.21.12 |
| 46 | +RUN wget -O protobuf-${PROTOBUF_VERSION}.tar.gz https://github.com/protocolbuffers/protobuf/archive/refs/tags/v${PROTOBUF_VERSION}.tar.gz && \ |
| 47 | + tar -xvzf protobuf-${PROTOBUF_VERSION}.tar.gz && cd protobuf-${PROTOBUF_VERSION} && \ |
| 48 | + mkdir build && cd build && \ |
| 49 | + cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_INSTALL=ON -Dprotobuf_ABSL_PROVIDER=package .. && \ |
| 50 | + cmake --build . --config Release --target install |
| 51 | + |
| 52 | +# Install grpc |
| 53 | +ENV GRPC_VERSION=1.41.0 |
| 54 | +RUN wget -O grpc-${GRPC_VERSION}.tar.gz https://github.com/grpc/grpc/archive/refs/tags/v${GRPC_VERSION}.tar.gz && \ |
| 55 | + tar -xvzf grpc-${GRPC_VERSION}.tar.gz && cd grpc-${GRPC_VERSION} && \ |
| 56 | + mkdir build && cd build && \ |
| 57 | + cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 \ |
| 58 | + -DgRPC_INSTALL=ON -DgRPC_BUILD_TESTS=OFF -DgRPC_BUILD_CSHARP_EXT=OFF \ |
| 59 | + -DgRPC_ZLIB_PROVIDER=package -DgRPC_CARES_PROVIDER=package -DgRPC_RE2_PROVIDER=package \ |
| 60 | + -DgRPC_SSL_PROVIDER=package -DgRPC_PROTOBUF_PROVIDER=package -DgRPC_ABSL_PROVIDER=package \ |
| 61 | + -DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF -DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF -DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF \ |
| 62 | + -DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF -DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF -DgRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF .. && \ |
| 63 | + cmake --build . --config Release --target install |
44 | 64 |
|
45 | 65 | # Install base64 |
46 | 66 | ENV BASE64_VERSION=0.5.2 |
47 | 67 | RUN wget -O base64-${BASE64_VERSION}.tar.gz https://github.com/aklomp/base64/archive/refs/tags/v${BASE64_VERSION}.tar.gz && \ |
48 | 68 | tar -xvzf base64-${BASE64_VERSION}.tar.gz && cd base64-${BASE64_VERSION} && \ |
49 | 69 | mkdir build && cd build && \ |
50 | | - cmake -DCMAKE_BUILD_TYPE=Release .. && \ |
| 70 | + cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .. && \ |
51 | 71 | cmake --build . --config Release --target install |
52 | 72 |
|
53 | 73 | # Install brotli |
54 | 74 | ENV BROTLI_VERSION=1.1.0 |
55 | 75 | RUN wget -O brotli-${BROTLI_VERSION}.tar.gz https://github.com/google/brotli/archive/refs/tags/v${BROTLI_VERSION}.tar.gz && \ |
56 | 76 | tar -xvzf brotli-${BROTLI_VERSION}.tar.gz && cd brotli-${BROTLI_VERSION} && \ |
57 | 77 | mkdir build && cd build && \ |
58 | | - cmake -DCMAKE_BUILD_TYPE=Release .. && \ |
| 78 | + cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .. && \ |
59 | 79 | cmake --build . --config Release --target install |
60 | 80 |
|
61 | 81 | # Install jwt-cpp |
62 | 82 | ENV JWT_CPP_VERSION=0.7.0 |
63 | 83 | 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 && \ |
64 | 84 | tar -xvzf jwt-cpp-${JWT_CPP_VERSION}.tar.gz && cd jwt-cpp-${JWT_CPP_VERSION} && \ |
65 | 85 | mkdir build && cd build && \ |
66 | | - cmake -DCMAKE_BUILD_TYPE=Release .. && \ |
| 86 | + cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .. && \ |
67 | 87 | cmake --build . --config Release --target install |
68 | 88 |
|
69 | 89 | # Install ccache 4.8.1 or above |
|
0 commit comments