|
| 1 | +# Build image for httpd-datadog GitLab CI. |
| 2 | +# |
| 3 | +# It contains: |
| 4 | +# - LLVM 17 toolchain with musl sysroot for cross-compilation |
| 5 | +# - httpd 2.4 source code |
| 6 | +# - Tools necessary to build httpd and mod_datadog |
| 7 | +# - Rust toolchain for RUM (inject-browser-sdk requires Rust 1.73+) |
| 8 | +# |
| 9 | +# Toolchain files are sourced from deps/nginx-datadog/build_env/ |
| 10 | +# |
| 11 | +FROM alpine:3.20.3 AS sysroot |
| 12 | + |
| 13 | +ARG LLVM_VERSION=17.0.6 |
| 14 | +ARG ARCH |
| 15 | + |
| 16 | +COPY deps/nginx-datadog/build_env/CHECKSUMS /CHECKSUMS |
| 17 | + |
| 18 | +RUN echo "Building LLVM ${LLVM_VERSION} on ${ARCH}" |
| 19 | + |
| 20 | +RUN apk --no-cache add alpine-sdk coreutils sudo bash samurai python3 linux-headers \ |
| 21 | + compiler-rt clang llvm lld wget cmake make binutils musl-dev git patchelf xz lit |
| 22 | +RUN wget https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz && \ |
| 23 | + grep -F llvm-project-${LLVM_VERSION}.src.tar.xz /CHECKSUMS | sha512sum --check && \ |
| 24 | + tar -xvf llvm-project-${LLVM_VERSION}.src.tar.xz |
| 25 | + |
| 26 | +COPY deps/nginx-datadog/build_env/locale.h.diff /locale.h.diff |
| 27 | +RUN cd /usr/include && patch -p0 < /locale.h.diff |
| 28 | + |
| 29 | +COPY deps/nginx-datadog/build_env/alltypes.h.diff /alltypes.h.diff |
| 30 | +RUN cd /usr/include && patch -p0 < /alltypes.h.diff |
| 31 | + |
| 32 | +RUN cd llvm-project-${LLVM_VERSION}.src && mkdir -p build && cd build && \ |
| 33 | + cmake -G Ninja \ |
| 34 | + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ |
| 35 | + -DCMAKE_INSTALL_PREFIX=/usr \ |
| 36 | + -DCMAKE_C_COMPILER=clang \ |
| 37 | + -DCMAKE_C_FLAGS="-fno-omit-frame-pointer -D_LIBCPP_HAS_NO_C11_ALIGNED_ALLOC=1" \ |
| 38 | + -DCMAKE_CXX_COMPILER=clang++ \ |
| 39 | + -DCMAKE_CXX_FLAGS="-fno-omit-frame-pointer -D_LIBCPP_HAS_NO_C11_ALIGNED_ALLOC=1" \ |
| 40 | + -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ |
| 41 | + -DLIBUNWIND_ENABLE_SHARED=OFF \ |
| 42 | + -DLIBUNWIND_ENABLE_STATIC=ON \ |
| 43 | + -DLIBUNWIND_USE_COMPILER_RT=ON \ |
| 44 | + -DLIBCXXABI_ENABLE_SHARED=OFF \ |
| 45 | + -DLIBCXXABI_USE_LLVM_UNWINDER=ON \ |
| 46 | + -DLIBCXXABI_ENABLE_STATIC_UNWINDER=ON \ |
| 47 | + -DLIBCXXABI_USE_COMPILER_RT=ON \ |
| 48 | + -DLIBCXX_ENABLE_SHARED=OFF \ |
| 49 | + -DLIBCXX_HAS_MUSL_LIBC=ON \ |
| 50 | + -DLIBCXX_USE_COMPILER_RT=ON \ |
| 51 | + -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON \ |
| 52 | + -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \ |
| 53 | + -DLLVM_EXTERNAL_LIT=/usr/bin/lit ../runtimes && \ |
| 54 | + ninja -v install-unwind install-cxxabi install-cxx |
| 55 | + |
| 56 | +RUN cd /usr/lib && ln -s gcc/*/*/ resource_dir |
| 57 | +RUN cd /usr/lib && ln -s clang/${LLVM_VERSION%%.*}/lib/linux/libclang_rt.builtins-*.a libclang_rt.builtins.a |
| 58 | + |
| 59 | +RUN rm -rf /llvm-project-${LLVM_VERSION}.src |
| 60 | +RUN rm -f llvm-project-${LLVM_VERSION}.src.tar.xz |
| 61 | + |
| 62 | +RUN mkdir -p /sysroot/${ARCH}-none-linux-musl/usr |
| 63 | +RUN ln -s /usr/lib /sysroot/${ARCH}-none-linux-musl/usr/ |
| 64 | +RUN ln -s /usr/include /sysroot/${ARCH}-none-linux-musl/usr/ |
| 65 | +RUN ln -s /lib /sysroot/${ARCH}-none-linux-musl/ |
| 66 | +RUN ln -s /usr/lib/llvm${LLVM_VERSION%%.*}/lib/clang/${LLVM_VERSION%%.*}/lib /sysroot/${ARCH}-none-linux-musl/usr/lib/resource_dir/lib |
| 67 | + |
| 68 | +COPY deps/nginx-datadog/build_env/Toolchain.cmake.${ARCH} /sysroot/${ARCH}-none-linux-musl/Toolchain.cmake |
| 69 | + |
| 70 | +# see https://github.com/llvm/llvm-project/issues/60572 |
| 71 | +RUN mv /usr/lib/gcc/${ARCH}-alpine-linux-musl/13.2.1/include/stdatomic.h /usr/lib/gcc/${ARCH}-alpine-linux-musl/13.2.1/include/stdatomic.h_ |
| 72 | +RUN cp /usr/lib/llvm${LLVM_VERSION%%.*}/lib/clang/${LLVM_VERSION%%.*}/include/stdatomic.h /usr/lib/gcc/${ARCH}-alpine-linux-musl/13.2.1/include/stdatomic.h |
| 73 | + |
| 74 | +COPY deps/nginx-datadog/build_env/glibc_compat.c /sysroot/ |
| 75 | +RUN clang --sysroot /sysroot/${ARCH}-none-linux-musl/ -fpie -O2 -fno-omit-frame-pointer \ |
| 76 | + -ggdb3 -c /sysroot/glibc_compat.c -o /tmp/glibc_compat.o && \ |
| 77 | + ar rcs /sysroot/${ARCH}-none-linux-musl/usr/lib/libglibc_compat.a /tmp/glibc_compat.o && \ |
| 78 | + rm /tmp/glibc_compat.o |
| 79 | + |
| 80 | + |
| 81 | +# Install dependencies for httpd |
| 82 | +RUN apk add --no-cache expat expat-dev autoconf libtool py-pip gpg gpg-agent pcre-dev pcre2-dev |
| 83 | + |
| 84 | +# Install Rust toolchain |
| 85 | +RUN apk add --no-cache curl |
| 86 | +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -yq --default-toolchain 1.73.0 \ |
| 87 | + && ln -s ~/.cargo/bin/cargo /usr/bin/cargo |
| 88 | + |
| 89 | +RUN cargo install --locked cbindgen --version 0.26.0 \ |
| 90 | + && ln -s ~/.cargo/bin/cbindgen /usr/local/bin/cbindgen |
| 91 | + |
| 92 | +# Setup httpd 2.4 source |
| 93 | +COPY scripts/setup-httpd.py setup-httpd.py |
| 94 | +RUN python3 ./setup-httpd.py -o httpd 2.4.58 \ |
| 95 | + && cd httpd \ |
| 96 | + && ./configure --with-included-apr --prefix=$(pwd)/httpd-build --enable-mpms-shared="all" \ |
| 97 | + && make -j \ |
| 98 | + && make -j install |
0 commit comments