diff --git a/docker/Dockerfile b/docker/Dockerfile index be8fd88541d..785c8bc67c3 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -118,6 +118,25 @@ RUN rosdep keys --dependency-types=exec --ignore-src --from-paths src \ > /rosdep-universe-localization-mapping-exec-depend-packages.txt \ && cat /rosdep-universe-localization-mapping-exec-depend-packages.txt +FROM rosdep-depend AS rosdep-universe-planning-control-depend +SHELL ["/bin/bash", "-o", "pipefail", "-c"] +ARG ROS_DISTRO + +COPY src/universe/autoware.universe/control /autoware/src/universe/autoware.universe/control +COPY src/universe/autoware.universe/planning /autoware/src/universe/autoware.universe/planning +# TODO(youtalk): Remove COPYs when https://github.com/autowarefoundation/autoware.universe/issues/8805 is resolved +COPY src/universe/autoware.universe/map/map_loader /autoware/src/universe/autoware.universe/map/map_loader +COPY src/universe/autoware.universe/map/autoware_map_projection_loader /autoware/src/universe/autoware.universe/map/autoware_map_projection_loader +COPY src/universe/autoware.universe/sensing/autoware_pcl_extensions /autoware/src/universe/autoware.universe/sensing/autoware_pcl_extensions +COPY src/universe/autoware.universe/sensing/autoware_pointcloud_preprocessor /autoware/src/universe/autoware.universe/sensing/autoware_pointcloud_preprocessor +RUN rosdep keys --ignore-src --from-paths src \ + | xargs rosdep resolve --rosdistro ${ROS_DISTRO} \ + | grep -v '^#' \ + | sed 's/ \+/\n/g'\ + | sort \ + > /rosdep-universe-planning-control-depend-packages.txt \ + && cat /rosdep-universe-planning-control-depend-packages.txt + FROM rosdep-depend AS rosdep-universe-depend SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO @@ -277,6 +296,40 @@ RUN --mount=type=cache,target=${CCACHE_DIR} \ && du -sh ${CCACHE_DIR} && ccache -s \ && rm -rf /autoware/build +FROM universe-common-devel AS universe-planning-control-devel +SHELL ["/bin/bash", "-o", "pipefail", "-c"] +ARG ROS_DISTRO +ENV CCACHE_DIR="/root/.ccache" + +# Install rosdep dependencies +COPY --from=rosdep-universe-planning-control-depend /rosdep-universe-planning-control-depend-packages.txt /tmp/rosdep-universe-planning-control-depend-packages.txt +# hadolint ignore=SC2002 +RUN --mount=type=ssh \ + apt-get update \ + && cat /tmp/rosdep-universe-planning-control-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ + && apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/* "$HOME"/.cache + +# hadolint ignore=SC1091 +RUN --mount=type=cache,target=${CCACHE_DIR} \ + --mount=type=bind,from=rosdep-universe-planning-control-depend,source=/autoware/src/universe/autoware.universe/control,target=/autoware/src/universe/autoware.universe/control \ + --mount=type=bind,from=rosdep-universe-planning-control-depend,source=/autoware/src/universe/autoware.universe/planning,target=/autoware/src/universe/autoware.universe/planning \ + # TODO(youtalk): Remove --mount options when https://github.com/autowarefoundation/autoware.universe/issues/8805 is resolved + --mount=type=bind,from=rosdep-universe-planning-control-depend,source=/autoware/src/universe/autoware.universe/map/map_loader,target=/autoware/src/universe/autoware.universe/map/map_loader \ + --mount=type=bind,from=rosdep-universe-planning-control-depend,source=/autoware/src/universe/autoware.universe/map/autoware_map_projection_loader,target=/autoware/src/universe/autoware.universe/map/autoware_map_projection_loader \ + --mount=type=bind,from=rosdep-universe-planning-control-depend,source=/autoware/src/universe/autoware.universe/sensing/autoware_pcl_extensions,target=/autoware/src/universe/autoware.universe/sensing/autoware_pcl_extensions \ + --mount=type=bind,from=rosdep-universe-planning-control-depend,source=/autoware/src/universe/autoware.universe/sensing/autoware_pointcloud_preprocessor,target=/autoware/src/universe/autoware.universe/sensing/autoware_pointcloud_preprocessor \ + source /opt/ros/"$ROS_DISTRO"/setup.bash \ + && source /opt/autoware/setup.bash \ + && du -sh ${CCACHE_DIR} && ccache -s \ + && colcon build --cmake-args \ + " -Wno-dev" \ + " --no-warn-unused-cli" \ + --merge-install \ + --install-base /opt/autoware \ + --mixin release compile-commands ccache \ + && du -sh ${CCACHE_DIR} && ccache -s \ + && rm -rf /autoware/build + ENTRYPOINT ["/ros_entrypoint.sh"] CMD ["/bin/bash"] @@ -295,16 +348,15 @@ RUN --mount=type=ssh \ COPY --from=universe-sensing-perception-devel /opt/autoware /opt/autoware COPY --from=universe-localization-mapping-devel /opt/autoware /opt/autoware +COPY --from=universe-planning-control-devel /opt/autoware /opt/autoware # hadolint ignore=SC1091 RUN --mount=type=cache,target=${CCACHE_DIR} \ --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/launcher,target=/autoware/src/launcher \ --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/param,target=/autoware/src/param \ --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/sensor_component,target=/autoware/src/sensor_component \ --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/sensor_kit,target=/autoware/src/sensor_kit \ - --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/universe/autoware.universe/control,target=/autoware/src/universe/autoware.universe/control \ --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/universe/autoware.universe/evaluator,target=/autoware/src/universe/autoware.universe/evaluator \ --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/universe/autoware.universe/launch,target=/autoware/src/universe/autoware.universe/launch \ - --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/universe/autoware.universe/planning,target=/autoware/src/universe/autoware.universe/planning \ --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/universe/autoware.universe/simulator,target=/autoware/src/universe/autoware.universe/simulator \ --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/universe/autoware.universe/system,target=/autoware/src/universe/autoware.universe/system \ --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/universe/autoware.universe/tools,target=/autoware/src/universe/autoware.universe/tools \ diff --git a/docker/Dockerfile.svg b/docker/Dockerfile.svg index 6975aaaf038..87eddd635b6 100644 --- a/docker/Dockerfile.svg +++ b/docker/Dockerfile.svg @@ -4,264 +4,324 @@ - - + + G - + cluster_legend - + key -FROM ...  -COPY --from=...  -RUN --mount=(.*)from=...  +FROM ...  +COPY --from=...  +RUN --mount=(.*)from=...  key2 -  -  -  +  +  +  key:e->key2:w - - + + key:e->key2:w - - + + key:e->key2:w - - + + external_image_0 - -$BASE_IMAGE + +$BASE_IMAGE stage_0 - -base + +base external_image_0->stage_0 - - + + stage_1 - -rosdep-depend + +rosdep-depend external_image_0->stage_1 - - + + - + -stage_5 - -core-devel +stage_6 + +core-devel - + -stage_0->stage_5 - - +stage_0->stage_6 + + - + -stage_10 - -universe-sensing-perception +stage_12 + +universe-sensing-perception - + -stage_0->stage_10 - - +stage_0->stage_12 + + - + -stage_11 - -universe +stage_13 + +universe-localization-mapping - + -stage_0->stage_11 - - - +stage_0->stage_13 + + - - -stage_1->stage_5 - - + + +stage_14 + +universe + + + +stage_0->stage_14 + + + + + + +stage_1->stage_6 + + - + stage_2 - -rosdep-universe-sensing-perception-depend + +rosdep-universe-sensing-perception-depend - + stage_1->stage_2 - - - + + + - + stage_3 - -rosdep-universe-localization-mapping-depend + +rosdep-universe-localization-mapping-depend - + stage_1->stage_3 - - + + - + stage_4 - -rosdep-universe-depend + +rosdep-universe-planning-control-depend - + stage_1->stage_4 - - - - - -stage_6 - -universe-common-devel - - - -stage_1->stage_6 - - + + - - -stage_5->stage_6 - - + + +stage_5 + +rosdep-universe-depend - - -stage_2->stage_10 - - + + +stage_1->stage_5 + + - + stage_7 - -universe-sensing-perception-devel + +universe-common-devel + + + +stage_1->stage_7 + + - - -stage_2->stage_7 - - + + +stage_6->stage_7 + + + + + +stage_2->stage_12 + + - + stage_8 - -universe-localization-mapping-devel + +universe-sensing-perception-devel - - -stage_3->stage_8 - - + + +stage_2->stage_8 + + - - -stage_4->stage_11 - - + + +stage_3->stage_13 + + - + stage_9 - -universe-devel + +universe-localization-mapping-devel - - -stage_4->stage_9 - - + + +stage_3->stage_9 + + - - -stage_6->stage_7 - - + + +stage_10 + +universe-planning-control-devel - - -stage_6->stage_8 - - + + +stage_4->stage_10 + + - - -stage_6->stage_9 - - + + +stage_5->stage_14 + + - - -stage_7->stage_10 - - + + +stage_11 + +universe-devel + + + +stage_5->stage_11 + + + + + +stage_7->stage_8 + + - + stage_7->stage_9 - - + + - - -stage_8->stage_9 - - + + +stage_7->stage_10 + + + + + +stage_7->stage_11 + + + + + +stage_8->stage_12 + + + + + +stage_8->stage_11 + + + + + +stage_9->stage_13 + + - + stage_9->stage_11 - - + + + + + +stage_10->stage_11 + + + + + +stage_11->stage_14 + + diff --git a/docker/README.md b/docker/README.md index f9e58ca22ee..a1a114c739a 100644 --- a/docker/README.md +++ b/docker/README.md @@ -65,6 +65,13 @@ This stage installs the dependency packages based on `/rosdep-universe-localizat This stage is a Autoware Universe Localization/Mapping runtime container. It only includes the dependencies given by `/rosdep-universe-localization-mapping-exec-depend-packages.txt` and the binaries built in the `universe-localization-mapping-devel` stage. +### `universe-planning-control-devel` + +This stage installs the dependency packages based on `/rosdep-universe-planning-control-depend-packages.txt` and build the packages under the following directories of `autoware.repos`. + +- `universe/autoware.universe/control` +- `universe/autoware.universe/planning` + ### `universe-devel` This stage installs the dependency packages based on `/rosdep-universe-depend-packages.txt` and build the remaining packages of `autoware.repos`: @@ -73,10 +80,8 @@ This stage installs the dependency packages based on `/rosdep-universe-depend-pa - `param` - `sensor_component` - `sensor_kit` -- `universe/autoware.universe/control` - `universe/autoware.universe/evaluator` - `universe/autoware.universe/launch` -- `universe/autoware.universe/planning` - `universe/autoware.universe/simulator` - `universe/autoware.universe/system` - `universe/autoware.universe/tools`