ARG CC_PLATFORM_IMAGE FROM ${CC_PLATFORM_IMAGE} AS system_packages COPY vendor/packages workspace/src/ RUN cd workspace \ && colcon build \ --install-base ${TARGET_SYSROOT} \ --merge-install \ --packages-up-to system_vendor_packages \ --cmake-force-configure \ --cmake-args \ --no-warn-unused-cli \ -DCMAKE_BUILD_TYPE=Release \ -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/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 RUN cd workspace \ && colcon build \ --install-base ${TARGET_SYSROOT} \ --merge-install \ --packages-up-to ceres_vendor \ --cmake-force-configure \ --cmake-args \ --no-warn-unused-cli \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_TOOLCHAIN_FILE=${CC_TOOLCHAIN_FILE} FROM ${CC_PLATFORM_IMAGE} AS opencv_vendor COPY vendor/packages/opencv_vendor workspace/src/opencv_vendor RUN cd workspace \ && colcon build \ --install-base ${TARGET_SYSROOT} \ --merge-install \ --packages-up-to opencv_vendor \ --cmake-force-configure \ --cmake-args \ --no-warn-unused-cli \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_TOOLCHAIN_FILE=${CC_TOOLCHAIN_FILE} FROM ${CC_PLATFORM_IMAGE} AS boost WORKDIR /tmp 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 \ && ./b2 cxxflags="-fPIC" cflags="-fPIC" link=static install 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 --from=boost ${TARGET_SYSROOT} ${TARGET_SYSROOT} RUN cd workspace \ && colcon build \ --install-base ${TARGET_SYSROOT} \ --merge-install \ --packages-up-to pcl_vendor \ --cmake-force-configure \ --cmake-args \ --no-warn-unused-cli \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_TOOLCHAIN_FILE=${CC_TOOLCHAIN_FILE} # OpenSSL FROM ${CC_PLATFORM_IMAGE} AS ssl_builder WORKDIR /tmp RUN git clone --depth=1 https://github.com/janbar/openssl-cmake.git \ && cd openssl-cmake \ && mkdir build \ && cd build \ && cmake .. \ -DCMAKE_TOOLCHAIN_FILE=${CC_TOOLCHAIN_FILE} \ -DCMAKE_INSTALL_PREFIX=${TARGET_SYSROOT} \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ && 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 \ && tar -xf Python-3.10.12.tar.xz \ && rm 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" \ 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} \ --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 # https://github.com/benfogle/crossenv # cross compile python packages WORKDIR /tmp 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 \ rosdistro # 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 numpy==1.21.5 RUN chmod +x /tmp/extract_wheels.sh && \ /tmp/extract_wheels.sh "${TARGET_SYSROOT}/lib/python3.10/site-packages" /wheels FROM ${CC_PLATFORM_IMAGE} AS final 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}