summaryrefslogtreecommitdiffstats
path: root/src/ci/docker/host-x86_64/dist-x86_64-linux
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
commit698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch)
tree173a775858bd501c378080a10dca74132f05bc50 /src/ci/docker/host-x86_64/dist-x86_64-linux
parentInitial commit. (diff)
downloadrustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.tar.xz
rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.zip
Adding upstream version 1.64.0+dfsg1.upstream/1.64.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/ci/docker/host-x86_64/dist-x86_64-linux')
-rw-r--r--src/ci/docker/host-x86_64/dist-x86_64-linux/Dockerfile95
-rwxr-xr-xsrc/ci/docker/host-x86_64/dist-x86_64-linux/build-clang.sh46
-rwxr-xr-xsrc/ci/docker/host-x86_64/dist-x86_64-linux/build-gcc.sh46
-rw-r--r--src/ci/docker/host-x86_64/dist-x86_64-linux/shared.sh16
4 files changed, 203 insertions, 0 deletions
diff --git a/src/ci/docker/host-x86_64/dist-x86_64-linux/Dockerfile b/src/ci/docker/host-x86_64/dist-x86_64-linux/Dockerfile
new file mode 100644
index 000000000..973c43072
--- /dev/null
+++ b/src/ci/docker/host-x86_64/dist-x86_64-linux/Dockerfile
@@ -0,0 +1,95 @@
+# We document platform support for minimum glibc 2.17 and kernel 3.2.
+# CentOS 7 has headers for kernel 3.10, but that's fine as long as we don't
+# actually use newer APIs in rustc or std without a fallback. It's more
+# important that we match glibc for ELF symbol versioning.
+FROM centos:7
+
+WORKDIR /build
+
+RUN yum upgrade -y && \
+ yum install -y epel-release && \
+ yum install -y \
+ automake \
+ bzip2 \
+ file \
+ cmake3 \
+ gcc \
+ gcc-c++ \
+ git \
+ glibc-devel.i686 \
+ glibc-devel.x86_64 \
+ libedit-devel \
+ libstdc++-devel.i686 \
+ libstdc++-devel.x86_64 \
+ make \
+ ncurses-devel \
+ openssl-devel \
+ patch \
+ perl \
+ pkgconfig \
+ python3 \
+ unzip \
+ wget \
+ xz \
+ zlib-devel.i686 \
+ zlib-devel.x86_64
+
+RUN mkdir -p /rustroot/bin && ln -s /usr/bin/cmake3 /rustroot/bin/cmake
+
+ENV PATH=/rustroot/bin:$PATH
+ENV LD_LIBRARY_PATH=/rustroot/lib64:/rustroot/lib32:/rustroot/lib
+ENV PKG_CONFIG_PATH=/rustroot/lib/pkgconfig
+WORKDIR /tmp
+RUN mkdir /home/user
+COPY host-x86_64/dist-x86_64-linux/shared.sh /tmp/
+
+# Need at least GCC 5.1 to compile LLVM nowadays
+COPY host-x86_64/dist-x86_64-linux/build-gcc.sh /tmp/
+RUN ./build-gcc.sh && yum remove -y gcc gcc-c++
+
+# Now build LLVM+Clang, afterwards configuring further compilations to use the
+# clang/clang++ compilers.
+COPY host-x86_64/dist-x86_64-linux/build-clang.sh /tmp/
+RUN ./build-clang.sh
+ENV CC=clang CXX=clang++
+
+# rustc-perf version from 2022-07-22
+ENV PERF_COMMIT 3c253134664fdcba862c539d37f0de18557a9a4c
+RUN curl -LS -o perf.zip https://github.com/rust-lang/rustc-perf/archive/$PERF_COMMIT.zip && \
+ unzip perf.zip && \
+ mv rustc-perf-$PERF_COMMIT rustc-perf && \
+ rm perf.zip
+
+COPY scripts/sccache.sh /scripts/
+RUN sh /scripts/sccache.sh
+
+ENV PGO_HOST=x86_64-unknown-linux-gnu
+
+ENV HOSTS=x86_64-unknown-linux-gnu
+
+ENV RUST_CONFIGURE_ARGS \
+ --enable-full-tools \
+ --enable-sanitizers \
+ --enable-profiler \
+ --enable-compiler-docs \
+ --set target.x86_64-unknown-linux-gnu.linker=clang \
+ --set target.x86_64-unknown-linux-gnu.ar=/rustroot/bin/llvm-ar \
+ --set target.x86_64-unknown-linux-gnu.ranlib=/rustroot/bin/llvm-ranlib \
+ --set llvm.thin-lto=true \
+ --set llvm.ninja=false \
+ --set rust.jemalloc \
+ --set rust.use-lld=true
+ENV SCRIPT ../src/ci/pgo.sh python3 ../x.py dist \
+ --host $HOSTS --target $HOSTS \
+ --include-default-paths \
+ build-manifest
+ENV CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=clang
+
+# This is the only builder which will create source tarballs
+ENV DIST_SRC 1
+
+# When we build cargo in this container, we don't want it to use the system
+# libcurl, instead it should compile its own.
+ENV LIBCURL_NO_PKG_CONFIG 1
+
+ENV DIST_REQUIRE_ALL_TOOLS 1
diff --git a/src/ci/docker/host-x86_64/dist-x86_64-linux/build-clang.sh b/src/ci/docker/host-x86_64/dist-x86_64-linux/build-clang.sh
new file mode 100755
index 000000000..1025f5bce
--- /dev/null
+++ b/src/ci/docker/host-x86_64/dist-x86_64-linux/build-clang.sh
@@ -0,0 +1,46 @@
+#!/usr/bin/env bash
+
+set -ex
+
+source shared.sh
+
+LLVM=llvmorg-14.0.5
+
+mkdir llvm-project
+cd llvm-project
+
+curl -L https://github.com/llvm/llvm-project/archive/$LLVM.tar.gz | \
+ tar xzf - --strip-components=1
+
+mkdir clang-build
+cd clang-build
+
+# For whatever reason the default set of include paths for clang is different
+# than that of gcc. As a result we need to manually include our sysroot's
+# include path, /rustroot/include, to clang's default include path.
+INC="/rustroot/include:/usr/include"
+
+# We need compiler-rt for the profile runtime (used later to PGO the LLVM build)
+# but sanitizers aren't currently building. Since we don't need those, just
+# disable them.
+hide_output \
+ cmake ../llvm \
+ -DCMAKE_C_COMPILER=/rustroot/bin/gcc \
+ -DCMAKE_CXX_COMPILER=/rustroot/bin/g++ \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_INSTALL_PREFIX=/rustroot \
+ -DCOMPILER_RT_BUILD_SANITIZERS=OFF \
+ -DCOMPILER_RT_BUILD_XRAY=OFF \
+ -DCOMPILER_RT_BUILD_MEMPROF=OFF \
+ -DLLVM_TARGETS_TO_BUILD=X86 \
+ -DLLVM_INCLUDE_BENCHMARKS=OFF \
+ -DLLVM_INCLUDE_TESTS=OFF \
+ -DLLVM_INCLUDE_EXAMPLES=OFF \
+ -DLLVM_ENABLE_PROJECTS="clang;lld;compiler-rt" \
+ -DC_INCLUDE_DIRS="$INC"
+
+hide_output make -j$(nproc)
+hide_output make install
+
+cd ../..
+rm -rf llvm-project
diff --git a/src/ci/docker/host-x86_64/dist-x86_64-linux/build-gcc.sh b/src/ci/docker/host-x86_64/dist-x86_64-linux/build-gcc.sh
new file mode 100755
index 000000000..9932b2505
--- /dev/null
+++ b/src/ci/docker/host-x86_64/dist-x86_64-linux/build-gcc.sh
@@ -0,0 +1,46 @@
+#!/usr/bin/env bash
+set -ex
+
+source shared.sh
+
+GCC=7.5.0
+
+curl https://ftp.gnu.org/gnu/gcc/gcc-$GCC/gcc-$GCC.tar.xz | xzcat | tar xf -
+cd gcc-$GCC
+
+# FIXME(#49246): Remove the `sed` below.
+#
+# On 2018 March 21st, two Travis builders' cache for Docker are suddenly invalidated. Normally this
+# is fine, because we just need to rebuild the Docker image. However, it reveals a network issue:
+# downloading from `ftp://gcc.gnu.org/` from Travis (using passive mode) often leads to "Connection
+# timed out" error, and even when the download completed, the file is usually corrupted. This causes
+# nothing to be landed that day.
+#
+# We observed that the `gcc-4.8.5.tar.bz2` above can be downloaded successfully, so as a stability
+# improvement we try to download from the HTTPS mirror instead. Turns out this uncovered the third
+# bug: the host `gcc.gnu.org` and `cygwin.com` share the same IP, and the TLS certificate of the
+# latter host is presented to `wget`! Therefore, we choose to download from the insecure HTTP server
+# instead here.
+#
+# FIXME: use HTTPS (see https://github.com/rust-lang/rust/pull/86586#issuecomment-868355356)
+sed -i'' 's|ftp://gcc\.gnu\.org/|http://gcc.gnu.org/|g' ./contrib/download_prerequisites
+
+./contrib/download_prerequisites
+mkdir ../gcc-build
+cd ../gcc-build
+hide_output ../gcc-$GCC/configure \
+ --prefix=/rustroot \
+ --enable-languages=c,c++ \
+ --disable-gnu-unique-object
+hide_output make -j$(nproc)
+hide_output make install
+ln -s gcc /rustroot/bin/cc
+
+cd ..
+rm -rf gcc-build
+rm -rf gcc-$GCC
+
+# FIXME: clang doesn't find 32-bit libraries in /rustroot/lib,
+# but it does look all the way under /rustroot/lib/[...]/32,
+# so we can link stuff there to help it out.
+ln /rustroot/lib/*.{a,so} -rst /rustroot/lib/gcc/x86_64-pc-linux-gnu/$GCC/32/
diff --git a/src/ci/docker/host-x86_64/dist-x86_64-linux/shared.sh b/src/ci/docker/host-x86_64/dist-x86_64-linux/shared.sh
new file mode 100644
index 000000000..dc86dddd4
--- /dev/null
+++ b/src/ci/docker/host-x86_64/dist-x86_64-linux/shared.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+hide_output() {
+ set +x
+ on_err="
+echo ERROR: An error was encountered with the build.
+cat /tmp/build.log
+exit 1
+"
+ trap "$on_err" ERR
+ bash -c "while true; do sleep 30; echo \$(date) - building ...; done" &
+ PING_LOOP_PID=$!
+ "$@" &> /tmp/build.log
+ trap - ERR
+ kill $PING_LOOP_PID
+ set -x
+}