Compare commits

...

2 Commits

Author SHA1 Message Date
EricX-Zhao ea0313a66d Add support for RK3576 platform and restructure vendor packages directory 2026-07-07 10:07:30 +03:00
EricX-Zhao 31d7fab23a Comment out NumPy include directory setting
Comment out the Python3_NumPy_INCLUDE_DIR setting.
2026-07-05 10:22:13 +03:00
57 changed files with 116 additions and 34 deletions
+8
View File
@@ -7,6 +7,7 @@ set -x
# ./build.sh -t RK3588 -p "depthai_examples vins_estimator" -b Release
# ./build.sh -t RK3588 -p "svo_ros" -b Release
# ./build.sh -t DESKTOP -p "ov_core ov_init ov_msckf" -b RelWithDebInfo -l 1
# ./build.sh -t RK3576 -p "mavros mavros_extras" -b Release
# export WORKSPACE="$(dirname "$(realpath "$BASH_SOURCE")")"
# export WORKSPACE="$(realpath "$BASH_SOURCE")"
@@ -83,6 +84,13 @@ if [[ "${TARGET_PLATFORM}" = "RK3588" ]]; then
export ARM_ARCHITECTURE=arm64
fi
if [[ "${TARGET_PLATFORM}" = "RK3576" ]]; then
# in rk3588_dev container
TOOLCHAIN_FILE=/opt/cmake/rk3576.toolchain.cmake
CMAKE_ARGS+=" -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE}"
export ARM_ARCHITECTURE=arm64
fi
export TARGET=${TARGET_PLATFORM}
INSTALL_DIR=${WORKSPACE}/output/${TARGET_PLATFORM}/install
+1 -1
View File
@@ -21,7 +21,7 @@ services:
vendor-packages:
build:
context: .
dockerfile: vendor_packages/vendor_packages.Dockerfile
dockerfile: vendor/vendor_packages.Dockerfile
args:
CC_PLATFORM_IMAGE: ${PLATFORM}/cc-toolchain:latest
image: ${PLATFORM}/cc-vendor-packages:latest
+1 -1
View File
@@ -23,7 +23,7 @@ list(APPEND CMAKE_FIND_ROOT_PATH
# add_link_options("LINKER:-rpath-link,$ENV{TARGET_SYSROOT}/lib")
set(Python3_EXECUTABLE /usr/bin/python3)
set(Python3_NumPy_INCLUDE_DIR $ENV{TARGET_SYSROOT}/lib/python3.10/site-packages/numpy/core/include)
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)
+1 -1
View File
@@ -23,7 +23,7 @@ list(APPEND CMAKE_FIND_ROOT_PATH
# add_link_options("LINKER:-rpath-link,$ENV{TARGET_SYSROOT}/lib")
set(Python3_EXECUTABLE /usr/bin/python3)
set(Python3_NumPy_INCLUDE_DIR $ENV{TARGET_SYSROOT}/lib/python3.10/site-packages/numpy/core/include)
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)
@@ -13,12 +13,14 @@ 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 ros2/${ROS_DISTRO}/patch /workspace/patch
COPY --from=vendor_images ${TARGET_SYSROOT} ${TARGET_SYSROOT}
COPY ros2/${ROS_DISTRO}/patch /workspace/patch
COPY ros2/ros_cpp /workspace/src/ros_cpp
# apply patch
@@ -30,7 +32,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" colcon build \
RUN MAKEFLAGS="-j6" ROS_ROOT=/opt/rk3576 colcon build \
--executor parallel \
--parallel-workers 6 \
--install-base ${TARGET_SYSROOT} \
@@ -44,7 +46,9 @@ RUN MAKEFLAGS="-j6" colcon build \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DBUILD_TESTING=OFF \
-DTRACETOOLS_DISABLED=ON \
-DCV_BRIDGE_DISABLE_PYTHON=ON
-DCV_BRIDGE_DISABLE_PYTHON=ON \
-DPython3_NumPy_INCLUDE_DI=/opt/rk3576/lib/python3.10/site-packages/numpy/core/include \
-DPYTHON_SOABI=cpython-310-aarch64-linux-gnu
# pybind11 python soabi issue
WORKDIR ${TARGET_SYSROOT}/lib/python3.10/site-packages/rclpy
@@ -62,7 +66,8 @@ 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
FROM ${CC_PLATFORM_IMAGE} AS rmw_zenoh_builder
ARG ROS_ROOT
ENV ROS_ROOT=${ROS_ROOT}
COPY --from=ros_builder ${TARGET_SYSROOT} ${TARGET_SYSROOT}
# rust install
@@ -102,4 +107,5 @@ FROM ${CC_PLATFORM_IMAGE} AS final
ARG ROS_ROOT
ENV ROS_ROOT=${ROS_ROOT}
COPY --from=rmw_zenoh_builder ${TARGET_SYSROOT} ${ROS_ROOT}
WORKDIR /opt
ENV TARGET_SYSROOT=${ROS_ROOT}
WORKDIR /workspace
+31
View File
@@ -0,0 +1,31 @@
#!/bin/bash
set -euo pipefail
SITE_PACKAGES="${1:?usage: extract_wheels.sh <site-packages-dir> <wheels-dir>}"
WHEELS_DIR="${2:?usage: extract_wheels.sh <site-packages-dir> <wheels-dir>}"
mkdir -p "$SITE_PACKAGES"
for f in "$WHEELS_DIR"/*; do
case "$f" in
*.whl)
python3 -m zipfile -e "$f" "$SITE_PACKAGES/"
;;
*.tar.gz|*.tar.bz2)
tmpdir=$(mktemp -d)
tar xf "$f" -C "$tmpdir"
for pkgdir in "$tmpdir"/*/; do
for inner in "$pkgdir"*/; do
if [ -f "${inner}__init__.py" ]; then
cp -r "$inner" "$SITE_PACKAGES/"
fi
done
find "$pkgdir" -maxdepth 1 -name "*.py" -exec cp {} "$SITE_PACKAGES/" \;
done
rm -rf "$tmpdir"
;;
esac
done
echo "Extraction done. Contents of $SITE_PACKAGES:"
ls "$SITE_PACKAGES"
@@ -13,7 +13,7 @@ include(FetchContent)
FetchContent_Declare(
asio_vendor
GIT_REPOSITORY https://github.com/chriskohlhoff/asio.git
GIT_TAG asio-1-36-0
GIT_TAG asio-1-28-1
GIT_SHALLOW TRUE
)
@@ -2,7 +2,7 @@ ARG CC_PLATFORM_IMAGE
FROM ${CC_PLATFORM_IMAGE} AS system_packages
COPY vendor_packages workspace/src/
COPY vendor/packages workspace/src/
RUN cd workspace \
&& colcon build \
@@ -16,15 +16,14 @@ RUN cd workspace \
-DBUILD_TESTING=OFF \
-DCMAKE_TOOLCHAIN_FILE=${CC_TOOLCHAIN_FILE}
FROM ${CC_PLATFORM_IMAGE} AS ceres_vendor
COPY vendor_packages/eigen3_vendor workspace/src/eigen3_vendor
COPY vendor/packages/eigen3_vendor workspace/src/eigen3_vendor
# COPY vendor_packages/gflags_vendor workspace/src/gflags_vendor
# COPY vendor_packages/glog_vendor workspace/src/glog_vendor
# COPY vendor_packages/openblas_vendor workspace/src/openblas_vendor
# COPY vendor_packages/suitesparse_vendor workspace/src/suitesparse_vendor
COPY vendor_packages/ceres_vendor workspace/src/ceres_vendor
COPY vendor/packages/ceres_vendor workspace/src/ceres_vendor
RUN cd workspace \
&& colcon build \
@@ -40,7 +39,7 @@ RUN cd workspace \
FROM ${CC_PLATFORM_IMAGE} AS opencv_vendor
COPY vendor_packages/opencv_vendor workspace/src/opencv_vendor
COPY vendor/packages/opencv_vendor workspace/src/opencv_vendor
RUN cd workspace \
&& colcon build \
@@ -67,10 +66,10 @@ RUN tar -zxf boost_1_83_0.tar.gz \
FROM ${CC_PLATFORM_IMAGE} AS pcl_vendor
COPY vendor_packages/eigen3_vendor workspace/src/eigen3_vendor
COPY vendor_packages/liblz4_vendor workspace/src/liblz4_vendor
COPY vendor_packages/flann_vendor workspace/src/flann_vendor
COPY vendor_packages/pcl_vendor workspace/src/pcl_vendor
COPY vendor/packages/eigen3_vendor workspace/src/eigen3_vendor
COPY vendor/packages/liblz4_vendor workspace/src/liblz4_vendor
COPY vendor/packages/flann_vendor workspace/src/flann_vendor
COPY vendor/packages/pcl_vendor workspace/src/pcl_vendor
COPY --from=boost ${TARGET_SYSROOT} ${TARGET_SYSROOT}
@@ -101,12 +100,22 @@ RUN git clone --depth=1 https://github.com/janbar/openssl-cmake.git \
&& make -j$(($(nproc) / 2)) && make install \
&& rm -rf /tmp
# ffi
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} \
&& make -j$(nproc) && make install
# Python 3.12
FROM ${CC_PLATFORM_IMAGE} AS python_builder
WORKDIR /tmp
COPY --from=ssl_builder ${TARGET_SYSROOT} ${TARGET_SYSROOT}
COPY --from=system_packages ${TARGET_SYSROOT} ${TARGET_SYSROOT}
COPY --from=ffi_builder ${TARGET_SYSROOT} ${TARGET_SYSROOT}
# COPY vendor_packages/Python-3.10.12.tar.xz .
RUN wget https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tar.xz \
@@ -121,37 +130,65 @@ ENV CC=aarch64-none-linux-gnu-gcc \
RANLIB=aarch64-none-linux-gnu-ranlib \
HOSTARCH=aarch64-none-linux-gnu \
BUILDARCH=x86_64-linux-gnu
# export CC=aarch64-none-linux-gnu-gcc
# export CXX=aarch64-none-linux-gnu-g++
# export AR=aarch64-none-linux-gnu-ar
# export RANLIB=aarch64-none-linux-gnu-ranlib
# export HOSTARCH=aarch64-none-linux-gnu
# export BUILDARCH=x86_64-linux-gn
RUN CFLAGS="-fPIC" LDFLAGS="-fPIC" ./configure \
ENV CPPFLAGS="-I${TARGET_SYSROOT}/include" \
LDFLAGS="-L${TARGET_SYSROOT}/lib -Wl,-rpath-link=${TARGET_SYSROOT}/lib" \
CFLAGS="-fPIC" \
PKG_CONFIG_PATH="" \
PKG_CONFIG_LIBDIR="${TARGET_SYSROOT}/lib/pkgconfig" \
PKG_CONFIG_SYSROOT_DIR="${TARGET_SYSROOT}"
RUN ./configure \
--host=aarch64-none-linux-gnu \
--build=x86_64-linux-gnu \
--prefix=${TARGET_SYSROOT} \
--with-build-python=python3.10 \
--enable-shared \
--disable-ipv6 \
--enable-optimizations \
--with-openssl=${TARGET_SYSROOT} \
ac_cv_file__dev_ptmx=yes \
ac_cv_file__dev_ptc=yes \
&& make -j$(($(nproc) / 2)) && make install
&& make -j$(($(nproc) / 2)) \
&& make install
# https://github.com/benfogle/crossenv
# cross compile python packages
WORKDIR /tmp
# /opt/python3.10/venv/build/bin/pip install 'setuptools==68.2.2' wheel
COPY vendor/extract_wheels.sh /tmp/extract_wheels.sh
# python packages
RUN pip download --no-deps -d /wheels \
empy==3.3.4 \
lark \
pyyaml \
catkin_pkg \
setuptools \
packaging \
pyparsing \
argcomplete \
osrf-pycommon \
typing-extensions \
psutil
# python packages with c extension
RUN pip download \
--no-deps \
--only-binary=:all: \
--python-version 310 \
--implementation cp \
--abi cp310 \
--platform manylinux2014_aarch64 \
-d /wheels \
psutil
RUN chmod +x /tmp/extract_wheels.sh && \
/tmp/extract_wheels.sh "${TARGET_SYSROOT}/lib/python3.10/site-packages" /wheels
RUN python3 -m pip install crossenv \
&& python3 -m crossenv ${TARGET_SYSROOT}/bin/python3 venv \
&& . venv/bin/activate \
&& pip -v install numpy==1.21.5 lark==1.1.1 packaging typing-extensions --prefix=${TARGET_SYSROOT} \
&& ./venv/build/bin/pip install 'setuptools==68.2.2' wheel \
&& pip -v install empy==3.3.4 pyyaml psutil argcomplete --prefix=${TARGET_SYSROOT}
&& pip -v install numpy==1.21.5 --prefix=${TARGET_SYSROOT}
FROM ${CC_PLATFORM_IMAGE} AS final