From 8868ca2a35307c2057a02ba621687f410fda7146 Mon Sep 17 00:00:00 2001 From: EricX-Zhao Date: Sat, 11 Jul 2026 20:29:12 +0300 Subject: [PATCH] Switch RK3576 toolchain to Buildroot SDK and migrate to Python 3.10 --- cross_compile/cc_base.Dockerfile | 2 +- cross_compile/rk3576/cc_rk3576.Dockerfile | 16 +++---- cross_compile/rk3576/rk3576.toolchain.cmake | 9 ++-- .../ros2/lyrical/ros_lyrical.Dockerfile | 45 +++++++++++-------- .../vendor/vendor_packages.Dockerfile | 17 +++---- 5 files changed, 47 insertions(+), 42 deletions(-) diff --git a/cross_compile/cc_base.Dockerfile b/cross_compile/cc_base.Dockerfile index 08d1b41..0c9367a 100644 --- a/cross_compile/cc_base.Dockerfile +++ b/cross_compile/cc_base.Dockerfile @@ -35,5 +35,5 @@ RUN apt update && apt install -y \ python3-future \ python3-lark \ python3-argcomplete \ - autoconf automake libtool patchelf ninja-build python3.10-venv python3.11 python3.11-dev \ + autoconf automake libtool patchelf ninja-build python3.10-venv \ ros-dev-tools diff --git a/cross_compile/rk3576/cc_rk3576.Dockerfile b/cross_compile/rk3576/cc_rk3576.Dockerfile index 3aa5434..929d02c 100644 --- a/cross_compile/rk3576/cc_rk3576.Dockerfile +++ b/cross_compile/rk3576/cc_rk3576.Dockerfile @@ -10,20 +10,20 @@ COPY rk3576/aarch64-buildroot-linux-gnu_sdk-buildroot.tar.gz /opt/ RUN tar -zxf aarch64-buildroot-linux-gnu_sdk-buildroot.tar.gz \ && rm /opt/aarch64-buildroot-linux-gnu_sdk-buildroot.tar.gz -# use python3.11 -RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1 \ - && update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 2 \ - && update-alternatives --set python3 /usr/bin/python3.11 \ - && rm -f /usr/bin/python3-config \ - && ln -s /usr/bin/python3.11-config /usr/bin/python3-config - COPY rk3576/rk3576.toolchain.cmake /opt/cmake/ ENV CC_TOOLCHAIN_FILE=/opt/cmake/rk3576.toolchain.cmake ENV TARGET_SYSROOT=/opt/rk3576 ENV PATH="${PATH}:/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/bin" -ENV PYTHON_PKG_PATH=${TARGET_SYSROOT}/lib/python3.11/site-packages +ENV PYTHON_PKG_PATH=${TARGET_SYSROOT}/lib/python3.10/site-packages +ENV CC=aarch64-buildroot-linux-gnu-gcc \ + CXX=aarch64-buildroot-linux-gnu-g++ \ + AR=aarch64-buildroot-linux-gnu-ar \ + RANLIB=aarch64-buildroot-linux-gnu-ranlib \ + HOSTARCH=aarch64-buildroot-linux-gnu \ + BUILDARCH=x86_64-linux-gnu + ARG BUILD_JOBS=6 ENV MAKEFLAGS="-j${BUILD_JOBS}" diff --git a/cross_compile/rk3576/rk3576.toolchain.cmake b/cross_compile/rk3576/rk3576.toolchain.cmake index b39f51d..f682f7a 100644 --- a/cross_compile/rk3576/rk3576.toolchain.cmake +++ b/cross_compile/rk3576/rk3576.toolchain.cmake @@ -15,10 +15,10 @@ add_link_options($<$:-s>) add_link_options("LINKER:-rpath-link,$ENV{TARGET_SYSROOT}/lib") # use buildroot sdk python3.11 -set(Python3_EXECUTABLE /usr/bin/python3.11) -set(Python3_INCLUDE_DIR ${CMAKE_SYSROOT}/usr/include/python3.11) -set(Python3_LIBRARY ${CMAKE_SYSROOT}/usr/lib/libpython3.11.so) -set(Python3_NumPy_INCLUDE_DIR ${CMAKE_SYSROOT}/usr/lib/python3.11/site-packages/numpy/core/include) +set(Python3_EXECUTABLE /usr/bin/python3.10) +# set(Python3_INCLUDE_DIR ${CMAKE_SYSROOT}/usr/include/python3.11) +# set(Python3_LIBRARY ${CMAKE_SYSROOT}/usr/lib/libpython3.11.so) +set(Python3_NumPy_INCLUDE_DIR $ENV{TARGET_SYSROOT}/lib/python3.10/site-packages/numpy/core/include) # use cross compile packages set(LZ4_INCLUDE_DIR $ENV{TARGET_SYSROOT}/include) @@ -27,3 +27,4 @@ set(flann_DIR $ENV{TARGET_SYSROOT}/lib/cmake/flann) set(FLANN_INCLUDE_DIR $ENV{TARGET_SYSROOT}/include) set(FLANN_LIBRARY $ENV{TARGET_SYSROOT}/lib/libflann.so) set(yaml-cpp_DIR $ENV{TARGET_SYSROOT}/lib/cmake/yaml-cpp) +set(OpenCV_DIR $ENV{TARGET_SYSROOT}/lib/cmake/opencv4) diff --git a/cross_compile/ros2/lyrical/ros_lyrical.Dockerfile b/cross_compile/ros2/lyrical/ros_lyrical.Dockerfile index 81d8d1b..1ad8118 100644 --- a/cross_compile/ros2/lyrical/ros_lyrical.Dockerfile +++ b/cross_compile/ros2/lyrical/ros_lyrical.Dockerfile @@ -23,8 +23,7 @@ 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/ -# RUN python3.11 -m pip install lark +COPY rk3576/rk3576.toolchain.cmake /opt/cmake/ # apply patch RUN patch -p1 -d /workspace/src/ros2/rclcpp < /workspace/patch/memory_strategy.patch @@ -51,26 +50,13 @@ RUN MAKEFLAGS="-j6" colcon build \ -DTRACETOOLS_DISABLED=ON \ -DCV_BRIDGE_DISABLE_PYTHON=ON -# pybind11 python soabi issue -RUN cd ${TARGET_SYSROOT}/lib/python3.11/site-packages/rclpy \ - mv _rclpy_pybind11.cpython-311-x86_64-linux-gnu.so _rclpy_pybind11.cpython-311-aarch64-linux-gnu.so -RUN cd ${TARGET_SYSROOT}/lib/python3.11/site-packages/rosbag2_py \ - && mv _transport.cpython-311-x86_64-linux-gnu.so _transport.cpython-311-aarch64-linux-gnu.so \ - && mv _info.cpython-311-x86_64-linux-gnu.so _info.cpython-311-aarch64-linux-gnu.so \ - && mv _compression_options.cpython-311-x86_64-linux-gnu.so _compression_options.cpython-311-aarch64-linux-gnu.so \ - && mv _storage.cpython-311-x86_64-linux-gnu.so _storage.cpython-311-aarch64-linux-gnu.so \ - && mv _reindexer.cpython-311-x86_64-linux-gnu.so _reindexer.cpython-311-aarch64-linux-gnu.so \ - && mv _writer.cpython-311-x86_64-linux-gnu.so _writer.cpython-311-aarch64-linux-gnu.so \ - && mv _message_definitions.cpython-311-x86_64-linux-gnu.so _message_definitions.cpython-311-aarch64-linux-gnu.so \ - && mv _reader.cpython-311-x86_64-linux-gnu.so _reader.cpython-311-aarch64-linux-gnu.so -RUN cd ${TARGET_SYSROOT}/lib/python3.11/site-packages/rosidl_buffer \ - && mv _rosidl_buffer_py.cpython-311-x86_64-linux-gnu.so _rosidl_buffer_py.cpython-311-aarch64-linux-gnu.so - 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" \ @@ -82,7 +68,14 @@ 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 -ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-buildroot-linux-gnu-gcc +# --- 给 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 \ @@ -109,4 +102,20 @@ 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 diff --git a/cross_compile/vendor/vendor_packages.Dockerfile b/cross_compile/vendor/vendor_packages.Dockerfile index 4e00c2c..cde19aa 100644 --- a/cross_compile/vendor/vendor_packages.Dockerfile +++ b/cross_compile/vendor/vendor_packages.Dockerfile @@ -63,7 +63,7 @@ RUN wget https://archives.boost.io/release/1.83.0/source/boost_1_83_0.tar.gz RUN tar -zxf boost_1_83_0.tar.gz \ && cd boost_1_83_0 \ && ./bootstrap.sh --prefix=${TARGET_SYSROOT} --without-libraries=python \ - && sed -i "/using gcc/c using gcc : arm64 : aarch64-buildroot-linux-gnu-gcc ;" project-config.jam \ + && sed -i "/using gcc/c using gcc : arm64 : ${CC} ;" project-config.jam \ && ./b2 cxxflags="-fPIC" cflags="-fPIC" link=static install FROM ${CC_PLATFORM_IMAGE} AS pcl_vendor @@ -106,7 +106,7 @@ FROM ${CC_PLATFORM_IMAGE} AS ffi_builder RUN git clone --depth=1 https://github.com/libffi/libffi.git \ && cd libffi \ && ./autogen.sh \ - && ./configure --host=aarch64-none-linux-gnu --build=x86_64-linux-gnu --disable-docs --prefix=${TARGET_SYSROOT} \ + && ./configure --host=${HOSTARCH} --build=x86_64-linux-gnu --disable-docs --prefix=${TARGET_SYSROOT} \ && make -j$(nproc) && make install # Python 3.12 @@ -125,12 +125,6 @@ RUN wget https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tar.xz \ # 配置和编译 Python WORKDIR /tmp/Python-3.10.12 -ENV CC=aarch64-none-linux-gnu-gcc \ - CXX=aarch64-none-linux-gnu-g++ \ - AR=aarch64-none-linux-gnu-ar \ - RANLIB=aarch64-none-linux-gnu-ranlib \ - HOSTARCH=aarch64-none-linux-gnu \ - BUILDARCH=x86_64-linux-gnu ENV CPPFLAGS="-I${TARGET_SYSROOT}/include" \ LDFLAGS="-L${TARGET_SYSROOT}/lib -Wl,-rpath-link=${TARGET_SYSROOT}/lib" \ @@ -140,7 +134,7 @@ ENV CPPFLAGS="-I${TARGET_SYSROOT}/include" \ PKG_CONFIG_SYSROOT_DIR="${TARGET_SYSROOT}" RUN ./configure \ - --host=aarch64-none-linux-gnu \ + --host=${HOSTARCH} \ --build=x86_64-linux-gnu \ --prefix=${TARGET_SYSROOT} \ --disable-ipv6 \ @@ -177,12 +171,12 @@ RUN pip download --no-deps -d /wheels \ RUN pip download \ --no-deps \ --only-binary=:all: \ - --python-version 311 \ + --python-version 310 \ --implementation cp \ --abi cp310 \ --platform manylinux2014_aarch64 \ -d /wheels \ - psutil + psutil numpy==1.21.5 RUN chmod +x /tmp/extract_wheels.sh && \ /tmp/extract_wheels.sh "${PYTHON_PKG_PATH}" /wheels @@ -193,4 +187,5 @@ COPY --from=system_packages ${TARGET_SYSROOT} ${TARGET_SYSROOT} COPY --from=ceres_vendor ${TARGET_SYSROOT} ${TARGET_SYSROOT} COPY --from=opencv_vendor ${TARGET_SYSROOT} ${TARGET_SYSROOT} COPY --from=pcl_vendor ${TARGET_SYSROOT} ${TARGET_SYSROOT} +COPY --from=python_builder ${TARGET_SYSROOT} ${TARGET_SYSROOT} COPY --from=python_pkg_builder ${TARGET_SYSROOT} ${TARGET_SYSROOT}