|
1 |
| -FROM ubuntu:22.04 |
2 |
| - |
| 1 | +FROM ubuntu:24.04 |
| 2 | + |
| 3 | +# Set environment variables |
| 4 | +ENV DEBIAN_FRONTEND=noninteractive \ |
| 5 | + LLVM_VERSION=18 \ |
| 6 | + GCC_VERSION=14 \ |
| 7 | + QT_VERSION=5.15.5 \ |
| 8 | + QT_RELEASE_URL=https://github.com/parker-int64/qt-aarch64-binary/releases/download/5.15.5 \ |
| 9 | + BAZELISK_URL=https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64 \ |
| 10 | + BUILDIFIER_URL=https://github.com/bazelbuild/buildtools/releases/latest/download/buildifier-linux-amd64 \ |
| 11 | + HOME=/root |
| 12 | + |
| 13 | +# Update and install base dependencies |
3 | 14 | RUN apt-get update && apt-get install -y \
|
4 | 15 | build-essential \
|
5 | 16 | vim \
|
@@ -31,69 +42,77 @@ RUN apt-get update && apt-get install -y \
|
31 | 42 | libxcb-xkb1 \
|
32 | 43 | libxcb-cursor0 \
|
33 | 44 | locales \
|
34 |
| - qtbase5-dev \ |
35 |
| - && apt-get clean |
36 |
| - |
37 |
| -RUN wget -qO - https://apt.llvm.org/llvm-snapshot.gpg.key | tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc \ |
38 |
| - && echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-18 main" | tee -a /etc/apt/sources.list.d/llvm.list |
39 |
| - |
40 |
| -RUN apt-get update && apt-get install -y \ |
41 |
| - llvm-18 \ |
42 |
| - llvm-18-dev \ |
43 |
| - clang-18 \ |
44 |
| - clang-tools-18 \ |
45 |
| - clang-format-18 \ |
46 |
| - clang-tidy-18 \ |
47 |
| - lld-18 \ |
48 |
| - lldb-18 |
49 |
| - |
50 |
| -# Cross-compilation |
51 |
| -RUN apt-get install -y \ |
| 45 | + qtbase5-dev \ |
52 | 46 | gcc-aarch64-linux-gnu \
|
53 |
| - g++-aarch64-linux-gnu |
54 |
| - |
55 |
| -RUN pip install yamllint |
56 |
| - |
57 |
| -RUN pip install gitlint |
58 |
| - |
59 |
| -RUN curl -fsSL https://raw.githubusercontent.com/arduino/arduino-lint/main/etc/install.sh | sh |
| 47 | + g++-aarch64-linux-gnu \ |
| 48 | + && rm -rf /var/lib/apt/lists/* |
| 49 | + |
| 50 | +# Add LLVM repository and install LLVM/Clang tools |
| 51 | +RUN wget -qO - https://apt.llvm.org/llvm-snapshot.gpg.key | tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc && \ |
| 52 | + echo "deb http://apt.llvm.org/noble/ llvm-toolchain-noble-${LLVM_VERSION} main" | tee /etc/apt/sources.list.d/llvm.list && \ |
| 53 | + apt-get update && apt-get install -y \ |
| 54 | + llvm-${LLVM_VERSION} \ |
| 55 | + llvm-${LLVM_VERSION}-dev \ |
| 56 | + clang-${LLVM_VERSION} \ |
| 57 | + clangd-${LLVM_VERSION} \ |
| 58 | + clang-tools-${LLVM_VERSION} \ |
| 59 | + clang-format-${LLVM_VERSION} \ |
| 60 | + clang-tidy-${LLVM_VERSION} \ |
| 61 | + lld-${LLVM_VERSION} \ |
| 62 | + lldb-${LLVM_VERSION} \ |
| 63 | + && rm -rf /var/lib/apt/lists/* |
| 64 | + |
| 65 | +# Set up GCC |
| 66 | +RUN apt-get update && apt-get install -y \ |
| 67 | + gcc-${GCC_VERSION} \ |
| 68 | + g++-${GCC_VERSION} \ |
| 69 | + && rm -rf /var/lib/apt/lists/* |
| 70 | + |
| 71 | +# Set up alternatives for LLVM and GCC tools |
| 72 | +RUN update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${LLVM_VERSION} 100 && \ |
| 73 | + update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-${LLVM_VERSION} 100 && \ |
| 74 | + update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-${LLVM_VERSION} 100 && \ |
| 75 | + update-alternatives --install /usr/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-${LLVM_VERSION} 100 && \ |
| 76 | + update-alternatives --install /usr/bin/llvm-cov llvm-cov /usr/bin/llvm-cov-${LLVM_VERSION} 100 && \ |
| 77 | + update-alternatives --install /usr/bin/llvm-profdata llvm-profdata /usr/bin/llvm-profdata-${LLVM_VERSION} 100 && \ |
| 78 | + update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${GCC_VERSION} 100 && \ |
| 79 | + update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-${GCC_VERSION} 100 |
| 80 | + |
| 81 | +# Install Arduino lint, yamllint, and gitlint |
| 82 | +RUN curl -fsSL https://raw.githubusercontent.com/arduino/arduino-lint/main/etc/install.sh | sh && \ |
| 83 | + pip install --break-system-packages yamllint gitlint |
60 | 84 |
|
61 | 85 | # Download and extract precompiled Qt aarch64 libs
|
62 |
| -ENV RELEASE_URL=https://github.com/parker-int64/qt-aarch64-binary/releases/download/5.15.5 |
63 |
| -RUN wget ${RELEASE_URL}/qt-5.15.5-aarch64-cross-compile-gcc-5.tar.gz -O /tmp/qt-aarch64-binary.tar.gz && \ |
| 86 | +RUN wget ${QT_RELEASE_URL}/qt-${QT_VERSION}-aarch64-cross-compile-gcc-5.tar.gz -O /tmp/qt-aarch64-binary.tar.gz && \ |
64 | 87 | mkdir -p /opt/qt && \
|
65 |
| - tar -xzf /tmp/qt-aarch64-binary.tar.gz -C /opt/qt |
| 88 | + tar -xzf /tmp/qt-aarch64-binary.tar.gz -C /opt/qt && \ |
| 89 | + rm /tmp/qt-aarch64-binary.tar.gz && \ |
| 90 | + mv /opt/qt/qt-${QT_VERSION}-aarch64/lib/* /usr/lib/aarch64-linux-gnu && \ |
| 91 | + cp /usr/aarch64-linux-gnu/lib/* /lib/aarch64-linux-gnu && \ |
| 92 | + cp /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 /lib |
66 | 93 |
|
67 |
| -# Download and install libzmq3-dev |
| 94 | +# Install libzmq3-dev |
68 | 95 | RUN echo 'deb http://download.opensuse.org/repositories/network:/messaging:/zeromq:/release-stable/xUbuntu_22.04/ /' | \
|
69 | 96 | tee /etc/apt/sources.list.d/network:messaging:zeromq:release-stable.list && \
|
70 | 97 | curl -fsSL https://download.opensuse.org/repositories/network:messaging:zeromq:release-stable/xUbuntu_22.04/Release.key | \
|
71 | 98 | gpg --dearmor | tee /etc/apt/trusted.gpg.d/network_messaging_zeromq_release-stable.gpg > /dev/null && \
|
72 |
| - apt-get update && apt-get install -y libzmq3-dev |
73 |
| - |
74 |
| -RUN rm /tmp/qt-aarch64-binary.tar.gz && \ |
75 |
| - mv /opt/qt/qt-5.15.5-aarch64/lib/* /usr/lib/aarch64-linux-gnu |
| 99 | + apt-get update && apt-get install -y libzmq3-dev && \ |
| 100 | + rm -rf /var/lib/apt/lists/* |
76 | 101 |
|
77 |
| -RUN cp /usr/aarch64-linux-gnu/lib/* /lib/aarch64-linux-gnu && \ |
78 |
| - cp /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 /lib |
79 |
| - |
80 |
| -RUN wget https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64 && \ |
| 102 | +# Install Bazelisk |
| 103 | +RUN wget ${BAZELISK_URL} && \ |
81 | 104 | chmod 755 bazelisk-linux-amd64 && \
|
82 |
| - mv bazelisk-linux-amd64 /usr/bin/bazelisk |
83 |
| - |
84 |
| -ENV HOME=/root |
85 |
| - |
86 |
| -RUN update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-18 100 |
87 |
| - |
88 |
| -RUN update-alternatives --install /usr/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-18 100 |
89 |
| - |
90 |
| -RUN update-alternatives --install /usr/bin/llvm-cov llvm-cov /usr/bin/llvm-cov-18 100 |
91 |
| - |
92 |
| -RUN update-alternatives --install /usr/bin/llvm-profdata llvm-profdata /usr/bin/llvm-profdata-18 100 |
| 105 | + mv bazelisk-linux-amd64 /usr/bin/bazelisk && \ |
| 106 | + ln -s /usr/bin/bazelisk /usr/bin/bazel |
93 | 107 |
|
94 |
| -RUN echo "alias bazel='bazelisk'" >> $HOME/.bashrc |
| 108 | +# Install Buildifier |
| 109 | +RUN wget ${BUILDIFIER_URL} && \ |
| 110 | + chmod 755 buildifier-linux-amd64 && \ |
| 111 | + mv buildifier-linux-amd64 /usr/bin/buildifier |
95 | 112 |
|
96 |
| -RUN echo 'if [ -d "$HOME/bin" ] ; then\n PATH="$HOME/bin:$PATH"\nfi' >> $HOME/.bashrc && \ |
97 |
| - echo 'if [ -d "$HOME/usr/bin" ] ; then\n PATH="$HOME/usr/bin:$PATH"\nfi' >> $HOME/.bashrc |
| 113 | +# Add bin paths to PATH |
| 114 | +RUN echo 'if [ -d "$HOME/bin" ]; then PATH="$HOME/bin:$PATH"; fi' >> $HOME/.bashrc && \ |
| 115 | + echo 'if [ -d "$HOME/usr/bin" ]; then PATH="$HOME/usr/bin:$PATH"; fi' >> $HOME/.bashrc |
98 | 116 |
|
| 117 | +# Configure Git |
99 | 118 | RUN git config --global --add safe.directory /Team04
|
0 commit comments