Switch RK3576 toolchain to Buildroot SDK and migrate to Python 3.10
This commit is contained in:
@@ -35,5 +35,5 @@ RUN apt update && apt install -y \
|
|||||||
python3-future \
|
python3-future \
|
||||||
python3-lark \
|
python3-lark \
|
||||||
python3-argcomplete \
|
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
|
ros-dev-tools
|
||||||
|
|||||||
@@ -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 \
|
RUN tar -zxf aarch64-buildroot-linux-gnu_sdk-buildroot.tar.gz \
|
||||||
&& rm /opt/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/
|
COPY rk3576/rk3576.toolchain.cmake /opt/cmake/
|
||||||
|
|
||||||
ENV CC_TOOLCHAIN_FILE=/opt/cmake/rk3576.toolchain.cmake
|
ENV CC_TOOLCHAIN_FILE=/opt/cmake/rk3576.toolchain.cmake
|
||||||
|
|
||||||
ENV TARGET_SYSROOT=/opt/rk3576
|
ENV TARGET_SYSROOT=/opt/rk3576
|
||||||
ENV PATH="${PATH}:/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/bin"
|
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
|
ARG BUILD_JOBS=6
|
||||||
ENV MAKEFLAGS="-j${BUILD_JOBS}"
|
ENV MAKEFLAGS="-j${BUILD_JOBS}"
|
||||||
|
|||||||
@@ -15,10 +15,10 @@ add_link_options($<$<CONFIG:Release>:-s>)
|
|||||||
add_link_options("LINKER:-rpath-link,$ENV{TARGET_SYSROOT}/lib")
|
add_link_options("LINKER:-rpath-link,$ENV{TARGET_SYSROOT}/lib")
|
||||||
|
|
||||||
# use buildroot sdk python3.11
|
# use buildroot sdk python3.11
|
||||||
set(Python3_EXECUTABLE /usr/bin/python3.11)
|
set(Python3_EXECUTABLE /usr/bin/python3.10)
|
||||||
set(Python3_INCLUDE_DIR ${CMAKE_SYSROOT}/usr/include/python3.11)
|
# set(Python3_INCLUDE_DIR ${CMAKE_SYSROOT}/usr/include/python3.11)
|
||||||
set(Python3_LIBRARY ${CMAKE_SYSROOT}/usr/lib/libpython3.11.so)
|
# 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_NumPy_INCLUDE_DIR $ENV{TARGET_SYSROOT}/lib/python3.10/site-packages/numpy/core/include)
|
||||||
|
|
||||||
# use cross compile packages
|
# use cross compile packages
|
||||||
set(LZ4_INCLUDE_DIR $ENV{TARGET_SYSROOT}/include)
|
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_INCLUDE_DIR $ENV{TARGET_SYSROOT}/include)
|
||||||
set(FLANN_LIBRARY $ENV{TARGET_SYSROOT}/lib/libflann.so)
|
set(FLANN_LIBRARY $ENV{TARGET_SYSROOT}/lib/libflann.so)
|
||||||
set(yaml-cpp_DIR $ENV{TARGET_SYSROOT}/lib/cmake/yaml-cpp)
|
set(yaml-cpp_DIR $ENV{TARGET_SYSROOT}/lib/cmake/yaml-cpp)
|
||||||
|
set(OpenCV_DIR $ENV{TARGET_SYSROOT}/lib/cmake/opencv4)
|
||||||
|
|||||||
@@ -23,8 +23,7 @@ COPY --from=vendor_images ${TARGET_SYSROOT} ${TARGET_SYSROOT}
|
|||||||
COPY ros2/${ROS_DISTRO}/patch /workspace/patch
|
COPY ros2/${ROS_DISTRO}/patch /workspace/patch
|
||||||
COPY ros2/ros_cpp /workspace/src/ros_cpp
|
COPY ros2/ros_cpp /workspace/src/ros_cpp
|
||||||
|
|
||||||
# COPY rk3576/rk3576.toolchain.cmake /opt/cmake/
|
COPY rk3576/rk3576.toolchain.cmake /opt/cmake/
|
||||||
# RUN python3.11 -m pip install lark
|
|
||||||
|
|
||||||
# apply patch
|
# apply patch
|
||||||
RUN patch -p1 -d /workspace/src/ros2/rclcpp < /workspace/patch/memory_strategy.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 \
|
-DTRACETOOLS_DISABLED=ON \
|
||||||
-DCV_BRIDGE_DISABLE_PYTHON=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
|
FROM ${CC_PLATFORM_IMAGE} AS rmw_zenoh_builder
|
||||||
ARG ROS_ROOT
|
ARG ROS_ROOT
|
||||||
ENV ROS_ROOT=${ROS_ROOT}
|
ENV ROS_ROOT=${ROS_ROOT}
|
||||||
COPY --from=ros_builder ${TARGET_SYSROOT} ${TARGET_SYSROOT}
|
COPY --from=ros_builder ${TARGET_SYSROOT} ${TARGET_SYSROOT}
|
||||||
|
|
||||||
|
RUN python3.10 -m pip install numpy==1.21.5
|
||||||
|
|
||||||
# rust install
|
# rust install
|
||||||
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y
|
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y
|
||||||
RUN . "$HOME/.cargo/env" \
|
RUN . "$HOME/.cargo/env" \
|
||||||
@@ -82,7 +68,14 @@ RUN mkdir rmw_zenoh_ws/src -p \
|
|||||||
&& cd rmw_zenoh_ws/src \
|
&& cd rmw_zenoh_ws/src \
|
||||||
&& git clone --depth=1 -b lyrical https://github.com/ros2/rmw_zenoh.git
|
&& 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" \
|
RUN . "$HOME/.cargo/env" \
|
||||||
&& . ${TARGET_SYSROOT}/local_setup.sh \
|
&& . ${TARGET_SYSROOT}/local_setup.sh \
|
||||||
@@ -109,4 +102,20 @@ ARG ROS_ROOT
|
|||||||
ENV ROS_ROOT=${ROS_ROOT}
|
ENV ROS_ROOT=${ROS_ROOT}
|
||||||
COPY --from=rmw_zenoh_builder ${TARGET_SYSROOT} ${ROS_ROOT}
|
COPY --from=rmw_zenoh_builder ${TARGET_SYSROOT} ${ROS_ROOT}
|
||||||
ENV 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
|
WORKDIR /workspace
|
||||||
|
|||||||
+6
-11
@@ -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 \
|
RUN tar -zxf boost_1_83_0.tar.gz \
|
||||||
&& cd boost_1_83_0 \
|
&& cd boost_1_83_0 \
|
||||||
&& ./bootstrap.sh --prefix=${TARGET_SYSROOT} --without-libraries=python \
|
&& ./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
|
&& ./b2 cxxflags="-fPIC" cflags="-fPIC" link=static install
|
||||||
|
|
||||||
FROM ${CC_PLATFORM_IMAGE} AS pcl_vendor
|
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 \
|
RUN git clone --depth=1 https://github.com/libffi/libffi.git \
|
||||||
&& cd libffi \
|
&& cd libffi \
|
||||||
&& ./autogen.sh \
|
&& ./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
|
&& make -j$(nproc) && make install
|
||||||
|
|
||||||
# Python 3.12
|
# 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
|
# 配置和编译 Python
|
||||||
WORKDIR /tmp/Python-3.10.12
|
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" \
|
ENV CPPFLAGS="-I${TARGET_SYSROOT}/include" \
|
||||||
LDFLAGS="-L${TARGET_SYSROOT}/lib -Wl,-rpath-link=${TARGET_SYSROOT}/lib" \
|
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}"
|
PKG_CONFIG_SYSROOT_DIR="${TARGET_SYSROOT}"
|
||||||
|
|
||||||
RUN ./configure \
|
RUN ./configure \
|
||||||
--host=aarch64-none-linux-gnu \
|
--host=${HOSTARCH} \
|
||||||
--build=x86_64-linux-gnu \
|
--build=x86_64-linux-gnu \
|
||||||
--prefix=${TARGET_SYSROOT} \
|
--prefix=${TARGET_SYSROOT} \
|
||||||
--disable-ipv6 \
|
--disable-ipv6 \
|
||||||
@@ -177,12 +171,12 @@ RUN pip download --no-deps -d /wheels \
|
|||||||
RUN pip download \
|
RUN pip download \
|
||||||
--no-deps \
|
--no-deps \
|
||||||
--only-binary=:all: \
|
--only-binary=:all: \
|
||||||
--python-version 311 \
|
--python-version 310 \
|
||||||
--implementation cp \
|
--implementation cp \
|
||||||
--abi cp310 \
|
--abi cp310 \
|
||||||
--platform manylinux2014_aarch64 \
|
--platform manylinux2014_aarch64 \
|
||||||
-d /wheels \
|
-d /wheels \
|
||||||
psutil
|
psutil numpy==1.21.5
|
||||||
|
|
||||||
RUN chmod +x /tmp/extract_wheels.sh && \
|
RUN chmod +x /tmp/extract_wheels.sh && \
|
||||||
/tmp/extract_wheels.sh "${PYTHON_PKG_PATH}" /wheels
|
/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=ceres_vendor ${TARGET_SYSROOT} ${TARGET_SYSROOT}
|
||||||
COPY --from=opencv_vendor ${TARGET_SYSROOT} ${TARGET_SYSROOT}
|
COPY --from=opencv_vendor ${TARGET_SYSROOT} ${TARGET_SYSROOT}
|
||||||
COPY --from=pcl_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}
|
COPY --from=python_pkg_builder ${TARGET_SYSROOT} ${TARGET_SYSROOT}
|
||||||
|
|||||||
Reference in New Issue
Block a user