diff --git a/cross_compile/cc_base.Dockerfile b/cross_compile/cc_base.Dockerfile index 7860b92..08d1b41 100644 --- a/cross_compile/cc_base.Dockerfile +++ b/cross_compile/cc_base.Dockerfile @@ -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 \ + autoconf automake libtool patchelf ninja-build python3.10-venv python3.11 python3.11-dev \ ros-dev-tools diff --git a/cross_compile/compose.yaml b/cross_compile/compose.yaml index d0745f7..c6cd0d3 100644 --- a/cross_compile/compose.yaml +++ b/cross_compile/compose.yaml @@ -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 diff --git a/cross_compile/rk3576/cc_rk3576.Dockerfile b/cross_compile/rk3576/cc_rk3576.Dockerfile index 6fdd461..3aa5434 100644 --- a/cross_compile/rk3576/cc_rk3576.Dockerfile +++ b/cross_compile/rk3576/cc_rk3576.Dockerfile @@ -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 + +# 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 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.11/site-packages -WORKDIR /root +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 d3a365c..b39f51d 100644 --- a/cross_compile/rk3576/rk3576.toolchain.cmake +++ b/cross_compile/rk3576/rk3576.toolchain.cmake @@ -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,19 @@ 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($<$:-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.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) +# 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) diff --git a/cross_compile/ros2/lyrical/ros_lyrical.Dockerfile b/cross_compile/ros2/lyrical/ros_lyrical.Dockerfile index 57d38b5..81d8d1b 100644 --- a/cross_compile/ros2/lyrical/ros_lyrical.Dockerfile +++ b/cross_compile/ros2/lyrical/ros_lyrical.Dockerfile @@ -23,6 +23,9 @@ 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 + # apply patch RUN patch -p1 -d /workspace/src/ros2/rclcpp < /workspace/patch/memory_strategy.patch @@ -32,7 +35,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,23 +49,22 @@ 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 + -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 -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 +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 @@ -80,7 +82,7 @@ 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 +ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-buildroot-linux-gnu-gcc RUN . "$HOME/.cargo/env" \ && . ${TARGET_SYSROOT}/local_setup.sh \ diff --git a/cross_compile/vendor/vendor_packages.Dockerfile b/cross_compile/vendor/vendor_packages.Dockerfile index 2b1e758..4e00c2c 100644 --- a/cross_compile/vendor/vendor_packages.Dockerfile +++ b/cross_compile/vendor/vendor_packages.Dockerfile @@ -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 : aarch64-buildroot-linux-gnu-gcc ;" 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 @@ -152,6 +153,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 @@ -174,15 +177,15 @@ RUN pip download --no-deps -d /wheels \ RUN pip download \ --no-deps \ --only-binary=:all: \ - --python-version 310 \ + --python-version 311 \ --implementation cp \ --abi cp310 \ --platform manylinux2014_aarch64 \ -d /wheels \ - psutil numpy==1.21.5 + psutil 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 @@ -190,4 +193,4 @@ 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}