summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt31
-rw-r--r--Contributing.md3
-rw-r--r--Readme.md10
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.
diff --git a/Readme.md b/Readme.md
index 242b459137..6eadae6e7b 100644
--- a/Readme.md
+++ b/Readme.md
@@ -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