IMP Manual
develop.63b38c487d,2024/12/21
|
The IMP build system is has many parts, some implemented in Python, some in CMake and some autogenerated. Pieces of IMP are built either when CMake is run or when ninja is run.
As a general rule, anything which depends only on the set of files in IMP (and not their contents) should be done when CMake is run. There are several main steps:
setup_git.py
is run in order to make sure that git is set up correctly.tools/dev_tools/setup_cmake.py
is run to generate the current lists of files in the repository. These lists go (roughly) in every directory named include
, src
, or bin
and list all python and C++ files. CMake reads these lists and uses them to figure out what to build. These generated files, called Files.cmake
are ignored by git
.tools/build/setup_cmake.py
generates the autogenerated CMakeLists.txt
files for each module and application. These are also ignored by git
and should not be modified by users. Instead, users can put module-specific code in modules/modulename/Setup.cmake
.data/build
in the build directory. Ultimate, these should probably all move to cmake
, but having the split smoothed the transition from scons
.tools/dev_tools/make_all_header.py
. These headers list all the headers necessary for a given module and greatly simply the swig files (which have to include all these headers).tools/build/setup_swig.py
. These files include all the necessary all headers as well as include the corresponding swig.i-in
files. Each module must include all the things necessary for all its dependencies, so maintaining these files is nontrivial.tools/build/setup_swig_dependencies.py
. Generating the dependencies is quite expensive so it is only done at cmake time, using as many threads as possible. In order to get this right, autogenerated headers such as the container headers (tools/build/make_containers.py
) are generated during cmake (they are also generated when ninja is run).In addition to the normal compilation and things. The following build targets exist in IMP