if time is of the essence, I guess you could fallback on using a dedicated serialization library (that is easier to compile statically and more modular than statically compiling the whole ROOT project).
a couple of ideas:
- protocol buffers: https://developers.google.com/protocol-buffers/
- HDF5: https://support.hdfgroup.org/HDF5/
- Arrow+Parquet: https://arrow.apache.org/, https://parquet.apache.org/
from python (and Go), ingesting any of these formats is rather straightforward.
I suppose converting any of these formats to ROOT, in C++, is doable as well.
worse comes to worse, you could roll your own TLV-like binary format.
(or use sio from SLAC.)
ah! there’s also the library used by Geant4 that implements some limited ROOT I/O features, in pure C++, w/o any ROOT headers.
see:
- http://iopscience.iop.org/article/10.1088/1742-6596/513/2/022014
- https://github.com/Geant4/geant4/tree/master/source/analysis/g4tools/include/tools/wroot
- https://github.com/Geant4/geant4/tree/master/source/analysis/g4tools/include/tools/rroot
- https://gbarrand.github.io/inexlib/2.0.0_1/index.html
hth,
-s