| FROM ubuntu:22.04 | |
| ARG DEBIAN_FRONTEND=noninteractive | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| g++-multilib \ | |
| make \ | |
| ninja-build \ | |
| file \ | |
| curl \ | |
| ca-certificates \ | |
| python3 \ | |
| git \ | |
| cmake \ | |
| xz-utils \ | |
| sudo \ | |
| gdb \ | |
| patch \ | |
| libssl-dev \ | |
| pkg-config | |
| COPY scripts/cross-apt-packages.sh /scripts/ | |
| RUN sh /scripts/cross-apt-packages.sh | |
| COPY scripts/crosstool-ng-1.24.sh /scripts/ | |
| RUN sh /scripts/crosstool-ng-1.24.sh | |
| COPY scripts/rustbuild-setup.sh /scripts/ | |
| RUN sh /scripts/rustbuild-setup.sh | |
| WORKDIR /tmp | |
| COPY host-x86_64/dist-i586-gnu-i586-i686-musl/i586-linux-gnu.config \ | |
| host-x86_64/dist-i586-gnu-i586-i686-musl/build-i586-gnu-toolchain.sh \ | |
| /tmp/ | |
| RUN su rustbuild -c ./build-i586-gnu-toolchain.sh | |
| ENV PATH=$PATH:/x-tools/i586-unknown-linux-gnu/bin | |
| ENV \ | |
| CC_i586_unknown_linux_gnu=i586-unknown-linux-gnu-gcc \ | |
| AR_i586_unknown_linux_gnu=i586-unknown-linux-gnu-ar | |
| WORKDIR /build/ | |
| COPY scripts/musl.sh /build/ | |
| RUN CC=gcc CFLAGS="-m32 -Wa,-mrelax-relocations=no" \ | |
| CXX=g++ CXXFLAGS="-m32 -Wa,-mrelax-relocations=no" \ | |
| bash musl.sh i686 --target=i686 && \ | |
| CC=gcc CFLAGS="-march=pentium -m32 -Wa,-mrelax-relocations=no" \ | |
| CXX=g++ CXXFLAGS="-march=pentium -m32 -Wa,-mrelax-relocations=no" \ | |
| bash musl.sh i586 --target=i586 && \ | |
| rm -rf /build | |
| # FIXME: musl really shouldn't be linking libgcc_s.so, as it's linked to glibc, | |
| # but it's required by src/test/ui/proc-macro/crt-static.rs. Ubuntu:16.04 gcc-5 | |
| # had libgcc_s.so as a symlink to the absolute libgcc_s.so.1, but now it's an | |
| # ld-script that expects to find libgcc_s.so.1 in the library search path. | |
| # See also https://github.com/rust-lang/rust/issues/82521 | |
| RUN ln -s /usr/lib32/libgcc_s.so.1 /musl-i686/lib/ | |
| COPY scripts/sccache.sh /scripts/ | |
| RUN sh /scripts/sccache.sh | |
| ENV RUST_CONFIGURE_ARGS \ | |
| --musl-root-i586=/musl-i586 \ | |
| --musl-root-i686=/musl-i686 \ | |
| --disable-docs | |
| # Newer binutils broke things on some vms/distros (i.e., linking against | |
| # unknown relocs disabled by the following flag), so we need to go out of our | |
| # way to produce "super compatible" binaries. | |
| # | |
| # See: https://github.com/rust-lang/rust/issues/34978 | |
| ENV CFLAGS_i686_unknown_linux_musl=-Wa,-mrelax-relocations=no | |
| ENV CFLAGS_i586_unknown_linux_gnu=-Wa,-mrelax-relocations=no | |
| ENV CFLAGS_i586_unknown_linux_musl=-Wa,-mrelax-relocations=no | |
| ENV TARGETS=i586-unknown-linux-gnu,i686-unknown-linux-musl | |
| ENV SCRIPT \ | |
| python3 ../x.py --stage 2 test --host='' --target $TARGETS && \ | |
| python3 ../x.py dist --host='' --target $TARGETS,i586-unknown-linux-musl |