Compare commits

...

2 Commits

Author SHA1 Message Date
EricX-Zhao 8868ca2a35 Switch RK3576 toolchain to Buildroot SDK and migrate to Python 3.10 2026-07-11 20:29:12 +03:00
EricX-Zhao 39f628605f Switch RK3576 toolchain to Buildroot SDK and migrate to Python 3.11 2026-07-10 17:08:18 +03:00
6 changed files with 79 additions and 57 deletions
+1
View File
@@ -33,6 +33,7 @@ RUN apt update && apt install -y \
python3-pytest-runner \
python3-pytest-timeout \
python3-future \
python3-lark \
python3-argcomplete \
autoconf automake libtool patchelf ninja-build python3.10-venv \
ros-dev-tools
+2
View File
@@ -13,6 +13,8 @@ services:
build:
context: . # 上下文设为根目录,这样才能同时访问 rk3588 文件夹
dockerfile: ${PLATFORM}/cc_${PLATFORM}.Dockerfile
args:
BUILD_JOBS: ${BUILD_JOBS:-6}
image: ${PLATFORM}/cc-toolchain:latest
depends_on:
- cc-base
+18 -6
View File
@@ -2,16 +2,28 @@ FROM cc-base:latest AS cc_rk3576
WORKDIR /opt
RUN wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x86_64-aarch64-none-linux-gnu.tar.xz \
&& tar -xJf arm-gnu-toolchain-13.2.rel1-x86_64-aarch64-none-linux-gnu.tar.xz \
&& rm /opt/arm-gnu-toolchain-13.2.rel1-x86_64-aarch64-none-linux-gnu.tar.xz
# RUN wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x86_64-aarch64-none-linux-gnu.tar.xz \
# && tar -xJf arm-gnu-toolchain-13.2.rel1-x86_64-aarch64-none-linux-gnu.tar.xz \
# && rm /opt/arm-gnu-toolchain-13.2.rel1-x86_64-aarch64-none-linux-gnu.tar.xz
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
COPY rk3576/rk3576.toolchain.cmake /opt/cmake/
ENV PATH="/opt/arm-gnu-toolchain-13.2.Rel1-x86_64-aarch64-none-linux-gnu/bin:${PATH}"
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.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
WORKDIR /root
ARG BUILD_JOBS=6
ENV MAKEFLAGS="-j${BUILD_JOBS}"
+18 -20
View File
@@ -1,16 +1,7 @@
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
# include buildroot toolchain file
include(/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/share/buildroot/toolchainfile.cmake)
set(SYSROOT /opt/arm-gnu-toolchain-13.2.Rel1-x86_64-aarch64-none-linux-gnu)
set(CMAKE_SYSROOT
${SYSROOT}/aarch64-none-linux-gnu/libc
)
set(CMAKE_C_COMPILER ${SYSROOT}/bin/aarch64-none-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER ${SYSROOT}/bin/aarch64-none-linux-gnu-g++)
list(APPEND CMAKE_FIND_ROOT_PATH
list(APPEND CMAKE_FIND_ROOT_PATH
$ENV{TARGET_SYSROOT}
$ENV{ROS_ROOT}
${CMAKE_INSTALL_PREFIX}
@@ -20,13 +11,20 @@ list(APPEND CMAKE_FIND_ROOT_PATH
# set(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG -Wno-error=unused-variable")
# set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -Wno-error=unused-variable")
# add_link_options("LINKER:-rpath-link,$ENV{TARGET_SYSROOT}/lib")
add_link_options($<$<CONFIG:Release>:-s>)
add_link_options("LINKER:-rpath-link,$ENV{TARGET_SYSROOT}/lib")
set(Python3_EXECUTABLE /usr/bin/python3)
set(Python3_NumPy_INCLUDE_DIR $ENV{ROS_ROOT}/lib/python3.10/site-packages/numpy/core/include)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
# use buildroot sdk python3.11
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)
set(LZ4_LIBRARY $ENV{TARGET_SYSROOT}/lib/liblz4.so)
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)
@@ -23,6 +23,8 @@ 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
@@ -32,7 +34,7 @@ RUN touch src/ros2/geometry2/tf2_bullet/COLCON_IGNORE \
&& touch src/diagnostics/diagnostic_remote_logging/COLCON_IGNORE
# -DPYTHON_SOABI=cpython-310-aarch64-linux-gnu
RUN MAKEFLAGS="-j6" ROS_ROOT=${TARGET_SYSROOT} colcon build \
RUN MAKEFLAGS="-j6" colcon build \
--executor parallel \
--parallel-workers 6 \
--install-base ${TARGET_SYSROOT} \
@@ -46,29 +48,15 @@ RUN MAKEFLAGS="-j6" ROS_ROOT=${TARGET_SYSROOT} colcon build \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DBUILD_TESTING=OFF \
-DTRACETOOLS_DISABLED=ON \
-DCV_BRIDGE_DISABLE_PYTHON=ON \
-DPYTHON_SOABI=cpython-310-aarch64-linux-gnu
# 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
WORKDIR ${TARGET_SYSROOT}/lib/python3.10/site-packages/rosidl_buffer
RUN mv _rosidl_buffer_py.cpython-310-x86_64-linux-gnu.so _rosidl_buffer_py.cpython-310-aarch64-linux-gnu.so
-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" \
@@ -80,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-none-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 \
@@ -107,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
+10 -12
View File
@@ -13,6 +13,8 @@ RUN cd workspace \
--cmake-args \
--no-warn-unused-cli \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_FLAGS="-Wno-error" \
-DCMAKE_CXX_FLAGS="-Wno-error" \
-DBUILD_TESTING=OFF \
-DCMAKE_TOOLCHAIN_FILE=${CC_TOOLCHAIN_FILE}
@@ -61,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-none-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
@@ -74,7 +76,7 @@ COPY vendor/packages/pcl_vendor workspace/src/pcl_vendor
COPY --from=boost ${TARGET_SYSROOT} ${TARGET_SYSROOT}
RUN cd workspace \
&& colcon build \
&& MAKEFLAGS="-j6" colcon build \
--install-base ${TARGET_SYSROOT} \
--merge-install \
--packages-up-to pcl_vendor \
@@ -84,7 +86,6 @@ RUN cd workspace \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE=${CC_TOOLCHAIN_FILE}
# OpenSSL
FROM ${CC_PLATFORM_IMAGE} AS ssl_builder
WORKDIR /tmp
@@ -105,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
@@ -124,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" \
@@ -139,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 \
@@ -152,6 +147,8 @@ RUN ./configure \
# https://github.com/benfogle/crossenv
# cross compile python packages
FROM ${CC_PLATFORM_IMAGE} AS python_pkg_builder
WORKDIR /tmp
COPY vendor/extract_wheels.sh /tmp/extract_wheels.sh
@@ -182,7 +179,7 @@ RUN pip download \
psutil numpy==1.21.5
RUN chmod +x /tmp/extract_wheels.sh && \
/tmp/extract_wheels.sh "${TARGET_SYSROOT}/lib/python3.10/site-packages" /wheels
/tmp/extract_wheels.sh "${PYTHON_PKG_PATH}" /wheels
FROM ${CC_PLATFORM_IMAGE} AS final
@@ -191,3 +188,4 @@ 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}