diff --git a/docker/autoware-openadk/Dockerfile b/docker/autoware-openadk/Dockerfile index c7ce5cca809..75e54219f7b 100644 --- a/docker/autoware-openadk/Dockerfile +++ b/docker/autoware-openadk/Dockerfile @@ -39,13 +39,20 @@ RUN --mount=type=ssh \ # Create entrypoint CMD ["/bin/bash"] -FROM base as prebuilt +FROM $BASE_IMAGE as src-imported +SHELL ["/bin/bash", "-o", "pipefail", "-c"] +WORKDIR /autoware +COPY autoware.repos /autoware/ +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends \ + ros-dev-tools \ + && apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/* "$HOME"/.cache +RUN --mount=type=ssh \ + mkdir src \ + && vcs import src < autoware.repos + +FROM base as openadk-base SHELL ["/bin/bash", "-o", "pipefail", "-c"] -ARG ROS_DISTRO ARG SETUP_ARGS -ENV CCACHE_DIR="/var/tmp/ccache" -ENV CC="/usr/lib/ccache/gcc" -ENV CXX="/usr/lib/ccache/g++" # cspell: ignore libcu libnv # Set up development environment @@ -56,14 +63,17 @@ RUN --mount=type=ssh \ && find / -name 'libcu*.a' -delete \ && find / -name 'libnv*.a' -delete -# Copy repository files -COPY autoware.repos /autoware/ +FROM openadk-base as autoware-core +SHELL ["/bin/bash", "-o", "pipefail", "-c"] +ARG ROS_DISTRO +ENV CCACHE_DIR="/var/tmp/ccache" +ENV CC="/usr/lib/ccache/gcc" +ENV CXX="/usr/lib/ccache/g++" -# Install rosdep dependencies +# Install rosdep dependencies and build core packages +COPY --from=src-imported /autoware/src/core /autoware/src/core RUN --mount=type=ssh \ - mkdir src \ - && vcs import src < autoware.repos \ - && apt-get update \ + apt-get update \ && rosdep update \ && DEBIAN_FRONTEND=noninteractive rosdep install -y --ignore-src --from-paths src --rosdistro "$ROS_DISTRO" \ && source /opt/ros/"$ROS_DISTRO"/setup.bash \ @@ -79,6 +89,37 @@ RUN --mount=type=ssh \ CMD ["/bin/bash"] +FROM openadk-base as prebuilt +SHELL ["/bin/bash", "-o", "pipefail", "-c"] +ARG ROS_DISTRO +ENV CCACHE_DIR="/var/tmp/ccache" +ENV CC="/usr/lib/ccache/gcc" +ENV CXX="/usr/lib/ccache/g++" + +# Install rosdep dependencies and build the other packages +COPY --from=src-imported /autoware/src/launcher /autoware/src/launcher +COPY --from=src-imported /autoware/src/param /autoware/src/param +COPY --from=src-imported /autoware/src/sensor_component /autoware/src/sensor_component +COPY --from=src-imported /autoware/src/sensor_kit /autoware/src/sensor_kit +COPY --from=src-imported /autoware/src/universe /autoware/src/universe +COPY --from=autoware-core /autoware/install /opt/autoware/ +# hadolint ignore=SC1091 +RUN --mount=type=ssh \ + apt-get update \ + && rosdep update \ + && DEBIAN_FRONTEND=noninteractive rosdep install -y --ignore-src --from-paths src --rosdistro "$ROS_DISTRO" \ + && source /opt/ros/"$ROS_DISTRO"/setup.bash \ + && source /opt/autoware/setup.bash \ + && colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release --cmake-args \ + " -Wno-dev" \ + " --no-warn-unused-cli" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ + && find /autoware/install -type d -exec chmod 777 {} \; \ + && chmod -R 777 /var/tmp/ccache \ + && apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/* "$HOME"/.cache \ + && rm -rf /autoware/build /autoware/src + FROM prebuilt as devel SHELL ["/bin/bash", "-o", "pipefail", "-c"] @@ -101,12 +142,11 @@ ARG LIB_DIR ARG SETUP_ARGS # Set up runtime environment and artifacts -COPY autoware.repos /autoware/ +COPY --from=src-imported /autoware/src /autoware/src RUN --mount=type=ssh \ ./setup-dev-env.sh -y --module all ${SETUP_ARGS} --download-artifacts --no-cuda-drivers --runtime openadk \ && pip uninstall -y ansible ansible-core \ - && mkdir src \ - && vcs import src < autoware.repos \ + && apt-get update \ && rosdep update \ && DEBIAN_FRONTEND=noninteractive rosdep install -y --dependency-types=exec --ignore-src --from-paths src --rosdistro "$ROS_DISTRO" \ && apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/* "$HOME"/.cache \ @@ -114,17 +154,18 @@ RUN --mount=type=ssh \ && find / -name "*.o" -type f -delete \ && find / -name "*.h" -type f -delete \ && find / -name "*.hpp" -type f -delete \ - && rm -rf /autoware/src /autoware/ansible /autoware/autoware.repos \ + && rm -rf /autoware/src /autoware/ansible \ /root/.local/pipx /opt/ros/"$ROS_DISTRO"/include /etc/apt/sources.list.d/cuda*.list \ /etc/apt/sources.list.d/docker.list /etc/apt/sources.list.d/nvidia-docker.list \ /usr/include /usr/share/doc /usr/lib/gcc /usr/lib/jvm /usr/lib/llvm* # Copy prebuilt binaries -COPY --from=prebuilt /autoware/install/ /autoware/install/ +COPY --from=autoware-core /autoware/install /opt/autoware/ +COPY --from=prebuilt /autoware/install /opt/autoware/ # Copy bash aliases COPY docker/autoware-openadk/etc/.bash_aliases /root/.bash_aliases -RUN echo "source /autoware/install/setup.bash" > /etc/bash.bashrc +RUN echo "source /opt/autoware/setup.bash" > /etc/bash.bashrc # Create entrypoint COPY docker/autoware-openadk/etc/ros_entrypoint.sh /ros_entrypoint.sh diff --git a/docker/autoware-openadk/etc/ros_entrypoint.sh b/docker/autoware-openadk/etc/ros_entrypoint.sh index cbe45ef3bdb..b8878521a48 100644 --- a/docker/autoware-openadk/etc/ros_entrypoint.sh +++ b/docker/autoware-openadk/etc/ros_entrypoint.sh @@ -10,6 +10,7 @@ GROUP_NAME=${LOCAL_GROUP} # Check if any of the variables are empty if [[ -z $USER_ID || -z $USER_NAME || -z $GROUP_ID || -z $GROUP_NAME ]]; then source "/opt/ros/$ROS_DISTRO/setup.bash" + source /opt/autoware/setup.bash source /autoware/install/setup.bash exec "$@" else @@ -22,9 +23,10 @@ else # Add sudo privileges to the user echo "$USER_NAME ALL=(ALL) NOPASSWD:ALL" >>/etc/sudoers - # Source ROS2 + # Source ROS 2 # hadolint ignore=SC1090 source "/opt/ros/$ROS_DISTRO/setup.bash" + source /opt/autoware/setup.bash source /autoware/install/setup.bash # Execute the command as the user