192 lines
5.6 KiB
Docker
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}
|