diff options
| author | Admiral H. Curtiss <pikachu025@gmail.com> | 2023-05-01 03:03:05 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-05-01 03:03:05 +0200 |
| commit | b514df1227f89fcc6f8e6a2cdd2abae8a100d054 (patch) | |
| tree | d34399941cd4e07141c43cbb2530c73d7e1302d7 | |
| parent | 0eeeac2487cebe8e8eeae95d40c4e6c9ed640424 (diff) | |
| parent | a306da2f80ab3d08b674cfc3ed35ee85536669e6 (diff) | |
Merge pull request #10969 from phire/minimum_compilers
Enforce minimum supported versions of GCC and Clang
| -rw-r--r-- | CMakeLists.txt | 31 | ||||
| -rw-r--r-- | Contributing.md | 3 | ||||
| -rw-r--r-- | Readme.md | 10 |
3 files changed, 33 insertions, 11 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index c702c69dce..06ddaf127f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,6 +42,31 @@ if (MSVC) set(CMAKE_CXX_STANDARD_REQUIRED ON) endif() +set(COMPILER ${CMAKE_CXX_COMPILER_ID}) +if (COMPILER STREQUAL "GNU") + set(COMPILER "GCC") # perfer printing GCC instead of GNU +endif() + +# Enforce minimium compiler versions that support the c++20 features we use +set (GCC_min_version 10) +set (Clang_min_version 12) +set (AppleClang_min_version 13.0.0) +set (min_xcode_version "13.0") # corrosponding xcode version for AppleClang_min_version +set (MSVC_min_version 14.32) +set (min_vs_version "2022 17.2.3") # corrosponding Visual Studio version for MSVC_min_version + +message(STATUS "Using ${COMPILER} ${CMAKE_CXX_COMPILER_VERSION}") + +if ("-" STREQUAL "${${COMPILER}_min_version}-") + message(WARNING "Unknown compiler ${COMPILER}, assuming it is new enough") +else() + if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${${COMPILER}_min_version}) + message(FATAL_ERROR "Requires GCC ${GCC_min_version}, Clang ${Clang_min_version}," + " AppleClang ${AppleClang_min_version} (Xcode ${min_xcode_version})," + " or MSVC ${MSVC_min_version} (Visual Studio ${min_vs_version}) or higher") + endif() +endif() + # Name of the Dolphin distributor. If you redistribute Dolphin builds (forks, # unofficial builds) please consider identifying your distribution with a # unique name here. @@ -260,12 +285,6 @@ else() " Enable generic build if you really want a JIT-less binary.") endif() - -# Enforce minimum GCC version -if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0) - message(FATAL_ERROR "Dolphin requires at least GCC 7.0 (found ${CMAKE_CXX_COMPILER_VERSION})") -endif() - if(CMAKE_GENERATOR MATCHES "Ninja") check_and_add_flag(DIAGNOSTICS_COLOR -fdiagnostics-color) elseif(CMAKE_GENERATOR MATCHES "Visual Studio") diff --git a/Contributing.md b/Contributing.md index a78436d5df..21c6a96888 100644 --- a/Contributing.md +++ b/Contributing.md @@ -173,7 +173,8 @@ Summary: - [Classes and Structs](#cpp-code-classes-and-structs) ## <a name="cpp-code-general"></a>General -- The codebase currently uses C++17. +- The codebase currently uses C++20, though not all compilers support all C++20 features. + - See CMakeLists.txt "Enforce minimium compiler versions" for the currently supported compilers. - Use the [nullptr](https://en.cppreference.com/w/cpp/language/nullptr) type over the macro `NULL`. - If a [range-based for loop](https://en.cppreference.com/w/cpp/language/range-for) can be used instead of container iterators, use it. - Obviously, try not to use `goto` unless you have a *really* good reason for it. @@ -53,10 +53,12 @@ The "Debug" solution configuration is significantly slower, more verbose and les ## Building for Linux and macOS -Dolphin requires [CMake](https://cmake.org/) for systems other than Windows. Many libraries are -bundled with Dolphin and used if they're not installed on your system. CMake -will inform you if a bundled library is used or if you need to install any -missing packages yourself. You may refer to the [wiki](https://github.com/dolphin-emu/dolphin/wiki/Building-for-Linux) for more information. +Dolphin requires [CMake](https://cmake.org/) for systems other than Windows. +You need a recent version of GCC or Clang with decent c++20 support. CMake will +inform you if your compiler is too old. +Many libraries are bundled with Dolphin and used if they're not installed on +your system. CMake will inform you if a bundled library is used or if you need +to install any missing packages yourself. You may refer to the [wiki](https://github.com/dolphin-emu/dolphin/wiki/Building-for-Linux) for more information. Make sure to pull submodules before building: ```sh |
