ROOT - Add support to resolve symbols from a static library to the Cling C++ interpreter

Description

ROOT’s C++ interpreter, cling, is a thin layer atop Clang/LLVM that deals with aspects derived from making C++ an interpreted language. In general, Cling may transform otherwise ill-formed code so that it becomes parseable by Clang; afterward, it is just-in-time compiled and linked by LLVM, and executed.

On the other hand, devtoolset is a family of packages included in CentOS/RedHat Enterprise Linux that provides updated versions of a GCC-based C/C++ toolchain and other development tools. To allow the generated binaries to work on older RedHat-based operating systems that do not have devtoolset installed, these packages provide updates to libstdc++ in the form of a .a static library that is linked to other object files to generate the final executable file. While this ensures backwards compatibility of binaries generated by the updated toolchain provided by devtoolset, it might create additional issues.

One of such issues, is that Cling instructs the LLVM linker to look for symbols only libstdc++.so, but not on the static .a library provided on systems that have devtoolset installed. This translates into linking failures when trying to use modern features not included in the libstdc++ provided by the system.

Task ideas and expected results

The expected outcome of this project is a patch to cling so that it also looks for symbols provided in the devtoolset static library (if installed on the system). The student should be prepared to write a progress report and present the results at the end of the summer.

Evaluation Task

Interested students please contact Javier (j.lopez@cern.ch) or Axel (Axel.Naumann@cern.ch) for a warm-up and evaluation task.

Requirements

Mentors

Additional Information

Corresponding Project

Participating Organizations