What is "mt" option when compiling ROOT 6.12, and compilation failure within builtin_glew

Dear ROOTers,

I want to install ROOT on a fresh Debian 9 system and I am wondering what is the “mt” option for (the comment generically says “Multi-threading support”). It seems something different from the “Enable ROOT Multithreading Capabilities” of “imt” option, which should be the right one - if I got it right - to have the multithreading functionality e.g. in the new TDataFrame facility.

In addition, the compilation fails because the builtin_glew module misses an include:

Scanning dependencies of target GLEW
[ 90%] Building C object graf3d/glew/CMakeFiles/GLEW.dir/src/glew.c.o
In file included from /home/malfonsi/Downloads/SoftwarePackages/root/graf3d/glew/src/glew.c:44:0:
/dev/shm/malfonsi/root_build/include/GL/glew.h:1141:20: fatal error: GL/glu.h: No such file or directory
 #include <GL/glu.h>
compilation terminated.
graf3d/glew/CMakeFiles/GLEW.dir/build.make:62: recipe for target 'graf3d/glew/CMakeFiles/GLEW.dir/src/glew.c.o' failed
make[2]: *** [graf3d/glew/CMakeFiles/GLEW.dir/src/glew.c.o] Error 1
CMakeFiles/Makefile2:24299: recipe for target 'graf3d/glew/CMakeFiles/GLEW.dir/all' failed
make[1]: *** [graf3d/glew/CMakeFiles/GLEW.dir/all] Error 2
Makefile:149: recipe for target 'all' failed
make: *** [all] Error 2

I am not sure if this means that it should have been provided within the builtin version or I was supposed to have it installed beforehand - but then cmake has not detected the missing dependency.

For my case it is not really important to have an answer here, because, as soon as I figure out if the “mt” option is interesting for me, I am going to recompile again after installing OpenGL & dependencies in the machine (which I need anyway). However maybe it is important to report it in case something must be fixed.

Final question: I am not familiar with cmake… if I just run again cmake in the same failing build directory with the new options (e.g. “mt”, not “builtin_glew”), will make avoid to compile again the parts that in principle are not affected by the change of options? Or better to restart from scratch? - I was at 90%…


ROOT Version: 6-12-06
Platform, compiler: Debian 9, gcc 6.3.0

you can call cmake -Doption=value . from the build directory to change your build configuration, and cmake should be smart enough to figure out what it has do to and not do.

To use TDataFrame you just need imt=ON. You can leave mt to whatever the default value is (and imt=ON is also the default, I think also in 6.12).

As per the glew problem, I’m afraid I can’t help. Let me know if you can’t solve it and we’ll figure something out.


Could you please attach the output of your cmake call, and maybe the file CMakeCache.txt it generates? I will debug what the problem is with builtin_glew. We should fail in case GLU is not found at configuration time.

Thanks for the answers.

One question is still not answered, i.e. was is the option “mt” providing. I apologize if I grouped together too many questions in the same topic

@amadio, please find attached the output of cmake (with the exact command called at the beginning) and the resulting CMakeCache.txt

cmake_output.txt (13.7 KB)
CMakeCache.txt (134.6 KB)

I think there is a typo in our build system that fails to detect the case when OpenGL is found, but not GLU. I will look into it and fix, but for your build you can simply do sudo apt-get install libglew-dev and disable builtin_glew in ROOT. Let us know if this solves your issue. If you want to build a fully featured ROOT on Debian, you can try installing all packages listed here. Some packages may have changed names or not be present for more recent distributions, but we will soon add similar recipes for those distributions too.

About mt option, it became imt in this commit.

Just for completeness, I updated the list of cmake options on the website to report that mt is deprecated.


I have little to add after the series of replies to this post, but I’d just like to remark that since 6.10 included, the CMake flag for implicit MT is on by default.
This flag makes sure that the libraries necessary for the parallel execution of tasks, e.g. TBB, are built and made available to ROOT.
Once ROOT is built, at runtime, programmatically, implicit parallelism can be activated with the following invocation:


TDataFrame and other ROOT components will pick up this setting and transparently run in parallel without requesting any further action from the user.


Dear all,

thanks for the full clarification. Indeed I was using the “Building root” page as reference and now I see the correction. Concerning the installation and the issue with missing GLU.h, I successfully installed root after installing all the required openGL-related packages that were missing on that machine.

Thanks again,

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.