Files
devenv/cross_compile/vendor/vendor_packages.Dockerfile
2026-07-12 20:00:13 +03:00

192 lines
5.6 KiB
Docker

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 \
-DCMAKE_C_FLAGS="-Wno-error" \
-DCMAKE_CXX_FLAGS="-Wno-error" \
-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 : ${CC} ;" 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=${HOSTARCH} --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 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=${HOSTARCH} \
--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
FROM ${CC_PLATFORM_IMAGE} AS python_pkg_builder
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 "${PYTHON_PKG_PATH}" /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}
COPY --from=python_pkg_builder ${TARGET_SYSROOT} ${TARGET_SYSROOT}