Merge pull request #10969 from phire/minimum_compilers
Enforce minimum supported versions of GCC and Clang
This commit is contained in:
commit
b514df1227
|
@ -42,6 +42,31 @@ if (MSVC)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
endif()
|
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,
|
# Name of the Dolphin distributor. If you redistribute Dolphin builds (forks,
|
||||||
# unofficial builds) please consider identifying your distribution with a
|
# unofficial builds) please consider identifying your distribution with a
|
||||||
# unique name here.
|
# unique name here.
|
||||||
|
@ -260,12 +285,6 @@ else()
|
||||||
" Enable generic build if you really want a JIT-less binary.")
|
" Enable generic build if you really want a JIT-less binary.")
|
||||||
endif()
|
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")
|
if(CMAKE_GENERATOR MATCHES "Ninja")
|
||||||
check_and_add_flag(DIAGNOSTICS_COLOR -fdiagnostics-color)
|
check_and_add_flag(DIAGNOSTICS_COLOR -fdiagnostics-color)
|
||||||
elseif(CMAKE_GENERATOR MATCHES "Visual Studio")
|
elseif(CMAKE_GENERATOR MATCHES "Visual Studio")
|
||||||
|
|
|
@ -173,7 +173,8 @@ Summary:
|
||||||
- [Classes and Structs](#cpp-code-classes-and-structs)
|
- [Classes and Structs](#cpp-code-classes-and-structs)
|
||||||
|
|
||||||
## <a name="cpp-code-general"></a>General
|
## <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`.
|
- 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.
|
- 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.
|
- Obviously, try not to use `goto` unless you have a *really* good reason for it.
|
||||||
|
|
10
Readme.md
10
Readme.md
|
@ -53,10 +53,12 @@ The "Debug" solution configuration is significantly slower, more verbose and les
|
||||||
|
|
||||||
## Building for Linux and macOS
|
## Building for Linux and macOS
|
||||||
|
|
||||||
Dolphin requires [CMake](https://cmake.org/) for systems other than Windows. Many libraries are
|
Dolphin requires [CMake](https://cmake.org/) for systems other than Windows.
|
||||||
bundled with Dolphin and used if they're not installed on your system. CMake
|
You need a recent version of GCC or Clang with decent c++20 support. CMake will
|
||||||
will inform you if a bundled library is used or if you need to install any
|
inform you if your compiler is too old.
|
||||||
missing packages yourself. You may refer to the [wiki](https://github.com/dolphin-emu/dolphin/wiki/Building-for-Linux) for more information.
|
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:
|
Make sure to pull submodules before building:
|
||||||
```sh
|
```sh
|
||||||
|
|
Loading…
Reference in New Issue