|
| 1 | +--- |
| 2 | +title: "Superbuilds for ROOT" |
| 3 | +layout: post |
| 4 | +excerpt: "A GSoC 2024 project with goal to split ROOT into separate components and thus speed up its compilation" |
| 5 | +sitemap: false |
| 6 | +author: Pavlo Svirin |
| 7 | +permalink: blogs/gsoc24_pavlo_svirin_introduction_blog/ |
| 8 | +date: 2024-05-31 |
| 9 | +tags: gsoc root cmake |
| 10 | +--- |
| 11 | + |
| 12 | +### Introduction |
| 13 | + |
| 14 | +I am Pavlo Svirin, a software engineer at the Bogolyubov Institute of |
| 15 | +Theoretical Physics in Kyiv, Ukraine. During the Google Summer of Code 2024 I |
| 16 | +will be working on superbuilds for ROOT. |
| 17 | + |
| 18 | +**Mentors**: Vassil Vassilev, Danilo Piparo |
| 19 | + |
| 20 | + |
| 21 | +### Briefly about ROOT |
| 22 | + |
| 23 | +ROOT is a framework for data processing, born at CERN, at the heart of the |
| 24 | +research on high-energy, molecular and laser physics, as well as in astronomy. |
| 25 | +Every day, thousands of physicists use ROOT applications to analyze their data |
| 26 | +or to perform simulations. |
| 27 | + |
| 28 | +ROOT has plenty of built-in components which allow to do: |
| 29 | +- Histogramming and graphing to view and analyze distributions and functions, |
| 30 | +- curve fitting (regression analysis) and minimization of functionals, |
| 31 | +- statistics tools used for data analysis, |
| 32 | +- matrix algebra, |
| 33 | +- four-vector computations, as used in high energy physics, |
| 34 | +- standard mathematical functions, |
| 35 | +- multivariate data analysis, e.g. using neural networks, |
| 36 | +- image manipulation, used, for instance, to analyze astronomical pictures, |
| 37 | +- access to distributed data (in the context of the Grid), |
| 38 | +- distributed computing, to parallelize data analyses, |
| 39 | +- persistence and serialization of objects, which can cope with changes in class |
| 40 | + definitions of persistent data, |
| 41 | +- access to databases, |
| 42 | +- 3D visualizations (geometry), |
| 43 | +- creating files in various graphics formats, like PDF, PostScript, PNG, SVG, |
| 44 | + LaTeX, etc. |
| 45 | +- interfacing Python code in both directions, |
| 46 | +- interfacing Monte Carlo event generators. |
| 47 | + |
| 48 | + |
| 49 | +Because of such a variety of features, ROOT is a very large software which |
| 50 | +takes a very long time to compile. Currently ROOT compiles all of the components |
| 51 | +available within the source code distribution. |
| 52 | + |
| 53 | + |
| 54 | +### Implementation Details and Plans |
| 55 | + |
| 56 | +The goal of the project is to speed up the compilation process by letting users |
| 57 | +specify which components of the ROOT will be needed. This can be done by |
| 58 | +converting ROOT’s CMake configuration into a set of “CMake External Projects” |
| 59 | +(superbuilds). Superbuilds can remove all of this cruft from the project’s |
| 60 | +source repository, and enable you to more directly use the upstream project’s |
| 61 | +build system as an independently built software component. It is basically a |
| 62 | +simple package manager that you make consistently work across your target build |
| 63 | +platforms, and if your target platforms have a common package manager you might |
| 64 | +consider using that instead. |
| 65 | + |
| 66 | +Also, during the configuration process it could be possible to identify if ROOT |
| 67 | +is already installed in the destination folder, the components which are already |
| 68 | +installed and offer an option to skip their compilation and use these already |
| 69 | +installed components for current compilation. |
| 70 | + |
| 71 | + |
| 72 | +### Conclusion |
| 73 | + |
| 74 | +The goal of this project is not to change the build system of ROOT, but to |
| 75 | +optimize it and offer users an option to select only the parts of the ROOT to |
| 76 | +be built. Partial builds for ROOT can allow the creation of “edition” builds if |
| 77 | +necessary. There is also an option to create an Ncurses menu-based configuration |
| 78 | +application (TUI, text user interface) which will simplify the configuration |
| 79 | +process and will let users not to remember names of ROOT subprojects, thus |
| 80 | +making build process easier. |
| 81 | + |
| 82 | + |
| 83 | +### Related Links |
| 84 | + |
| 85 | +- [ROOT website](https://root.cern) |
| 86 | +- [CMake Superbuilds and Git Submodules](https://www.kitware.com/cmake-superbuilds-git-submodules/) |
| 87 | +- [CMake external projects documentation](https://cmake.org/cmake/help/latest/module/ExternalProject.html) |
| 88 | +- [My GitHub Profile](https://github.com/pavlo-svirin) |
| 89 | + |
| 90 | + |
0 commit comments