|
| 1 | +# syntax=docker/dockerfile:1.4 |
1 | 2 | ARG IMAGE=ubuntu:22.04 |
2 | | -FROM --platform=linux/amd64 ${IMAGE} as builder |
| 3 | +ARG PLATFORM=linux/amd64 |
| 4 | +FROM --platform=${PLATFORM} ${IMAGE} AS builder |
3 | 5 | ENV INSTALL_DIR=/work/install |
4 | | -SHELL ["/bin/bash", "-o", "pipefail", "-c"] |
| 6 | + |
| 7 | +ARG CLANG_VERSION=18 |
| 8 | +ARG LLVM_BUILD=f36f80d |
5 | 9 |
|
6 | 10 | # Install dependencies |
7 | | -RUN apt-get update \ |
8 | | - && apt-get install --no-install-recommends -y curl gnupg software-properties-common lsb-release \ |
9 | | - && sudo apt remove --purge --auto-remove cmake \ |
10 | | - && sudo apt update \ |
11 | | - && sudo apt clean all \ |
12 | | - && wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null \ |
13 | | - && sudo apt-add-repository "deb https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main" \ |
14 | | - && sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6AF7F09730B3F0A4 \ |
15 | | - && sudo apt update \ |
16 | | - && sudo apt install kitware-archive-keyring \ |
17 | | - && sudo rm /etc/apt/trusted.gpg.d/kitware.gpg \ |
18 | | - && curl -sSL https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - \ |
19 | | - && echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-18 main" | tee -a /etc/apt/sources.list \ |
20 | | - && echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy-18 main" | tee -a /etc/apt/sources.list \ |
21 | | - && add-apt-repository ppa:ubuntu-toolchain-r/test \ |
22 | | - && apt-get install --no-install-recommends -y \ |
23 | | - gpg zip unzip tar git \ |
24 | | - pkg-config ninja-build ccache cmake build-essential \ |
25 | | - doctest-dev \ |
26 | | - clang-18 lld-18 \ |
27 | | - python3.11 python3.11-dev \ |
28 | | - && curl -sS https://bootstrap.pypa.io/get-pip.py | python3.11 \ |
29 | | - && apt-get clean \ |
30 | | - && rm -rf /var/lib/apt/lists/* |
| 11 | +RUN apt-get update && \ |
| 12 | + export DEBIAN_FRONTEND=noninteractive && \ |
| 13 | + apt-get install -yq \ |
| 14 | + --no-install-recommends \ |
| 15 | + software-properties-common \ |
| 16 | + pkg-config \ |
| 17 | + cmake \ |
| 18 | + make \ |
| 19 | + curl \ |
| 20 | + wget \ |
| 21 | + unzip \ |
| 22 | + clang \ |
| 23 | + flex \ |
| 24 | + bison \ |
| 25 | + xz-utils \ |
| 26 | + zlib1g-dev \ |
| 27 | + libncurses5-dev \ |
| 28 | + libssl-dev \ |
| 29 | + git \ |
| 30 | + ninja-build \ |
| 31 | + lld \ |
| 32 | + libzstd-dev \ |
| 33 | + python3.11 \ |
| 34 | + python3.11-dev \ |
| 35 | + gcc && \ |
| 36 | + apt-get clean && \ |
| 37 | + rm -rf /var/lib/apt/lists/* |
| 38 | + |
| 39 | +SHELL [ "/bin/bash", "-o", "pipefail", "-c" ] |
| 40 | + |
| 41 | +# Install clang and cmake |
| 42 | +RUN curl -sl https://apt.llvm.org/llvm.sh --output llvm.sh && \ |
| 43 | + bash llvm.sh ${CLANG_VERSION} && \ |
| 44 | + update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${CLANG_VERSION} 20 \ |
| 45 | + --slave /usr/bin/clang++ clang++ /usr/bin/clang++-${CLANG_VERSION} && \ |
| 46 | + wget https://github.com/Kitware/CMake/releases/download/v3.30.6/cmake-3.30.6-linux-x86_64.sh \ |
| 47 | + -q -O /tmp/cmake-install.sh && \ |
| 48 | + chmod u+x /tmp/cmake-install.sh && \ |
| 49 | + mkdir /opt/cmake-3.30.6 && \ |
| 50 | + /tmp/cmake-install.sh --skip-license --prefix=/opt/cmake-3.30.6 && \ |
| 51 | + rm /tmp/cmake-install.sh && \ |
| 52 | + ln -s /opt/cmake-3.30.6/bin/* /usr/local/bin |
| 53 | + |
31 | 54 | WORKDIR /work |
32 | | -RUN mkdir src build |
33 | | - |
34 | | -COPY . /work/src/multiplier |
35 | | -RUN cmake \ |
36 | | - -S '/work/src/multiplier' \ |
37 | | - -B '/work/build/multiplier' \ |
38 | | - -G Ninja \ |
39 | | - -DCMAKE_LINKER_TYPE=LLD \ |
| 55 | + |
| 56 | +# Install pre-built llvm 18.1 libraries |
| 57 | +RUN mkdir -p ${INSTALL_DIR} && \ |
| 58 | + curl -L https://github.com/trail-of-forks/llvm-project/releases/download/${LLVM_BUILD}/llvm-pasta-${LLVM_BUILD}.tar.xz -o llvm-pasta-${LLVM_BUILD}.tar.xz && \ |
| 59 | + tar -xJf llvm-pasta-*.tar.xz -C ${INSTALL_DIR} && \ |
| 60 | + rm llvm-pasta-*.tar.xz |
| 61 | + |
| 62 | +# Configure and build multiplier with pre-built llvm libraries |
| 63 | +RUN --mount=type=bind,source=.,target=/work/src/multiplier \ |
| 64 | + --mount=type=tmpfs,target=/work/build \ |
| 65 | + cmake \ |
| 66 | + -S /work/src/multiplier \ |
| 67 | + -B /work/build/multiplier \ |
| 68 | + -GNinja \ |
40 | 69 | -DCMAKE_BUILD_TYPE=Release \ |
41 | | - -DCMAKE_C_COMPILER="$(which clang-18)" \ |
42 | | - -DCMAKE_CXX_COMPILER="$(which clang++-18)" \ |
43 | | - -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \ |
44 | | - -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=TRUE |
| 70 | + -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \ |
| 71 | + -DCMAKE_PREFIX_PATH=${INSTALL_DIR} \ |
| 72 | + -DCMAKE_EXE_LINKER_FLAGS="--ld-path=$(which ld.lld-${CLANG_VERSION})" \ |
| 73 | + -DCMAKE_MODULE_LINKER_FLAGS="--ld-path=$(which ld.lld-${CLANG_VERSION})" \ |
| 74 | + -DCMAKE_SHARED_LINKER_FLAGS="--ld-path=$(which ld.lld-${CLANG_VERSION})" \ |
| 75 | + -DCMAKE_C_COMPILER="$(which clang-${CLANG_VERSION})" \ |
| 76 | + -DCMAKE_CXX_COMPILER="$(which clang++-${CLANG_VERSION})" \ |
| 77 | + -DLLVM_DIR="${INSTALL_DIR}/lib/cmake/llvm" \ |
| 78 | + -DMLIR_DIR="${INSTALL_DIR}/lib/cmake/mlir" \ |
| 79 | + -DClang_DIR="${INSTALL_DIR}/lib/cmake/clang" \ |
| 80 | + -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=TRUE \ |
| 81 | + -DMX_USE_VENDORED_CLANG=OFF \ |
| 82 | + -DMX_ENABLE_INSTALL=ON && \ |
| 83 | + cmake --build /work/build/multiplier --target install |
45 | 84 |
|
46 | | -RUN cmake --build '/work/build/multiplier' --target install |
47 | 85 | RUN chmod +x /work/install/bin/* |
48 | 86 | ENV PATH="/work/install/bin:${PATH}" |
49 | 87 |
|
50 | | -FROM --platform=linux/amd64 ${IMAGE} as release |
| 88 | +# Copy multiplier binaries from builder |
| 89 | +FROM --platform=${PLATFORM} ${IMAGE} AS release |
| 90 | +RUN apt-get update && \ |
| 91 | + export DEBIAN_FRONTEND=noninteractive && \ |
| 92 | + apt-get install -yq --no-install-recommends libatomic1 && \ |
| 93 | + apt-get clean && \ |
| 94 | + rm -rf /var/lib/apt/lists/* |
51 | 95 | COPY --from=builder /work/install /work/install |
0 commit comments