|
ARG ROS_DISTRO=humble |
|
FROM ros:$ROS_DISTRO |
|
ARG ROS_DISTRO=humble |
|
|
|
WORKDIR /src |
|
ADD https://github.com/stack-of-tasks/pinocchio/releases/download/v3.4.0/pinocchio-3.4.0.tar.gz . |
|
RUN tar xf "pinocchio-3.4.0.tar.gz" --strip-components=1 |
|
|
|
SHELL ["/bin/bash", "-eux", "-c"] |
|
|
|
RUN --mount=type=cache,sharing=locked,target=/var/cache/apt \ |
|
--mount=type=cache,sharing=locked,target=/var/lib/apt \ |
|
--mount=type=cache,sharing=locked,target=/root/.cache \ |
|
apt-get update -y && DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends \ |
|
bc \ |
|
clang \ |
|
libboost-all-dev \ |
|
libeigen3-dev \ |
|
liburdfdom-dev \ |
|
lld \ |
|
mold \ |
|
python-is-python3 \ |
|
python3-numpy \ |
|
python3-pip \ |
|
python3-venv \ |
|
ros-$ROS_DISTRO-hpp-fcl \ |
|
ros-$ROS_DISTRO-eigenpy \ |
|
time \ |
|
&& python -m venv --system-site-packages --upgrade-deps /venv \ |
|
&& source /venv/bin/activate \ |
|
&& python -m pip install cmake |
|
|
|
ENV CMAKE_PREFIX_PATH=/opt/ros/$ROS_DISTRO |
|
ENV LD_LIBRARY_PATH=/opt/ros/$ROS_DISTRO/lib:/opt/ros/$ROS_DISTRO/lib/x86_64-linux-gnu |
|
ENV ROS_PYTHON_VERSION=3 ROS_VERSION=2 |
|
|
|
RUN find /opt/ros/$ROS_DISTRO -name '*-packages' > $(find /usr/local/lib -name '*-packages')/ros.pth |
|
|
|
# Wait, WHAT ? |
|
RUN sed -i 's/hpp-fcl 2.1.2 REQUIRED "hpp-fcl >= 2.1.2"/hpp-fcl/' "CMakeLists.txt" |
|
|
|
RUN source /venv/bin/activate \ |
|
&& for compiler in gcc clang; do \ |
|
for linker in BFD LLD MOLD; do \ |
|
for testing in ON OFF; do \ |
|
[[ "${compiler}" == "gcc" && "${linker}" == "MOLD" && "${ROS_DISTRO}" == "humble" ]] && continue; \ |
|
LOG="${compiler}-${linker}-${testing}.log"; \ |
|
cmake -B build \ |
|
-DBUILD_TESTING=${testing} \ |
|
-DBUILD_WITH_COLLISION_SUPPORT=ON \ |
|
-DCMAKE_BUILD_TYPE=Release \ |
|
-DCMAKE_C_COMPILER="${compiler}" \ |
|
-DCMAKE_CXX_COMPILER="${compiler/cc}++" \ |
|
-DCMAKE_INSTALL_LIBDIR=lib \ |
|
-DCMAKE_LINKER_TYPE="${linker}" \ |
|
-DPYTHON_DEB_LAYOUT=ON \ |
|
-Wno-dev; \ |
|
/usr/bin/time -v cmake --build build 2>> $LOG; \ |
|
echo -ne "\ttotal-size: " >> $LOG; \ |
|
find build -name \*.so -exec sh -c 'stat -c %s $(realpath {})' \;| xargs | tr ' ' + | bc >> $LOG; \ |
|
cmake --build build -t install; \ |
|
echo -ne "\tpinocchio: " >> $LOG; \ |
|
(python -c "import pinocchio; print('ok')" 2>&1 || true) >> $LOG; \ |
|
cmake --build build -t uninstall; \ |
|
rm -rf build; \ |
|
done; \ |
|
done; \ |
|
done |
|
|
|
CMD tail -n 30 *.log |