From f746822e61b250f98bacd79bd2bf61bfa668c8df Mon Sep 17 00:00:00 2001 From: EricX-Zhao Date: Thu, 12 Feb 2026 15:40:17 +0300 Subject: [PATCH] build ros rolling image --- cross_compile/compose.yaml | 4 +- cross_compile/ros2/Dockerfile.ros_rolling | 58 ++++++++++++++++++- cross_compile/ros2/ros_cpp/package.xml | 2 - cross_compile/ros2/ros_rolling.repos | 12 ++++ .../console_bridge_vendor/CMakeLists.txt | 25 ++++++++ .../console_bridge_vendor/package.xml | 13 +++++ .../json_vendor/CMakeLists.txt | 23 ++++++++ .../vendor_packages/json_vendor/package.xml | 13 +++++ .../spdlog_vendor/CMakeLists.txt | 4 +- .../system_vendor_packages/package.xml | 3 + .../zlib_vendor/CMakeLists.txt | 22 +++++++ .../vendor_packages/zlib_vendor/package.xml | 13 +++++ 12 files changed, 186 insertions(+), 6 deletions(-) create mode 100644 cross_compile/vendor_packages/console_bridge_vendor/CMakeLists.txt create mode 100644 cross_compile/vendor_packages/console_bridge_vendor/package.xml create mode 100644 cross_compile/vendor_packages/json_vendor/CMakeLists.txt create mode 100644 cross_compile/vendor_packages/json_vendor/package.xml create mode 100644 cross_compile/vendor_packages/zlib_vendor/CMakeLists.txt create mode 100644 cross_compile/vendor_packages/zlib_vendor/package.xml diff --git a/cross_compile/compose.yaml b/cross_compile/compose.yaml index 15ebc06..8d7da09 100644 --- a/cross_compile/compose.yaml +++ b/cross_compile/compose.yaml @@ -24,7 +24,7 @@ services: dockerfile: vendor_packages/Dockerfile.vendor_packages args: CC_PLATFORM_IMAGE: cc-${PLATFORM}:latest - image: vendor-packages:${PLATFORM} + image: cc-vendor-packages:${PLATFORM} depends_on: - cc-platform @@ -36,7 +36,7 @@ services: ROS_DISTRO: rolling PLATFORM: ${PLATFORM} CC_PLATFORM_IMAGE: cc-${PLATFORM}:latest - VENDOR_PACKAGES_IMAGE: vendor-packages:${PLATFORM} + VENDOR_PACKAGES_IMAGE: cc-vendor-packages:${PLATFORM} image: cc-ros-${ROS_DISTRO}:${PLATFORM} depends_on: - vendor-packages diff --git a/cross_compile/ros2/Dockerfile.ros_rolling b/cross_compile/ros2/Dockerfile.ros_rolling index f66195e..4cca55b 100644 --- a/cross_compile/ros2/Dockerfile.ros_rolling +++ b/cross_compile/ros2/Dockerfile.ros_rolling @@ -15,11 +15,14 @@ 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/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 \ @@ -36,3 +39,56 @@ RUN MAKEFLAGS="-j6" colcon build \ -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 -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 + +COPY --from=rmw_zenoh_builder ${TARGET_SYSROOT} ${TARGET_SYSROOT} diff --git a/cross_compile/ros2/ros_cpp/package.xml b/cross_compile/ros2/ros_cpp/package.xml index 3dfae6c..07c1d15 100644 --- a/cross_compile/ros2/ros_cpp/package.xml +++ b/cross_compile/ros2/ros_cpp/package.xml @@ -17,8 +17,6 @@ opencv_vendor --> console_bridge_vendor - rcl_lifecycle - rcl_lifecycle diff --git a/cross_compile/ros2/ros_rolling.repos b/cross_compile/ros2/ros_rolling.repos index 29e4f4b..150b5b0 100644 --- a/cross_compile/ros2/ros_rolling.repos +++ b/cross_compile/ros2/ros_rolling.repos @@ -419,3 +419,15 @@ repositories: type: git url: https://github.com/ros2/console_bridge_vendor.git version: rolling + ros2/libyaml_vendor: + type: git + url: https://github.com/ros2/libyaml_vendor.git + version: rolling + ros2/spdlog_vendor: + type: git + url: https://github.com/ros2/spdlog_vendor.git + version: rolling + ros2/yaml_cpp_vendor: + type: git + url: https://github.com/ros2/yaml_cpp_vendor.git + version: rolling \ No newline at end of file diff --git a/cross_compile/vendor_packages/console_bridge_vendor/CMakeLists.txt b/cross_compile/vendor_packages/console_bridge_vendor/CMakeLists.txt new file mode 100644 index 0000000..9aa4633 --- /dev/null +++ b/cross_compile/vendor_packages/console_bridge_vendor/CMakeLists.txt @@ -0,0 +1,25 @@ +cmake_minimum_required(VERSION 3.8) +project(console_bridge_vendor) + +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_options(-Wall -Wextra -Wpedantic) +endif() + +# uncomment the following section in order to fill in +# further dependencies manually. +# find_package( REQUIRED) + +include(ExternalProject) +ExternalProject_Add( + console_bridge_vendor + GIT_REPOSITORY https://github.com/ros/console_bridge.git + GIT_TAG 81ec67f6daf3cd19ef506e00f02efb1645597b9c + + CMAKE_ARGS + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} + -DCMAKE_POSITION_INDEPENDENT_CODE=ON + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + -DBUILD_TESTING=OFF +) + diff --git a/cross_compile/vendor_packages/console_bridge_vendor/package.xml b/cross_compile/vendor_packages/console_bridge_vendor/package.xml new file mode 100644 index 0000000..d7b7818 --- /dev/null +++ b/cross_compile/vendor_packages/console_bridge_vendor/package.xml @@ -0,0 +1,13 @@ + + + + console_bridge_vendor + 0.0.0 + TODO: Package description + ericx + TODO: License declaration + + + cmake + + diff --git a/cross_compile/vendor_packages/json_vendor/CMakeLists.txt b/cross_compile/vendor_packages/json_vendor/CMakeLists.txt new file mode 100644 index 0000000..b8aa8e8 --- /dev/null +++ b/cross_compile/vendor_packages/json_vendor/CMakeLists.txt @@ -0,0 +1,23 @@ +cmake_minimum_required(VERSION 3.8) +project(json_vendor) + +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_options(-Wall -Wextra -Wpedantic) +endif() + +# uncomment the following section in order to fill in +# further dependencies manually. +# find_package( REQUIRED) + +include(FetchContent) +FetchContent_Declare( + json_vendor + URL https://github.com/nlohmann/json/archive/refs/tags/v3.12.0.tar.gz +) + +set(CMAKE_BUILD_TYPE Release) +set(JSON_BuildTests OFF CACHE BOOL "JSON_BuildTests" FORCE) +set(JSON_Install ON CACHE BOOL "JSON_Install" FORCE) + +FetchContent_MakeAvailable(json_vendor) + diff --git a/cross_compile/vendor_packages/json_vendor/package.xml b/cross_compile/vendor_packages/json_vendor/package.xml new file mode 100644 index 0000000..15c8944 --- /dev/null +++ b/cross_compile/vendor_packages/json_vendor/package.xml @@ -0,0 +1,13 @@ + + + + json_vendor + 0.0.0 + TODO: Package description + ericx + TODO: License declaration + + + cmake + + diff --git a/cross_compile/vendor_packages/spdlog_vendor/CMakeLists.txt b/cross_compile/vendor_packages/spdlog_vendor/CMakeLists.txt index fbb6e59..35903f9 100644 --- a/cross_compile/vendor_packages/spdlog_vendor/CMakeLists.txt +++ b/cross_compile/vendor_packages/spdlog_vendor/CMakeLists.txt @@ -12,13 +12,15 @@ endif() include(FetchContent) FetchContent_Declare( spdlog_vendor - URL https://github.com/gabime/spdlog/archive/refs/tags/v1.17.0.tar.gz + URL https://github.com/gabime/spdlog/archive/refs/tags/v1.12.0.tar.gz ) set(CMAKE_BUILD_TYPE Release) +set(SPDLOG_BUILD_SHARED ON CACHE BOOL "SPDLOG_BUILD_SHARED" FORCE) set(SPDLOG_BUILD_TESTS OFF CACHE BOOL "SPDLOG_BUILD_TESTS" FORCE) set(SPDLOG_BUILD_EXAMPLE OFF CACHE BOOL "SPDLOG_BUILD_EXAMPLE" FORCE) set(SPDLOG_INSTALL ON CACHE BOOL "SPDLOG_INSTALL" FORCE) +set(SPDLOG_BUILD_PIC ON CACHE BOOL "SPDLOG_BUILD_PIC" FORCE) FetchContent_MakeAvailable(spdlog_vendor) diff --git a/cross_compile/vendor_packages/system_vendor_packages/package.xml b/cross_compile/vendor_packages/system_vendor_packages/package.xml index d74aca8..59d5c04 100644 --- a/cross_compile/vendor_packages/system_vendor_packages/package.xml +++ b/cross_compile/vendor_packages/system_vendor_packages/package.xml @@ -19,6 +19,9 @@ pybind11_vendor spdlog_vendor asio_vendor + console_bridge_vendor + zlib_vendor + json_vendor cmake diff --git a/cross_compile/vendor_packages/zlib_vendor/CMakeLists.txt b/cross_compile/vendor_packages/zlib_vendor/CMakeLists.txt new file mode 100644 index 0000000..9e077c7 --- /dev/null +++ b/cross_compile/vendor_packages/zlib_vendor/CMakeLists.txt @@ -0,0 +1,22 @@ +cmake_minimum_required(VERSION 3.8) +project(zlib_vendor) + +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_options(-Wall -Wextra -Wpedantic) +endif() + +# uncomment the following section in order to fill in +# further dependencies manually. +# find_package( REQUIRED) + +include(FetchContent) +FetchContent_Declare( + zlib_vendor + URL https://github.com/madler/zlib/archive/refs/tags/v1.3.1.tar.gz +) + +set(CMAKE_BUILD_TYPE Release) +set(ZLIB_BUILD_EXAMPLES OFF CACHE BOOL "ZLIB_BUILD_EXAMPLES" FORCE) + +FetchContent_MakeAvailable(zlib_vendor) + diff --git a/cross_compile/vendor_packages/zlib_vendor/package.xml b/cross_compile/vendor_packages/zlib_vendor/package.xml new file mode 100644 index 0000000..6fc5798 --- /dev/null +++ b/cross_compile/vendor_packages/zlib_vendor/package.xml @@ -0,0 +1,13 @@ + + + + zlib_vendor + 0.0.0 + TODO: Package description + ericx + TODO: License declaration + + + cmake + +