From b489017aaa4d18647e4ce1acdc82447f04f9d64f Mon Sep 17 00:00:00 2001 From: "Lance R. Vick" Date: Sun, 3 Dec 2023 18:08:26 -0800 Subject: [PATCH] build rust 1.54 with custom llvm13 --- Makefile | 12 + packages/llvm13/Dockerfile | 81 ++++++ packages/llvm13/rust-feature-tables.patch | 305 ++++++++++++++++++++++ packages/rust/Dockerfile | 28 +- 4 files changed, 410 insertions(+), 16 deletions(-) create mode 100644 packages/llvm13/Dockerfile create mode 100644 packages/llvm13/rust-feature-tables.patch diff --git a/Makefile b/Makefile index f3e1a23..a864cd3 100644 --- a/Makefile +++ b/Makefile @@ -125,6 +125,18 @@ out/llvm.oci.tgz: \ out/musl.oci.tgz docker build -t imgrep/llvm --output type=oci,dest=$@ packages/llvm +out/llvm13.oci.tgz: \ + out/gcc.oci.tgz \ + out/python.oci.tgz \ + out/py-setuptools.oci.tgz \ + out/perl.oci.tgz \ + out/binutils.oci.tgz \ + out/cmake.oci.tgz \ + out/ninja.oci.tgz \ + out/busybox.oci.tgz \ + out/musl.oci.tgz + docker build -t imgrep/llvm13 --output type=oci,dest=$@ packages/llvm13 + out/rust.oci.tgz: \ out/gcc.oci.tgz \ out/bash.oci.tgz \ diff --git a/packages/llvm13/Dockerfile b/packages/llvm13/Dockerfile new file mode 100644 index 0000000..a959be0 --- /dev/null +++ b/packages/llvm13/Dockerfile @@ -0,0 +1,81 @@ +FROM imgrep/busybox:latest as busybox +FROM imgrep/gcc:latest as gcc +FROM imgrep/binutils:latest as binutils +FROM imgrep/musl:latest as musl +FROM imgrep/openssl:latest as openssl +FROM imgrep/python:latest as python +FROM imgrep/py-setuptools:latest as py-setuptools +FROM imgrep/cmake:latest as cmake +FROM imgrep/ninja:latest as ninja + +FROM busybox as build +ENV SRC_SITE=https://github.com/llvm/llvm-project/releases/download +ENV SRC_VERSION=13.0.1 +ENV SRC_HASH=326335a830f2e32d06d0a36393b5455d17dc73e0bd1211065227ee014f92cbf8 +RUN wget ${SRC_SITE}/llvmorg-${SRC_VERSION}/llvm-project-${SRC_VERSION}.src.tar.xz +RUN echo "${SRC_HASH} llvm-project-${SRC_VERSION}.src.tar.xz" | sha256sum -c +RUN tar -xf llvm-project-${SRC_VERSION}.src.tar.xz +WORKDIR llvm-project-${SRC_VERSION}.src +RUN ls -lah . +ADD . . +RUN patch -p1 < rust-feature-tables.patch +COPY --from=binutils . / +COPY --from=cmake . / +COPY --from=ninja . / +COPY --from=musl . / +COPY --from=gcc . / +COPY --from=python . / +COPY --from=py-setuptools . / + +RUN set -eux; \ + python -c "import setuptools; print(setuptools.__version__)"; \ + cmake \ + -B build \ + -G Ninja \ + -Wno-dev -S llvm \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr/ \ + -DCMAKE_INSTALL_RPATH=/usr/ \ + -DLLVM_DEFAULT_TARGET_TRIPLE="x86_64-linux-musl" \ + -DLLVM_HOST_TRIPLE="x86_64-linux-musl" \ + -DLLVM_APPEND_VC_REV=OFF \ + -DLLVM_BINUTILS_INCDIR=/usr/include \ + -DLLVM_BUILD_DOCS=OFF \ + -DLLVM_BUILD_EXAMPLES=OFF \ + -DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \ + -DLLVM_BUILD_LLVM_DYLIB=ON \ + -DLLVM_BUILD_TESTS=ON \ + -DLLVM_ENABLE_ASSERTIONS=OFF \ + -DLLVM_ENABLE_DUMP=ON \ + -DLLVM_ENABLE_EH=ON \ + -DLLVM_ENABLE_FFI=OFF \ + -DLLVM_ENABLE_LIBCXX=OFF \ + -DLLVM_ENABLE_LIBEDIT=OFF \ + -DLLVM_ENABLE_PIC=ON \ + -DLLVM_ENABLE_RTTI=ON \ + -DLLVM_ENABLE_SPHINX=OFF \ + -DLLVM_ENABLE_TERMINFO=ON \ + -DLLVM_ENABLE_ZLIB=OFF \ + -DLLVM_ENABLE_ZSTD=OFF \ + -DLLVM_INCLUDE_BENCHMARKS=OFF \ + -DLLVM_INCLUDE_EXAMPLES=OFF \ + -DLLVM_INSTALL_UTILS=ON \ + -DLLVM_LINK_LLVM_DYLIB=ON \ + -DLLVM_USE_PERF=ON; \ + cmake --build build; \ + python3 llvm/utils/lit/setup.py build + +RUN set -eux; \ + export DESTDIR="/home/user/rootfs/"; \ + cmake --install build; \ + python3 llvm/utils/lit/setup.py install --root="$DESTDIR" + +COPY --from=musl /lib/* /home/user/rootfs/lib/ +COPY --from=gcc /usr/lib/* /home/user/rootfs/usr/lib/ +COPY --from=gcc /usr/lib64/* /home/user/rootfs/usr/lib/ + +FROM scratch +COPY --from=build /home/user/rootfs / +USER 100:100 +ENTRYPOINT ["/usr/bin/llc"] +CMD ["--version"] diff --git a/packages/llvm13/rust-feature-tables.patch b/packages/llvm13/rust-feature-tables.patch new file mode 100644 index 0000000..42fa8f4 --- /dev/null +++ b/packages/llvm13/rust-feature-tables.patch @@ -0,0 +1,305 @@ + + + +rust-feature-tables.patch « llvm16 « main - aports - Alpine packages build scripts + + + + + + + + + + +
+ + + + +
+aboutsummaryrefslogtreecommitdiffstats
+ + + +
+
+
blob: 2068d51f2b9aae67132d65eb83489b22c9d227c4 (plain) + + +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+
Patch-Source: https://github.com/rust-lang/llvm-project/commit/0a157fd7a5f61973ffddf96b3d445a718193eb1a
+From 0a157fd7a5f61973ffddf96b3d445a718193eb1a Mon Sep 17 00:00:00 2001
+From: Cameron Hart <cameron.hart@gmail.com>
+Date: Sun, 10 Jul 2016 23:55:53 +1000
+Subject: [PATCH] [rust] Add accessors for MCSubtargetInfo CPU and Feature
+ tables
+
+This is needed for `-C target-cpu=help` and `-C target-feature=help` in rustc
+---
+ llvm/include/llvm/MC/MCSubtargetInfo.h | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/llvm/include/llvm/MC/MCSubtargetInfo.h b/llvm/include/llvm/MC/MCSubtargetInfo.h
+index e1f0a86141e36..1e529bf4fb31e 100644
+--- a/llvm/include/llvm/MC/MCSubtargetInfo.h
++++ b/llvm/include/llvm/MC/MCSubtargetInfo.h
+@@ -230,6 +230,14 @@ class MCSubtargetInfo {
+     return Found != ProcDesc.end() && StringRef(Found->Key) == CPU;
+   }
+ 
++  ArrayRef<SubtargetSubTypeKV> getCPUTable() const {
++    return ProcDesc;
++  }
++
++  ArrayRef<SubtargetFeatureKV> getFeatureTable() const {
++    return ProcFeatures;
++  }
++
+   virtual unsigned getHwMode() const { return 0; }
+ 
+   /// Return the cache size in bytes for the given level of cache.
+
+
+
+ +
+ + diff --git a/packages/rust/Dockerfile b/packages/rust/Dockerfile index 2a22af9..fbf99a9 100644 --- a/packages/rust/Dockerfile +++ b/packages/rust/Dockerfile @@ -9,18 +9,19 @@ FROM imgrep/python as python FROM imgrep/curl as curl FROM imgrep/zlib as zlib FROM imgrep/openssl as openssl -FROM imgrep/llvm as llvm +FROM imgrep/llvm13 as llvm13 FROM imgrep/perl as perl -FROM busybox as stage0 -ENV SRC_SITE=https://codeload.github.com/lrvick/mrustc/legacy.tar.gz -ENV SRC_VERSION=df243f74b3267b20430b818277c7e9e1de9951ad -ENV SRC_HASH=e675b5d9f53c0456d2b513ca1b7743c0257abfc96f4d4cab9807c8c37e53301d +FROM busybox as rust1.54 +ENV SRC_SITE=https://codeload.github.com/thepowersgang/mrustc/legacy.tar.gz +ENV SRC_VERSION=6cc28a575edb785eef044571b79f8df466512f11 +ENV SRC_HASH=e1d2f54031ef448cab91fbd5773105bde81bdd11af2bd01923007d7e7af90d7c COPY --from=curl . / RUN curl ${SRC_SITE}/${SRC_VERSION} -o mrustc.tar.gz RUN echo "${SRC_HASH} mrustc.tar.gz" | sha256sum -c RUN tar -xzf mrustc.tar.gz -RUN mv lrvick-mrustc-* mrustc +RUN mv thepowersgang-mrustc-* mrustc + WORKDIR mrustc COPY --from=binutils . / COPY --from=bash . / @@ -29,12 +30,10 @@ COPY --from=cmake . / COPY --from=python . / COPY --from=zlib . / COPY --from=openssl . / -COPY --from=llvm . / +COPY --from=llvm13 . / COPY --from=perl . / COPY --from=gcc . / COPY --from=musl . / - -ENV RUSTC_TARGET=x86_64-unknown-linux-musl ENV MRUSTC_TARGET_VER=1.54 ENV RUSTC_VERSION=1.54.0 ENV MRUSTC_DEBUG=Expand @@ -43,17 +42,14 @@ ENV RUSTC_INSTALL_BINDIR=bin ENV OUTDIR_SUF= RUN make RUN make RUSTCSRC +RUN rm -rf rustc-1.54.0-src/src/llvm-project RUN make -f minicargo.mk LIBS -RUN make test -RUN make local_tests -RUN make -f minicargo.mk output/rustc -RUN make -f minicargo.mk output/cargo -RUN ./output/rustc --version -RUN ./output/cargo --version +RUN make test local_tests +RUN make -f minicargo.mk LLVM_CONFIG=/usr/bin/llvm-config output/rustc +RUN make -f minicargo.mk LLVM_CONFIG=/usr/bin/llvm-config output/cargo RUN set -eux; \ mkdir -p /home/user/rootfs/usr/bin; \ mv output/rustc output/cargo /home/user/rootfs/usr/bin/ - COPY --from=musl /lib/* /home/user/rootfs/lib/ COPY --from=gcc /usr/lib/* /home/user/rootfs/usr/lib/ COPY --from=gcc /usr/lib64/* /home/user/rootfs/usr/lib/