RFI: modyfi cmake code to be able build cmake with -fno-rtti and -fno-exceptions
Looks like rtti is ised only in few places so by change a bit code it should be possible to make cmake binary smaller and by this probably a bit faster.
Currently when cmake is build with fno-rtti
it fails only in
[ 17%] Building CXX object Source/CMakeFiles/CMakeLib.dir/cmNinjaTargetGenerator.cxx.o
cd /home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/x86_64-redhat-linux-gnu/Source && /usr/bin/g++ -I/home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/x86_64-redhat-linux-gnu/Utilities -I/home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/x86_64-redhat-linux-gnu/Source -I/home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/Source -I/home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/Source/LexerParser -isystem /home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/Utilities/std -isystem /home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/Utilities -O2 -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fdata-sections -ffunction-sections -flto=auto -flto-partition=none -fno-rtti -DNDEBUG -Wno-deprecated-declarations -std=c++17 -MD -MT Source/CMakeFiles/CMakeLib.dir/cmNinjaTargetGenerator.cxx.o -MF CMakeFiles/CMakeLib.dir/cmNinjaTargetGenerator.cxx.o.d -o CMakeFiles/CMakeLib.dir/cmNinjaTargetGenerator.cxx.o -c /home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/Source/cmNinjaTargetGenerator.cxx
/home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/Source/cmFileAPICodemodel.cxx: In member function ‘void {anonymous}::CodemodelConfig::ProcessDirectories()’:
/home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/Source/cmFileAPICodemodel.cxx:594:12: error: ‘dynamic_cast’ not permitted with ‘-fno-rtti’
594 | if (!dynamic_cast<cmInstallSubdirectoryGenerator*>(gen.get())) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/Source/cmFileAPICodemodel.cxx: In member function ‘Json::Value {anonymous}::DirectoryObject::DumpInstaller(cmInstallGenerator*)’:
/home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/Source/cmFileAPICodemodel.cxx:888:7: error: ‘dynamic_cast’ not permitted with ‘-fno-rtti’
888 | if (dynamic_cast<cmInstallSubdirectoryGenerator*>(gen) ||
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/Source/cmFileAPICodemodel.cxx:889:7: error: ‘dynamic_cast’ not permitted with ‘-fno-rtti’
889 | dynamic_cast<cmInstallGetRuntimeDependenciesGenerator*>(gen)) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/Source/cmFileAPICodemodel.cxx:899:29: error: ‘dynamic_cast’ not permitted with ‘-fno-rtti’
899 | if (auto* installTarget = dynamic_cast<cmInstallTargetGenerator*>(gen)) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/Source/cmFileAPICodemodel.cxx:953:16: error: ‘dynamic_cast’ not permitted with ‘-fno-rtti’
953 | dynamic_cast<cmInstallFilesGenerator*>(gen)) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/Source/cmFileAPICodemodel.cxx:977:16: error: ‘dynamic_cast’ not permitted with ‘-fno-rtti’
977 | dynamic_cast<cmInstallDirectoryGenerator*>(gen)) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/Source/cmFileAPICodemodel.cxx:1003:16: error: ‘dynamic_cast’ not permitted with ‘-fno-rtti’
1003 | dynamic_cast<cmInstallExportGenerator*>(gen)) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/Source/cmFileAPICodemodel.cxx:1014:16: error: ‘dynamic_cast’ not permitted with ‘-fno-rtti’
1014 | dynamic_cast<cmInstallScriptGenerator*>(gen)) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/Source/cmFileAPICodemodel.cxx:1023:16: error: ‘dynamic_cast’ not permitted with ‘-fno-rtti’
1023 | dynamic_cast<cmInstallImportedRuntimeArtifactsGenerator*>(
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1024 | gen)) {
| ~~~~
/home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/Source/cmFileAPICodemodel.cxx:1032:16: error: ‘dynamic_cast’ not permitted with ‘-fno-rtti’
1032 | dynamic_cast<cmInstallRuntimeDependencySetGenerator*>(gen)) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/Source/cmFileAPICodemodel.cxx:1050:16: error: ‘dynamic_cast’ not permitted with ‘-fno-rtti’
1050 | dynamic_cast<cmInstallFileSetGenerator*>(gen)) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/Source/cmFileAPICodemodel.cxx:1097:16: error: ‘dynamic_cast’ not permitted with ‘-fno-rtti’
1097 | dynamic_cast<cmInstallCxxModuleBmiGenerator*>(gen)) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/Source/cmNinjaTargetGenerator.cxx: In member function ‘void cmNinjaTargetGenerator::WriteTargetDependInfo(const std::string&, const std::string&)’:
/home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/Source/cmNinjaTargetGenerator.cxx:1719:13: error: ‘dynamic_cast’ not permitted with ‘-fno-rtti’
1719 | dynamic_cast<cmInstallFileSetGenerator const*>(ig.get())) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/tkloczko/rpmbuild/BUILD/cmake-3.25.1/Source/cmNinjaTargetGenerator.cxx:1774:11: error: ‘dynamic_cast’ not permitted with ‘-fno-rtti’
1774 | dynamic_cast<cmInstallCxxModuleBmiGenerator const*>(ig.get())) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
make[2]: *** [Source/CMakeFiles/CMakeLib.dir/build.make:4503: Source/CMakeFiles/CMakeLib.dir/cmNinjaTargetGenerator.cxx.o] Error 1