diff --git a/Dockerfile.agnos b/Dockerfile.agnos index 7f498ec..23194d2 100644 --- a/Dockerfile.agnos +++ b/Dockerfile.agnos @@ -37,31 +37,6 @@ RUN apt-get -o Dpkg::Options::="--force-overwrite" install -yq \ /tmp/agnos/libssl1.1_1.1.1f-1ubuntu2.22_arm64.deb \ /tmp/agnos/libffi6_3.2.1-8_arm64.deb -# ################## # -# #### Compiler #### # -# ################## # -FROM agnos-base AS agnos-compiler - -RUN apt-fast update && apt-fast install --no-install-recommends -yq checkinstall - -# Individual compiling images -FROM agnos-compiler AS agnos-compiler-pyqt5 -COPY ./userspace/compile-pyqt5.sh /tmp/agnos/ -RUN /tmp/agnos/compile-pyqt5.sh - -FROM agnos-compiler AS agnos-compiler-capnp -COPY ./userspace/compile-capnp.sh /tmp/agnos/ -RUN /tmp/agnos/compile-capnp.sh - -FROM agnos-compiler AS agnos-compiler-ffmpeg -COPY ./userspace/compile-ffmpeg.sh /tmp/agnos/ -RUN /tmp/agnos/compile-ffmpeg.sh - -FROM agnos-compiler AS agnos-compiler-qtwayland5 -COPY ./userspace/compile-qtwayland5.sh /tmp/agnos/ -COPY ./userspace/qtwayland/patch* /tmp/agnos/ -RUN /tmp/agnos/compile-qtwayland5.sh - # ################### # # ###### AGNOS ###### # # ################### # @@ -79,18 +54,18 @@ COPY ./userspace/compile-modemmanager.sh /tmp/agnos/ RUN /tmp/agnos/compile-modemmanager.sh # Pre-compiled capnp (must be before python install) -COPY --from=agnos-compiler-capnp /tmp/capnproto.deb /tmp/capnproto.deb +COPY --from=agnos-compiler /tmp/capnproto.deb /tmp/capnproto.deb RUN cd /tmp && apt-get -o Dpkg::Options::="--force-overwrite" install -yq ./capnproto.deb # Use other pre-compiled packages -COPY --from=agnos-compiler-ffmpeg /tmp/ffmpeg.deb /tmp/ffmpeg.deb +COPY --from=agnos-compiler /tmp/ffmpeg.deb /tmp/ffmpeg.deb RUN cd /tmp && apt-get -o Dpkg::Options::="--force-overwrite" install -yq ./ffmpeg.deb ARG XDG_DATA_HOME="/usr/local" ARG PATH="$XDG_DATA_HOME/.cargo/bin:$PATH" # Use pre-compiled PyQt5 wheel -COPY --from=agnos-compiler-pyqt5 /tmp/PyQt5-5.15.9/PyQt5-5.15.9-cp38-abi3-manylinux_2_17_aarch64.whl /tmp/PyQt5-5.15.9-cp38-abi3-manylinux_2_17_aarch64.whl +COPY --from=agnos-compiler /tmp/PyQt5-5.15.9-cp38-abi3-manylinux_2_17_aarch64.whl /tmp/PyQt5-5.15.9-cp38-abi3-manylinux_2_17_aarch64.whl RUN export MAKEFLAGS="-j$(nproc)" && \ source $XDG_DATA_HOME/venv/bin/activate && \ @@ -115,7 +90,7 @@ RUN source $XDG_DATA_HOME/venv/bin/activate && \ COPY ./userspace/install_extras.sh /tmp/agnos/ RUN /tmp/agnos/install_extras.sh -COPY --from=agnos-compiler-qtwayland5 /tmp/qtwayland5.deb /tmp/qtwayland5.deb +COPY --from=agnos-compiler /tmp/qtwayland5.deb /tmp/qtwayland5.deb RUN cd /tmp && apt-get -o Dpkg::Options::="--force-overwrite" install -yq --allow-downgrades ./qtwayland5.deb # Patched libeglSubDriverWayland with fixed nullptr deref in CommitBuffer diff --git a/Dockerfile.compiler b/Dockerfile.compiler new file mode 100644 index 0000000..2a96351 --- /dev/null +++ b/Dockerfile.compiler @@ -0,0 +1,117 @@ +# check=error=true + +FROM ubuntu:24.04 AS agnos-compiler + +RUN rm /etc/apt/apt.conf.d/docker-clean + +# Common packages +RUN apt-get update && apt-get install -yq --no-install-recommends \ + build-essential \ + ca-certificates \ + clang \ + curl \ + checkinstall \ + wget + +#capnproto +FROM agnos-compiler AS agnos-compiler-capnp + +RUN apt-get update && apt-get install -yq --no-install-recommends \ + libc6-dev \ + libssl-dev \ + zlib1g-dev + +COPY ./userspace/compile-capnp.sh /tmp/agnos/ +RUN /tmp/agnos/compile-capnp.sh + +# ffmpeg +FROM agnos-compiler AS agnos-compiler-ffmpeg + +RUN apt-get update && apt-get install -yq --no-install-recommends \ + libass-dev \ + libfreetype6-dev \ + libgnutls28-dev \ + libmp3lame-dev \ + libsdl2-dev \ + libtool \ + libva-dev \ + libvdpau-dev \ + libvorbis-dev \ + libxcb1-dev \ + libxcb-shm0-dev \ + libxcb-xfixes0-dev \ + liblzma-dev \ + rsync \ + texinfo \ + zlib1g-dev + +COPY ./userspace/compile-ffmpeg.sh /tmp/agnos/ +RUN /tmp/agnos/compile-ffmpeg.sh + +# PyQt5 +FROM agnos-compiler AS agnos-compiler-pyqt5 + +RUN apt-get update && apt-get install -yq --no-install-recommends \ + libdbus-1-3 \ + libgles-dev \ + libglib2.0-dev \ + libharfbuzz-dev \ + libpcre2-dev \ + libpng-dev \ + libpulse-dev + +COPY ./userspace/qtwayland/*.deb /tmp/agnos/ +RUN apt-get -o Dpkg::Options::="--force-overwrite" install -yq \ + /tmp/agnos/qt-5.12.8.deb \ + /tmp/agnos/libwayland-1.9.0-1.deb \ + /tmp/agnos/libicu66_66.1-2ubuntu2.1_arm64.deb \ + /tmp/agnos/libssl1.1_1.1.1f-1ubuntu2.22_arm64.deb \ + /tmp/agnos/libffi6_3.2.1-8_arm64.deb + +COPY ./userspace/openpilot_python_dependencies.sh /tmp/agnos/ +RUN /tmp/agnos/openpilot_python_dependencies.sh + +COPY ./userspace/compile-pyqt5.sh /tmp/agnos/ +RUN /tmp/agnos/compile-pyqt5.sh + +# qtwayland5 +FROM agnos-compiler AS agnos-compiler-qtwayland5 + +RUN dpkg --add-architecture armhf + +RUN apt-get update && apt-get install -yq --no-install-recommends \ + git \ + pkg-config \ + libc6:armhf \ + libdbus-1-3 \ + libegl-dev \ + libexpat1:armhf \ + libfontconfig-dev \ + libfreetype6 \ + libgles-dev \ + libglib2.0-dev \ + libharfbuzz-dev \ + libpcre2-dev \ + libwayland-dev \ + libxcomposite-dev \ + libxkbcommon-dev \ + zlib1g-dev + +COPY ./userspace/qtwayland/*.deb /tmp/agnos/ +RUN apt-get -o Dpkg::Options::="--force-overwrite" install -yq \ + /tmp/agnos/qt-5.12.8.deb \ + /tmp/agnos/libwayland-1.9.0-1.deb \ + /tmp/agnos/libicu66_66.1-2ubuntu2.1_arm64.deb \ + /tmp/agnos/libssl1.1_1.1.1f-1ubuntu2.22_arm64.deb \ + /tmp/agnos/libffi6_3.2.1-8_arm64.deb + +COPY ./userspace/compile-qtwayland5.sh /tmp/agnos/ +COPY ./userspace/qtwayland/patch* /tmp/agnos/ +RUN /tmp/agnos/compile-qtwayland5.sh + +# Gather packages +FROM agnos-compiler +COPY --from=agnos-compiler-capnp /tmp/capnproto.deb /tmp/ +COPY --from=agnos-compiler-ffmpeg /tmp/ffmpeg.deb /tmp/ +COPY --from=agnos-compiler-pyqt5 /tmp/PyQt5-5.15.9/PyQt5-5.15.9-cp38-abi3-manylinux_2_17_aarch64.whl /tmp/ +COPY --from=agnos-compiler-qtwayland5 /tmp/qtwayland5.deb /tmp/ diff --git a/build_system.sh b/build_system.sh index 03c8e31..5db38b5 100755 --- a/build_system.sh +++ b/build_system.sh @@ -55,8 +55,18 @@ if [ "$ARCH" = "x86_64" ]; then docker run --rm --privileged multiarch/qemu-user-static --reset -p yes > /dev/null fi -# Check agnos-builder Dockerfile export DOCKER_BUILDKIT=1 + +# Check agnos-compiler Dockerfile +docker build -f Dockerfile.compiler --check $DIR + +# Build agnos-compiler docker +echo "Building agnos-compiler docker image" +docker build -f Dockerfile.compiler -t agnos-compiler $DIR +echo "Creating agnos-compiler container" +COMPILER_CONTAINER_ID=$(docker container create --entrypoint /bin/bash agnos-compiler:latest) + +# Check agnos-builder Dockerfile docker build -f Dockerfile.agnos --check $DIR # Start agnos-builder docker build and create container