mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-06-14 08:39:35 +02:00
ac1ccc5bd9build: Add CTAD feature check (Pol Espinasa)9f273f1c1cbuild: Add path to doc recommended versions for CLANG, GCC and MSVC (Pol Espinasa) Pull request description: Adds a compiler features check. If failed, it returns a fatal error. This early stop at configure time will avoid contributors losing time trying to fix compilation errors because of not fitting the requirements. Example of the output for GCC: Version requirement satisfied: ``` $ cmake -B build -- The CXX compiler identification is GNU 13.3.0 -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done ... -- Checking for required C++ features -- Checking for required C++ features - done .... ``` Compiler feature requirement not satisfied: ``` $ cmake -B build -DCMAKE_C_COMPILER=/usr/bin/gcc-10 -DCMAKE_CXX_COMPILER=/usr/bin/g++-10 -- The CXX compiler identification is GNU 10.5.0 -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /usr/bin/g++-10 - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Setting build type to "RelWithDebInfo" as none was specified -- Performing Test CXX_SUPPORTS__WERROR -- Performing Test CXX_SUPPORTS__WERROR - Success -- Found SQLite3: /usr/include (found suitable version "3.45.1", minimum required is "3.7.17") -- Checking for required C++ features CMake Error at cmake/module/CheckCXXFeatures.cmake:32 (message): Compiler lacks Class Template Argument Deduction (CTAD) for aggregates. This C++ feature is required for src/util/overloaded.h. You are probably using an old compiler version The recommended compiler versions can be checked in: - GCC -> doc/dependencies.md#compiler - Clang -> doc/dependencies.md#compiler - MSVC -> doc/build-windows-msvc.md Call Stack (most recent call first): CMakeLists.txt:198 (check_cxx_features) -- Configuring incomplete, errors occurred! ``` Example of the output for Clang: Compiler feature requirement satisfied: ``` $ cmake -B build -DCMAKE_C_COMPILER=clang-20 -DCMAKE_CXX_COMPILER=clang++-20 -- The CXX compiler identification is Clang 20.1.2 -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /usr/bin/clang++-20 - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done ... -- Checking for required C++ features -- Checking for required C++ features - done ... ``` Compiler feature requirement not satisfied: ``` $ cmake -B build -DCMAKE_C_COMPILER=clang-16 -DCMAKE_CXX_COMPILER=clang++-16 -- The CXX compiler identification is Clang 16.0.6 -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /usr/bin/clang++-16 - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Setting build type to "RelWithDebInfo" as none was specified -- Performing Test CXX_SUPPORTS__WERROR -- Performing Test CXX_SUPPORTS__WERROR - Success -- Performing Test CXX_SUPPORTS__G3 -- Performing Test CXX_SUPPORTS__G3 - Success -- Performing Test LINKER_SUPPORTS__G3 -- Performing Test LINKER_SUPPORTS__G3 - Success -- Performing Test CXX_SUPPORTS__FTRAPV -- Performing Test CXX_SUPPORTS__FTRAPV - Success -- Performing Test LINKER_SUPPORTS__FTRAPV -- Performing Test LINKER_SUPPORTS__FTRAPV - Success -- Found SQLite3: /usr/include (found suitable version "3.45.1", minimum required is "3.7.17") -- Checking for required C++ features CMake Error at cmake/module/CheckCXXFeatures.cmake:32 (message): Compiler lacks Class Template Argument Deduction (CTAD) for aggregates. This C++ feature is required for src/util/overloaded.h. You are probably using an old compiler version The recommended compiler versions can be checked in: - GCC -> doc/dependencies.md#compiler - Clang -> doc/dependencies.md#compiler - MSVC -> doc/build-windows-msvc.md Call Stack (most recent call first): CMakeLists.txt:198 (check_cxx_features) -- Configuring incomplete, errors occurred! ``` Edit: The first version of the PR was to check hardcoded compiler versions. See previous PR description for context here. <details> Adds a compiler minimum version check. If failed, it returns a fatal error. This early stop at configure time will avoid contributors losing time trying to fix compilation errors because of not fitting the requirements. Example of the output for GCC: Version requirement satisfied: ``` sliv3r@sliv3r-tuxedo:~/Documentos/Projectes/BitcoinCore/bitcoin$ cmake -B BUILD -- The CXX compiler identification is GNU 13.3.0 -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done .... ``` Version requirement not satisfied: ``` $ cmake -B build -S . -DCMAKE_C_COMPILER=/usr/bin/gcc-11 -DCMAKE_CXX_COMPILER=/usr/bin/g++-11 -- The CXX compiler identification is GNU 11.5.0 -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /usr/bin/g++-11 - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done CMake Error at CMakeLists.txt:91 (message): GCC >= 12.1 required. -- Configuring incomplete, errors occurred! ``` Example of the output for Clang: Version requirement satisfied: ``` sliv3r@sliv3r-tuxedo:~/Documentos/Projectes/BitcoinCore/bitcoin$ cmake -B build -- The CXX compiler identification is Clang 18.1.3 -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done ... ``` Version requirement not satisfied: ``` $ cmake -B build -DCMAKE_C_COMPILER=clang-16 -DCMAKE_CXX_COMPILER=clang++-16 -- The CXX compiler identification is Clang 16.0.6 -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /usr/bin/clang++-16 - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done CMake Error at CMakeLists.txt:86 (message): Clang >= 17.0 required. -- Configuring incomplete, errors occurred! ``` <\detail> ACKs for top commit: davidgumberg: crACKac1ccc5bd9achow101: ACKac1ccc5bd9vasild: ACKac1ccc5bd9w0xlt: ACKac1ccc5bd9ryanofsky: Code review ACKac1ccc5bd9. Very much agree with all the previous comments to not check specific compiler versions, and glad this PR is in better shape now. Tree-SHA512: 15a12f56016846427ed8273406c3e9a52a6435bf7033c8fef82bb0e6c9fd75d40a62c79d33f9dd6da8717500f21a629da07620f160b3d43368dd7579f773b4bc