Presentation Open Access
Roscoe A Bartlett; Bill Hoffman; Brad King
CMake is a very powerful set of tools for creating cross-platform builds and installs from source for C, C++, Fortran, CUDA, HIP and other compiled languages. CMake enjoys broad adoption in the CSE, HPC, ASC and other communities. (CMake is now the most popular C++ build tool.) However, CMake developed several usability and robustness issues with its core scripting language as CMake evolved over 20+ years due to backward compatibility constraints. In response, some alternatives to CMake have been created that are growing in popularity (e.g. Meson). As these other tools grow in adoption and functionality, there may come a point where these alternatives become a viable replacement for CMake for many projects (with some more development in these tools).
The transition from CMake to another build system for just ASC projects could cost
$10+ million and would negatively impact productivity and deliverables during these transitions. (The CSE communities have already been through this type of transition once with the transition from GNU Autotools to CMake and at great expense.)
To avoid the immense costs of a future transition from CMake to another build tool to overcome these issues with CMake, we propose the creation of a new CMake language that is compatible with the existing underlying CMake implementation’s language object model. The proposed CMake language would include a new declarative specification and a new Turing-complete imperative language which could co-exist with older existing CMake files. This would support incremental transition file-by-file and new projects could start with the new language. Also, a conversion tool could be created to automate refactoring of old files to the new CMake language. This work would reduce the costs of creating and maintaining CMake projects and would likely pay for itself several times over just in the DOE ASC community.