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 ARG ROS_DISTRO ARG ROS_ROOT ENV ROS_ROOT=${ROS_ROOT} WORKDIR /workspace COPY --from=ros_src /workspace /workspace COPY --from=vendor_images ${TARGET_SYSROOT} ${TARGET_SYSROOT} COPY ros2/${ROS_DISTRO}/patch /workspace/patch COPY ros2/ros_cpp /workspace/src/ros_cpp COPY rk3576/rk3576.toolchain.cmake /opt/cmake/ # apply patch RUN patch -p1 -d /workspace/src/ros2/rclcpp < /workspace/patch/memory_strategy.patch 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 \ && touch src/diagnostics/diagnostic_remote_logging/COLCON_IGNORE # -DPYTHON_SOABI=cpython-310-aarch64-linux-gnu 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 FROM ${CC_PLATFORM_IMAGE} AS rmw_zenoh_builder ARG ROS_ROOT ENV ROS_ROOT=${ROS_ROOT} COPY --from=ros_builder ${TARGET_SYSROOT} ${TARGET_SYSROOT} RUN python3.10 -m pip install numpy==1.21.5 # 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 lyrical https://github.com/ros2/rmw_zenoh.git # --- 给 cargo/cc-rs 补上明确的区分 --- ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-buildroot-linux-gnu-gcc \ CC_aarch64_unknown_linux_gnu=aarch64-buildroot-linux-gnu-gcc \ CXX_aarch64_unknown_linux_gnu=aarch64-buildroot-linux-gnu-g++ \ AR_aarch64_unknown_linux_gnu=aarch64-buildroot-linux-gnu-ar \ HOST_CC=gcc \ HOST_CXX=g++ \ HOST_AR=ar 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} ENV TARGET_SYSROOT=${ROS_ROOT} # pybind11 python soabi issue RUN cd ${ROS_ROOT}/lib/python3.10/site-packages/rclpy \ && mv _rclpy_pybind11.cpython-310-x86_64-linux-gnu.so _rclpy_pybind11.cpython-310-aarch64-linux-gnu.so RUN cd ${ROS_ROOT}/lib/python3.10/site-packages/rosbag2_py \ && mv _transport.cpython-310-x86_64-linux-gnu.so _transport.cpython-310-aarch64-linux-gnu.so \ && mv _info.cpython-310-x86_64-linux-gnu.so _info.cpython-310-aarch64-linux-gnu.so \ && mv _compression_options.cpython-310-x86_64-linux-gnu.so _compression_options.cpython-310-aarch64-linux-gnu.so \ && mv _storage.cpython-310-x86_64-linux-gnu.so _storage.cpython-310-aarch64-linux-gnu.so \ && mv _reindexer.cpython-310-x86_64-linux-gnu.so _reindexer.cpython-310-aarch64-linux-gnu.so \ && mv _writer.cpython-310-x86_64-linux-gnu.so _writer.cpython-310-aarch64-linux-gnu.so \ && mv _message_definitions.cpython-310-x86_64-linux-gnu.so _message_definitions.cpython-310-aarch64-linux-gnu.so \ && mv _reader.cpython-310-x86_64-linux-gnu.so _reader.cpython-310-aarch64-linux-gnu.so RUN cd ${ROS_ROOT}/lib/python3.10/site-packages/rosidl_buffer \ && mv _rosidl_buffer_py.cpython-310-x86_64-linux-gnu.so _rosidl_buffer_py.cpython-310-aarch64-linux-gnu.so WORKDIR /workspace