@@ -64,6 +64,7 @@ ENV ROS_DISTRO=${ROS_DISTRO}
6464# typical manual dev dependencies,
6565# and dependencies which ros-tooling/setup-ros would install see
6666# https://github.com/ros-tooling/setup-ros/blob/master/src/package_manager/apt.ts
67+ # on resolute, install an explicit GCC toolchain so clang can resolve -lstdc++
6768RUN apt-get update && apt-get install -y --no-install-recommends \
6869 ros-${ROS_DISTRO}-ros-base \
6970 libboost-dev \
@@ -75,11 +76,29 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
7576 ros-${ROS_DISTRO}-rmw-cyclonedds-cpp \
7677 ros-${ROS_DISTRO}-sdformat-urdf \
7778 ros-${ROS_DISTRO}-xacro \
78- $(if [ $(lsb_release -sc) = "resolute" ]; then echo "libssl-dev python3-dev clang lcov python3-rosinstall-generator python3-pip python3-pytest-cov python3-flake8-blind-except python3-flake8-class-newline python3-flake8-deprecated python3-pytest-repeat python3-pytest-rerunfailures ros-dev-tools python3-colcon-coveragepy-result python3-colcon-lcov-result python3-colcon-meson python3-colcon-mixin python3-importlib-metadata libclang-rt-dev " ; fi) \
79+ $(if [ $(lsb_release -sc) = "resolute" ]; then echo "libssl-dev python3-dev clang lcov python3-rosinstall-generator python3-pip python3-pytest-cov python3-flake8-blind-except python3-flake8-class-newline python3-flake8-deprecated python3-pytest-repeat python3-pytest-rerunfailures ros-dev-tools python3-colcon-coveragepy-result python3-colcon-lcov-result python3-colcon-meson python3-colcon-mixin python3-importlib-metadata" ; fi) \
7980 $(if [ $(lsb_release -sc) = "noble" ]; then echo "libssl-dev python3-dev clang lcov python3-rosinstall-generator python3-pip python3-pytest-cov python3-flake8-blind-except python3-flake8-class-newline python3-flake8-deprecated python3-pytest-repeat python3-pytest-rerunfailures ros-dev-tools python3-colcon-coveragepy-result python3-colcon-lcov-result python3-colcon-meson python3-colcon-mixin python3-importlib-metadata libclang-rt-dev" ; fi) \
8081 $(if [ $(lsb_release -sc) = "jammy" ]; then echo "libssl-dev python3-dev clang lcov python3-rosinstall-generator python3-flake8-docstrings python3-pip python3-pytest-cov python3-flake8-blind-except python3-flake8-builtins python3-flake8-class-newline python3-flake8-comprehensions python3-flake8-deprecated python3-flake8-import-order python3-flake8-quotes python3-pytest-repeat python3-pytest-rerunfailures ros-dev-tools python3-colcon-coveragepy-result python3-colcon-lcov-result python3-colcon-meson python3-colcon-mixin libasio-dev libtinyxml2-dev" ; fi) \
82+ $(if [ $(lsb_release -sc) = "resolute" ]; then echo "build-essential" ; fi) \
8183 && rm -rf /var/lib/apt/lists/*
8284
85+ # TODO(christophfroehlich): remove once https://github.com/ros-controls/ros2_control_ci/issues/791 is fixed
86+ # On resolute, clang-21 fails to auto-detect the GCC 15 installation:
87+ # - /usr/lib/x86_64-linux-gnu/libstdc++.so is missing (ld can't find -lstdc++) -> create symlink
88+ # - C++ standard library headers are not found (<cmath> etc.) -> write a clang config file
89+ RUN if [ "$(lsb_release -sc)" = "resolute" ]; then \
90+ GCC_VER=$(ls /usr/lib/gcc/x86_64-linux-gnu/ | sort -V | tail -1) && \
91+ GCC_LIB=$(find /usr/lib/gcc/x86_64-linux-gnu/${GCC_VER} -name "libstdc++.so" 2>/dev/null | tail -1) && \
92+ [ -n "$GCC_LIB" ] && ln -sf "${GCC_LIB}" /usr/lib/x86_64-linux-gnu/libstdc++.so && \
93+ CLANG_BIN=$(dirname $(readlink -f $(which clang++))) && \
94+ echo "--gcc-install-dir=/usr/lib/gcc/x86_64-linux-gnu/${GCC_VER}" >> "${CLANG_BIN}/clang++.cfg" && \
95+ echo "Configured clang++ with GCC ${GCC_VER} (${CLANG_BIN}/clang++.cfg)" ; \
96+ fi && \
97+ clang++ -v && \
98+ printf '#include <cmath>\n int main(){}\n ' > test.cpp && \
99+ clang++ test.cpp && \
100+ rm test.cpp
101+
83102# Bootstrap rosdep
84103RUN rosdep init && \
85104 rosdep update --rosdistro $ROS_DISTRO
0 commit comments