Skip to content

Commit

Permalink
Update Python and Clang on x86 dist images
Browse files Browse the repository at this point in the history
LLVM 12 no longer builds with Python 2, so install Python 3 in
preparatin.

However, Clang 10 does not build with Python 3, so we need update
to Clang 11 as well, which supports both.

Unfortunately, doing so results in errors while linking the
libLLVM.so into other binaries:
> __morestack: invalid needed version 2

This is fixed by using LLD instead. Possibly this is due to a binutils
linker bug, but updating to the latest binutils version does not fix
it.
  • Loading branch information
nikic committed Jan 28, 2021
1 parent 7fba12b commit e066dea
Show file tree
Hide file tree
Showing 6 changed files with 18 additions and 11 deletions.
3 changes: 3 additions & 0 deletions src/bootstrap/native.rs
Expand Up @@ -556,6 +556,9 @@ impl Step for Lld {
t!(fs::create_dir_all(&out_dir));

let mut cfg = cmake::Config::new(builder.src.join("src/llvm-project/lld"));
if let Some(ref linker) = builder.config.llvm_use_linker {
cfg.define("LLVM_USE_LINKER", linker);
}
configure_cmake(builder, target, &mut cfg, true);

// This is an awful, awful hack. Discovered when we migrated to using
Expand Down
8 changes: 5 additions & 3 deletions src/ci/docker/host-x86_64/dist-i686-linux/Dockerfile
Expand Up @@ -68,11 +68,11 @@ RUN ./build-binutils.sh
COPY host-x86_64/dist-x86_64-linux/build-gcc.sh /tmp/
RUN ./build-gcc.sh && apt-get remove -y gcc g++

# Debian 6 has Python 2.6 by default, but LLVM needs 2.7+
# Debian 6 has Python 2.6 by default, but LLVM >= 12 needs Python 3
COPY host-x86_64/dist-x86_64-linux/build-python.sh /tmp/
RUN ./build-python.sh

# LLVM needs cmake 3.4.3 or higher, and is planning to raise to 3.13.4.
# LLVM needs cmake 3.13.4 or higher
COPY host-x86_64/dist-x86_64-linux/build-cmake.sh /tmp/
RUN ./build-cmake.sh

Expand All @@ -94,8 +94,10 @@ ENV RUST_CONFIGURE_ARGS \
--set target.i686-unknown-linux-gnu.linker=clang \
--build=i686-unknown-linux-gnu \
--set llvm.ninja=false \
--set llvm.use-linker=lld \
--set rust.use-lld=true \
--set rust.jemalloc
ENV SCRIPT python2.7 ../x.py dist --build $HOSTS --host $HOSTS --target $HOSTS
ENV SCRIPT python3 ../x.py dist --build $HOSTS --host $HOSTS --target $HOSTS
ENV CARGO_TARGET_I686_UNKNOWN_LINUX_GNU_LINKER=clang

# This was added when we switched from gcc to clang. It's not clear why this is
Expand Down
8 changes: 5 additions & 3 deletions src/ci/docker/host-x86_64/dist-x86_64-linux/Dockerfile
Expand Up @@ -68,11 +68,11 @@ RUN ./build-binutils.sh
COPY host-x86_64/dist-x86_64-linux/build-gcc.sh /tmp/
RUN ./build-gcc.sh && apt-get remove -y gcc g++

# Debian 6 has Python 2.6 by default, but LLVM needs 2.7+
# Debian 6 has Python 2.6 by default, but LLVM >= 12 needs Python 3
COPY host-x86_64/dist-x86_64-linux/build-python.sh /tmp/
RUN ./build-python.sh

# LLVM needs cmake 3.4.3 or higher, and is planning to raise to 3.13.4.
# LLVM needs cmake 3.13.4 or higher
COPY host-x86_64/dist-x86_64-linux/build-cmake.sh /tmp/
RUN ./build-cmake.sh

Expand All @@ -99,8 +99,10 @@ ENV RUST_CONFIGURE_ARGS \
--set target.x86_64-unknown-linux-gnu.ranlib=/rustroot/bin/llvm-ranlib \
--set llvm.thin-lto=true \
--set llvm.ninja=false \
--set llvm.use-linker=lld \
--set rust.use-lld=true \
--set rust.jemalloc
ENV SCRIPT ../src/ci/pgo.sh python2.7 ../x.py dist \
ENV SCRIPT ../src/ci/pgo.sh python3 ../x.py dist \
--host $HOSTS --target $HOSTS \
--include-default-paths \
src/tools/build-manifest
Expand Down
2 changes: 1 addition & 1 deletion src/ci/docker/host-x86_64/dist-x86_64-linux/build-clang.sh
Expand Up @@ -4,7 +4,7 @@ set -ex

source shared.sh

LLVM=llvmorg-10.0.0
LLVM=llvmorg-11.0.1

mkdir llvm-project
cd llvm-project
Expand Down
6 changes: 3 additions & 3 deletions src/ci/docker/host-x86_64/dist-x86_64-linux/build-python.sh
Expand Up @@ -3,7 +3,7 @@
set -ex
source shared.sh

curl https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tgz | \
curl https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tgz | \
tar xzf -

mkdir python-build
Expand All @@ -12,10 +12,10 @@ cd python-build
# Gotta do some hackery to tell python about our custom OpenSSL build, but other
# than that fairly normal.
CFLAGS='-I /rustroot/include' LDFLAGS='-L /rustroot/lib -L /rustroot/lib64' \
hide_output ../Python-2.7.12/configure --prefix=/rustroot
hide_output ../Python-3.9.1/configure --prefix=/rustroot
hide_output make -j10
hide_output make install

cd ..
rm -rf python-build
rm -rf Python-2.7.12
rm -rf Python-3.9.1
2 changes: 1 addition & 1 deletion src/ci/pgo.sh
Expand Up @@ -4,7 +4,7 @@ set -euxo pipefail

rm -rf /tmp/rustc-pgo

python2.7 ../x.py build --target=$PGO_HOST --host=$PGO_HOST \
python3 ../x.py build --target=$PGO_HOST --host=$PGO_HOST \
--stage 2 library/std --rust-profile-generate=/tmp/rustc-pgo

./build/$PGO_HOST/stage2/bin/rustc --edition=2018 \
Expand Down

0 comments on commit e066dea

Please sign in to comment.