Add ROS_ROOT configuration for cross-compilation
Add ROS_ROOT argument to compose.yaml, update toolchain CMake to search in ROS_ROOT, and modify final stage of Dockerfiles to copy to ROS_ROOT instead of TARGET_SYSROOT. Also add support for ROS2 lyrical distro.
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
ARG CC_PLATFORM_IMAGE
|
||||
ARG VENDOR_PACKAGES_IMAGE
|
||||
|
||||
FROM ${CC_PLATFORM_IMAGE} AS ros_src
|
||||
|
||||
ARG ROS_DISTRO
|
||||
WORKDIR /workspace
|
||||
RUN mkdir -p /workspace/src
|
||||
COPY ros2/${ROS_DISTRO}/ros_${ROS_DISTRO}.repos .
|
||||
RUN vcs import --shallow --workers 4 --input ros_${ROS_DISTRO}.repos src
|
||||
RUN echo "Build ros ${ROS_DISTRO}"
|
||||
|
||||
FROM ${VENDOR_PACKAGES_IMAGE} AS vendor_images
|
||||
|
||||
FROM ${CC_PLATFORM_IMAGE} AS ros_builder
|
||||
|
||||
WORKDIR /workspace
|
||||
COPY --from=ros_src /workspace /workspace
|
||||
COPY --from=vendor_images ${TARGET_SYSROOT} ${TARGET_SYSROOT}
|
||||
COPY ros2/ros_cpp /workspace/src/ros_cpp
|
||||
|
||||
RUN touch src/ros2/geometry2/tf2_bullet/COLCON_IGNORE \
|
||||
&& touch src/ros2/rosbag2/rosbag2_storage_sqlite3/COLCON_IGNORE \
|
||||
&& touch src/ros-perception/image_transport_plugins/theora_image_transport/COLCON_IGNORE
|
||||
|
||||
RUN MAKEFLAGS="-j6" colcon build \
|
||||
--executor parallel \
|
||||
--parallel-workers 6 \
|
||||
--install-base ${TARGET_SYSROOT} \
|
||||
--merge-install \
|
||||
--packages-up-to ros_cpp \
|
||||
--cmake-force-configure \
|
||||
--cmake-args \
|
||||
--no-warn-unused-cli \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${CC_TOOLCHAIN_FILE} \
|
||||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
||||
-DBUILD_TESTING=OFF \
|
||||
-DTRACETOOLS_DISABLED=ON \
|
||||
-DCV_BRIDGE_DISABLE_PYTHON=ON
|
||||
|
||||
# pybind11 python soabi issue
|
||||
WORKDIR ${TARGET_SYSROOT}/lib/python3.10/site-packages/rclpy
|
||||
RUN mv _rclpy_pybind11.cpython-310-x86_64-linux-gnu.so _rclpy_pybind11.cpython-310-aarch64-linux-gnu.so
|
||||
WORKDIR ${TARGET_SYSROOT}/lib/python3.10/site-packages/rosbag2_py
|
||||
RUN mv _transport.cpython-310-x86_64-linux-gnu.so _transport.cpython-310-aarch64-linux-gnu.so
|
||||
RUN mv _info.cpython-310-x86_64-linux-gnu.so _info.cpython-310-aarch64-linux-gnu.so
|
||||
RUN mv _compression_options.cpython-310-x86_64-linux-gnu.so _compression_options.cpython-310-aarch64-linux-gnu.so
|
||||
RUN mv _storage.cpython-310-x86_64-linux-gnu.so _storage.cpython-310-aarch64-linux-gnu.so
|
||||
RUN mv _reindexer.cpython-310-x86_64-linux-gnu.so _reindexer.cpython-310-aarch64-linux-gnu.so
|
||||
RUN mv _writer.cpython-310-x86_64-linux-gnu.so _writer.cpython-310-aarch64-linux-gnu.so
|
||||
RUN mv _message_definitions.cpython-310-x86_64-linux-gnu.so _message_definitions.cpython-310-aarch64-linux-gnu.so
|
||||
RUN mv _reader.cpython-310-x86_64-linux-gnu.so _reader.cpython-310-aarch64-linux-gnu.so
|
||||
|
||||
FROM ${CC_PLATFORM_IMAGE} AS rmw_zenoh_builder
|
||||
|
||||
COPY --from=ros_builder ${TARGET_SYSROOT} ${TARGET_SYSROOT}
|
||||
|
||||
# rust install
|
||||
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y
|
||||
RUN . "$HOME/.cargo/env" \
|
||||
&& rustup install 1.75.0 \
|
||||
&& rustup default 1.75.0 \
|
||||
&& rustup target add aarch64-unknown-linux-gnu
|
||||
|
||||
RUN mkdir rmw_zenoh_ws/src -p \
|
||||
&& cd rmw_zenoh_ws/src \
|
||||
&& git clone --depth=1 -b rolling https://github.com/ros2/rmw_zenoh.git
|
||||
|
||||
ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-none-linux-gnu-gcc
|
||||
|
||||
RUN . "$HOME/.cargo/env" \
|
||||
&& . ${TARGET_SYSROOT}/local_setup.sh \
|
||||
&& colcon build \
|
||||
--install-base ${TARGET_SYSROOT} \
|
||||
--merge-install \
|
||||
--packages-up-to rmw_zenoh_cpp \
|
||||
--cmake-force-configure \
|
||||
--cmake-args \
|
||||
--no-warn-unused-cli \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${CC_TOOLCHAIN_FILE} \
|
||||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
||||
-DBUILD_TESTING=OFF \
|
||||
-DZENOHC_CUSTOM_TARGET=aarch64-unknown-linux-gnu
|
||||
|
||||
RUN cp -rf ${TARGET_SYSROOT}/opt/zenoh_cpp_vendor/include ${TARGET_SYSROOT}
|
||||
RUN cp -rf ${TARGET_SYSROOT}/opt/zenoh_cpp_vendor/lib ${TARGET_SYSROOT}
|
||||
RUN rm -rf ${TARGET_SYSROOT}/opt
|
||||
|
||||
FROM ${CC_PLATFORM_IMAGE} AS final
|
||||
|
||||
ARG ROS_ROOT
|
||||
ENV ROS_ROOT=${ROS_ROOT}
|
||||
COPY --from=rmw_zenoh_builder ${TARGET_SYSROOT} ${ROS_ROOT}
|
||||
WORKDIR /opt
|
||||
Reference in New Issue
Block a user