Pass options to rootcling


ROOT Version: 6.24/06
Platform: CentOS8-Stream
Compiler: g++ 8.5.0


Short and simple question, hopefully.
I’m using rootcling within a Makefile to build a dictionary for some classes.
I’d like to pass some header directories with -isystem, but such include paths aren’t picked up when passed to rootcling. Google suggests the withsystem option controls this, but I can’t find any way to pass it to rootcling. What’s the proper method to do this?

Try using -Ipath

-Ipath works, but for reasons in the rest of the Makefile i’d like these paths to use -isystem.
I can make a copy that substitues -isystem with -Ipath, but that seemed like a workaround for something that should be possible…

@vvassilev Is there another option (available now or planned for later)?

Hi all,

rootcling --help tells me:
--compilerI=<string> - Specify a compiler default include path, to suppress unneeded -isystem arguments.

Would that suffice?

Best, Vassil

@vvassilev (and other Cling developers) see “most critical flags in practice” and “many other flags are interesting” in: clangd → Design → Compile commands
Then see: Clang command line argument reference

@vvassilev I don’t seem to have that option listed by rootcling --help, but I’m not sure this sounds suitable for what I need. I assume <string> is a path, in which case forming the necessary string of --compilerI=/path/1 --compilerI=/path/2 --compilerI=/path/3 flags to give to rootcling seems essentially the same as just forming -I/path/1 -I/path/2 -I/path/3 and using that. Each of these paths is an independent directory for a set of 3rd party components, so can’t be represented by a single “default include path”.

@Wile_E_Coyote i’m not sure what the relevance of the first link is. I’m not using clangd. The second suggests using -isystem<directory> should be supported, but rootcling doesn’t seem to allow it.

From this post, my understanding was that rootcling calls cling, and cling could potentially recognise -isystem paths (internally converting them to -I paths), if the withSystem flag was set. What I was looking for was a method to get rootcling to call cling with withSystem=true. Perhaps that’s not possible (or perhaps my question was unclear).

In any event, it’s easy enough to make a copy line with -isystem swapped for -I, so it’s probably not worth spending too much effort on.
Thanks for all the replies though.

@marc1uk, isystem should be supported: https://github.com/root-project/root/blob/f230da8c5abdd4af8971aa5a64719c40fb6cbd12/core/dictgen/src/rootcling_impl.cxx#L4156

I suspect you will need to do something like -isystem<space> path as clang does not like the = in isystem iirc.

@vvassilev It should really be possible to use “-isystem/my/absolute/path” and “-isystemmy/relative/path” (note also the “-isystem-after<directory>"” option).

Indeed, that might work as we are forwarding the arguments to clang anyway.

Perhaps it should be, but unless I’m mistaken (which is possible) it seems it isn’t.

dict.tgz (749 Bytes)